如何使用汇编程序(或链接程序)定义一个等于外部符号的公共符号?

时间:2015-03-23 00:43:03

标签: windows assembly linker code-generation masm

在代码生成场景中,我想发出汇编代码(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

0 个答案:

没有答案