当“修复”应用于一个部分时,它到底是做什么的?
在一个fasm示例中,我找到了下面的delcaration部分,我真的不确定fixups属性的作用,我在fasm文档中找不到关于它的很多信息。
section '.reloc' fixups data readable discardable
if $=$$
dd 0,8 ; if there are no fixups, generate dummy entry
end if
最佳答案
这似乎是bug in how FASM generates PECOFF DLLs的一个解决方法。.reloc
部分仅适用于pecoff映像(exe和dll),并提供允许在任何地址加载映像的重定位(或“修正”)。(在pecoff对象文件中使用了不同类型的重新定位;这些修正不会放在.reloc
部分中。)
fasm中的错误在于,如果dll不需要任何重新定位,而不是根本不生成一个空的.reloc
节。如果dll(或exe)的节为空,windows将拒绝加载该dll(或exe)。如果.reloc
节没有任何内容,则通过添加一个虚拟的“基本重定位块”来强制非空的.reloc
节。
显然,fasm的开发人员并不认为这是fasm中的一个bug,而是windows中的一个bug,因此还没有修复它。
要直接回答您的问题,fixups
关键字似乎表示此部分是fasm的特殊部分,它用于如上所述的图像重定位。与其他属性不同,它与pecoff图像中使用的部分标志之一不对应,因此它似乎只在fasm内部使用。