《操作系统真象还原》中如何将init进程加载到用户空间

这本讲内核编写的书挺不错的,从空的裸盘一步步到一个带shell的小操作系统,完成之后颇有收获,但我看到最后发现作者遗漏了一个关键的部分:内核保护,即不能允许用户进程随意读写内核。这个漏洞需要补上。

将loader.S中高1G区域,即内核空间的页表权限设为内核级,那么用户进程就无法访问内核了,但是按照作者的进程写法,这样简单修改后init进程是无法启动的,为了操作系统的正常运行还需要修改很多其他地方。

修改基于示例代码c15/g。

Read More »

Python虚拟环境(venv)失效后的修复方式

以下示例环境是Windows下的Python内置模块venv。其他平台以及其他相似功能模块(如virtualenv)其实都是类似的。

首先第一个常见的导致虚拟环境失效的原因是虚拟环境文件夹路径变化,包括对虚拟环境重命名,复制移动等等,之所以虚拟环境路径变化会导致其失效是因为在虚拟环境的scripts文件夹下的一堆activate启动脚本中记录着原本虚拟环境的绝对路径,所以路径变更后这些绝对路径也应当更新。

还有就是scripts中除了python.exe和pythonw.exe外的所有模块exe文件都硬编码了虚拟环境中的python解释器的绝对路径。如图:(我的虚拟环境位置就是D:\workspace\virtualenvs\test)

Read More »

Git设置和取消代理

Git配置代理需要分两种情况:使用ssh仓库地址和使用https仓库地址,对于前者实际进行通信的软件为ssh,所以与git软件的配置无关。

一,如果仓库地址是ssh的,那么要编辑ssh配置文件。对于Linux,此文件的地址为:~/.ssh/config,对于Windows,此文件则位于:C:\Users\用户名\.ssh\config,若不存在请自行创建。并进行如下的编辑:

Host github.com *.github.com
    User git
    Port 22
    # http使用-H,socks使用-S
    ProxyCommand "D:\Development\PortableGit\mingw64\bin\connect" -S 127.0.0.1:10808 %h %p
Read More »