修复的定义?

Les*_*zer 4 compiler-construction assembly linker fixup

我在Python Lisp编译器和一些C链接器的源代码中看到了这个术语.

我的猜测是,一个修复只是一个程序集周围的包装,确保对齐是正确的,但我不确定这里有什么.

Geo*_*ips 9

"fixup"是链接器术语.这里有一个很好的讨论:

http://www.microsoft.com/msj/0797/hood0797.aspx

每当一个目标文件(.o,.obj)引用一些外部符号时,它将输出占位符代码,如"将地址0放到寄存器5",以及一条说明"用符号'foo'的实际地址填写0的说明" .其他一些目标文件将定义'foo',然后链接器将返回并"修正"0为正确的地址.

顺便说一句,如果没有人定义'foo',那么你会得到那些复古50的样式错误信息,例如'无法找到对_foo的引用',或者如果你正在使用C++则更难以理解.

当'foo'的地址不适合链接器想要放置的位置时,很少会出现"修复错误".通常,这来自需要相对偏移太大的修正.