微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何移动registry中的标签地址?

在x86的gcc内联汇编中,如何移动标签在寄存器中的地址。 它应该是什么,而不是$标签在这里,因为汇编错误未定义的引用标签

请注意,标签在asm块之外,即在正常的C代码中。

__asm__ __volatile__ ("movl $label,%eax;"); label: .....

Win32 ASM程序不打印任何命令行

链接器如何确定.rodata节中某些数据的地址?

比较字符和Intel x86_64程序集

Objdump -S不显示Linux内核模块的源代码列表

如何testingSTDIN读取错误

NASM程序集中的Windows API哔声function

Linux程序集; bss节内存初始化为0?

在32位模式下的NASM x86_64汇编:为什么此指令产生RIP相对寻址代码

在Linux 64位上交叉编译Windows 64位程序集

无法打开包含文件“io.mac”程序集

你可以做:

register unsigned long eax __asm__("eax"); // See [1] eax = &&label; // See [2] label: // some code

但是,请注意:GCC可以自由地对优化下的代码进行重新排序,因此C label可能并不完全符合您的期望。

如果你需要精确地放置label (例如,因为一些汇编代码会跳到它),你最好在编写整个东西的时候。

[1] http://gcc.gnu.org/onlinedocs/gcc/Local-Reg-Vars.html#Local-Reg-Vars

[2] http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html

我知道了,标签也应该包装在一个组装块,像这样…

__asm__ __volatile__ ("label:");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐