"在加载时要求文件中的一页对应内存中的一页"这句话好诡异啊,是不是应该是"在加载时要求文件中的一个segment对应内存中的一页,要不然的话文件怎么分页啊,这边也没说啊。
不是文件中的一个segment对应内存中的一页,而是文件中的一个4KB页对应内存中的一页。我再改改,说清楚一点好了。
“在ELF Header中,Type改成了EXEC,”,前后有变化的地方,如果能用不同的颜色或字体区分开,这样对比看起来就更直观了。 因为刚开始学,不是很熟,接受起来有点吃力。
指令中的地址原本是0x00000000,现在改成了0x080409a0(注意是小端字节序)。那么链接器怎么知道要改这两处呢?是根据目标文件中的.rel.text段提供的重定位信息来改的: 0x080409a0这个应该是0x080490a0
多谢指出!
讲的很好呀,非常感谢!!我编译了一下linux0.11,system部分是elf格式的,显然,我现在没有办法与前面的两部分拼接了。system前面一部分代码执行时,分页机制还没开启呢(即便开启了,也是从虚拟地址0开始执行的),但现在编译的system用的全是虚拟地址,大家有没有好的解决办法呀?
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!