修复的定义?

时间:2009-07-06 16:42:47

标签: compiler-construction linker assembly fixup

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

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

2 个答案:

答案 0 :(得分:9)

“fixup”是一个链接器术语。这里有一个很好的讨论:

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

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

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

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

答案 1 :(得分:1)

链接器和加载器是一个有趣的着墨器资源,它解释了很多术语,并且包括非x86 cpus:

http://www.iecc.com/linker/

来自comp.compilers主持人的