gpt4 book ai didi

c++ - Borland x86 内联汇编程序;获取标签的地址?

转载 作者:可可西里 更新时间:2023-11-01 17:38:44 25 4
gpt4 key购买 nike

我正在使用带有一些内联汇编程序代码的 Borland Turbo C++,因此大概是 Turbo Assembler (TASM) 风格的汇编代码。我希望执行以下操作:

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

所以SomeLabel的地址被放到了EAX中。这不起作用,编译器会提示: undefined symbol “SomeLabel”。

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

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

有人可以建议如何让它工作吗?

更新:为了回应 Pax 的问题(见评论),如果 Windows 加载程序在运行时更改了基地址,DLL/EXE PE 镜像仍将由 Windows 加载程序重定位,标签地址将在加载器在运行时使用重新定位的地址,因此使用标签地址的编译/链接时间值不是问题。

非常感谢。

最佳答案

上次我尝试使一些汇编代码与 Borland 兼容时,我遇到了不能向前引用标签的限制。不确定这是否是您在这里遇到的问题。

关于c++ - Borland x86 内联汇编程序;获取标签的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/209198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com