当前位置:  开发笔记 > 编程语言 > 正文

Borland x86内联汇编程序; 得到标签的地址?

如何解决《Borlandx86内联汇编程序;得到标签的地址?》经验,为你挑选了0个好方法。

我正在使用Borland Turbo C++和一些内联汇编程序代码,因此可能是Turbo Assembler(TASM)样式汇编代码.我希望做到以下几点:

void foo::bar( void )
{
    __asm
    {
      mov eax, SomeLabel
      // ...
    }
    // ...
SomeLabel:
    // ...
}

所以SomeLabel的地址放在了EAX中.这不起作用,编译器抱怨:未定义的符号'SomeLabel'.

在Microsoft Assembler(MASM)中,美元符号($)用作当前位置计数器,这对我的目的很有用.但是,这似乎在Borlands Assember中没有用(表达式语法错误).

更新:为了更具体一点,我需要编译器在编译/链接期间生成作为常量移动到eax的地址,而不是在运行时,因此它将编译为"mov eax,0x00401234".

任何人都可以建议如何使这个工作?

更新:要响应Pax的问题​​(请参阅注释),如果Windows加载程序在运行时更改了基址,则Windows加载程序仍将重定位DLL/EXE PE映像,并且标记地址将在运行时通过以下方式修补:加载器使用基于重新的地址,因此使用标签地址的编译/链接时间值不是问题.

提前谢谢了.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有