我在链接程序集时遇到了一些问题。我使用NASM作为程序集,然后用 ld 链接它。一个小问题是,GLOBAL指令只有在我定义了.data部分时才能工作,我相信这一部分是合理的,但仍然是:这对于导出符号有何重要性?(我决定使用coff,因为这是与使用-c选项从g++中导出的格式最相似的格式)。主要的问题是,即使我设法链接它,调用导致一些地址和函数不在那里。感谢您的时间阅读,如果你有一些建议或关键字,我应该谷歌得到一些关于链接和符号,这将是完全伟大的。
GLOBAL
.data
ulydmbyx1#
我没有在Windows上使用过nasm,但从nasm -hf的输出来看,我猜您需要的是win32,而不是coff。COFF格式是一种较旧的目标文件格式,现在Windows上使用的PE-COFF(或只是“PE”)格式是一种较新的版本。至于为什么需要在GLOBAL指令生效之前指定SECTION,我没有看到这种行为。有没有可能您没有在标签之前声明GLOBAL?或者有可能符号正在发出,但无法提供正确的链接,例如,它本来是数据变量,但在.text部分分配了空间。
nasm -hf
win32
coff
1条答案
按热度按时间ulydmbyx1#
我没有在Windows上使用过nasm,但从
nasm -hf
的输出来看,我猜您需要的是win32
,而不是coff
。COFF格式是一种较旧的目标文件格式,现在Windows上使用的PE-COFF(或只是“PE”)格式是一种较新的版本。至于为什么需要在GLOBAL指令生效之前指定SECTION,我没有看到这种行为。有没有可能您没有在标签之前声明GLOBAL?或者有可能符号正在发出,但无法提供正确的链接,例如,它本来是数据变量,但在.text部分分配了空间。