Windows 如何使用汇编器(或链接器)定义等于外部符号的公共符号?

Windows 如何使用汇编器(或链接器)定义等于外部符号的公共符号?,windows,assembly,linker,code-generation,masm,Windows,Assembly,Linker,Code Generation,Masm,在代码生成场景中,我希望发出汇编代码(Microsoft toolchain,所以MASM表示64位或32位),这样我就可以定义一个PUBLIC符号,该符号将与一些EXTERN符号具有相同的值-换句话说,有点“转发”符号定义。然后,这个想法是链接器将解决问题,这样任何使用PUBLIC符号的行为实际上都会引用EXTERN符号的值。当然,EXTERN符号应该在其他一些对象文件中定义 作为一个具体的例子,考虑到我有一个对象文件属于一个库,它的外部函数是一个符号到>代码>,这是某个函数的地址。现在假设我

在代码生成场景中,我希望发出汇编代码(Microsoft toolchain,所以MASM表示64位或32位),这样我就可以定义一个
PUBLIC
符号,该符号将与一些
EXTERN
符号具有相同的值-换句话说,有点“转发”符号定义。然后,这个想法是链接器将解决问题,这样任何使用
PUBLIC
符号的行为实际上都会引用
EXTERN
符号的值。当然,
EXTERN
符号应该在其他一些对象文件中定义

作为一个具体的例子,考虑到我有一个对象文件属于一个库,它的外部函数是一个符号<代码>到>代码>,这是某个函数的地址。现在假设我有一个C头,它声明了一个带有正确签名的函数

From
。我的目标是一个“等同”的汇编语言文件
From
,这样当包含从调用
的函数的文件与包含
的目标文件以及来自此汇编语言的目标文件链接在一起时,链接器将进行设置,以便调用函数

我目前正在通过生成
JMP
语句来实现这一点,例如:

PUBLIC From
EXTERN To
_TEXT  SEGMENT
From:
       JMP  To
_TEXT  ENDS
就其本身而言,这工作正常,但出于某些目的,我不希望通过
JMP
-指令来执行,而是希望从
调用
,实际上是调用
。例如,我希望能够从
获取
的地址,并获取
的第一个字节的地址,而不是
JMP
指令

(如果我不能通过MASM来完成,那么也许我可以使用某种指令链接文件来完成?或者,我可以使用除MASM之外的另一个汇编器来完成,或者使用不同的工具链来完成,最好是针对Windows,而不是针对Linux?)

(我想我应该提一下

PUBLIC From
EXTERN To
From EQU Bar

不工作:
错误A2014:无法定义为公共或外部:从

出于好奇,为什么模块不能直接使用
?< <代码> > <代码>是否需要在其他模块中“被外加”?它不是在定义中的吗?@ Lurk.我试图得到一个工具,它在特定的意义上,在编译时,与另一C++类C++相匹配(与运行代理时的运行时间相反)。在某些情况下,目标类是直接可用的,在这种情况下,我希望代理上的方法调用直接对目标的方法进行。在编译目标类'.cpp时,C++编译器已经删除了我正在查看的方法名称。我认为<>代码>的代码/代码>的缺点是它在汇编时解决了所有问题,但是直到链接时间,<>代码> < /> >将无法解决。我现在还没有一个答案,但不知何故,这(我认为)需要引导链接器(正如您在对
链接的引用中所暗示的那样)允许同一入口点/标签使用另一个符号。您现在所做的重击可能是在程序集级别所能做的最好的。您可能已经看过了,但是您可以看看链接器
.def
文件的指令。特别是
func2=func1
选项。如果导出的唯一符号是别名,这可能会起作用,但如果您需要同时导出原始的
导出,那么它可能不允许这样做。