于渊使用虚拟机中的Linux来编译内核,还是那么老的版本。
以前我在机器装了Ubuntu,结果Ubuntu里还没有nasm,要自己下载。
我对Linux可是几乎没什么了解,并且,我即便在敲代码的时候也喜欢挂着QQ,聊聊天,
怎舍得离开Windows的呵护。
言归正传,书中使用nasm编译出elf格式的文件,但是MinGW却死活弄不出elf文件,
索性就让nasm编译出coff文件以便配合MinGW。
现在的问题是,如何连接它们,用GCC吧,一下子连接出EP文件……
最终的方案是自己写了一个连接器400多行吧,将就着能用了。
可以连接出com文件,还不错。
coff资料:
http://baike.baidu.com/view/453125.htm (百度百科…)
其中只有一个地方没讲清楚,害的我分析了半天:
所有重定位内部变量时,重定位表项索引的符号都是数据段符号,
也就是说,我们只能得到数据段的在数据段中的偏移(真拗口),
其最终的绝对地址还应该加上被重定位处的值。