在代码生成场景中,我想发出汇编代码(Microsoft工具链,所以MASM为64位或32位),这样我就可以定义一个PUBLIC
符号,它的值与某些符号相同EXTERN
符号 - 换句话说,就是"转发"符号定义。然后,想法是链接器将解决问题,以便PUBLIC
符号的任何使用实际上将引用EXTERN
符号的值。当然,EXTERN
符号应该在其他目标文件中定义。
作为一个具体的例子,考虑我有一些属于一个库的对象文件extern是一个符号To
,它是某个函数的地址。现在假设我有一个C头,它声明了一个带有正确签名的函数From
。我的目标是汇编语言文件"等同于#34; From
To
From
,以便当包含调用To
的函数的文件与保存To
的目标文件和来自此汇编语言thunk的目标文件链接在一起时链接器将进行设置,以便调用函数JMP
。
我目前通过生成PUBLIC From
EXTERN To
_TEXT SEGMENT
From:
JMP To
_TEXT ENDS
语句来执行此操作,例如:
JMP
这样可以正常工作,但出于某些目的,我宁愿不通过From
- 指令,而是希望调用To
来真正调用{{ 1}}。例如,我希望能够获取From
的地址并获取To
的第一个字节的地址,而不是JMP
指令。
(如果我不能通过MASM进行,那么也许我可以使用某种指令的LINK文件来做?或者,除了MASM之外,我可以使用另一个汇编程序,或者不同的工具链,最好是Windows但对Linux来说不是吗?)
(我想我应该提一下
PUBLIC From
EXTERN To
From EQU Bar
不起作用:error A2014: cannot define as public or external : From
)