gpt4 book ai didi

c - 从 Asm 访问 C 中定义的全局变量

转载 作者:行者123 更新时间:2023-12-02 00:07:33 26 4
gpt4 key购买 nike

我有一个包含全局变量 foo 的 C 文件。我如何访问 foo 来自另一个程序集。
我正在使用 i586-elf-as(GNU 汇编器)和 i586-elf-gcc(gnu 编译器)进行构建。

最佳答案

您可以只使用符号名称; as将所有 undefined symbol 视为外部符号。

检查编译器输出 ( gcc -S ) 和/或文档以了解 C 变量名称是否有前导 _预先准备与否。 ( int myglobal 在许多非 ELF 平台上变成 asm _myglobal,但在 Linux/ELF 上仍然是 myglobal。)

当然,如果您使用 C++ 编译器,就会发生 C++ 名称修改,除了 extern "C"变量。

如果你想明确声明它,有一个 .extern GAS 忽略的指令(为了与其他一些 Unix 汇编器兼容)。 Documentation in the GAS manual

.extern foo       # ignored, no extra checking is done because of this

例如在 x86-64 上, lea myglobal(%rip), %rsimov $myglobal, %esi将地址放入 AT&T 语法中的寄存器中。

mov myglobal(%rip), %eax从它加载。或 mov global, %eax以 32 位模式从它加载,使用 32 位绝对地址,因为 RIP 相对寻址仅在 64 位模式下可用。

关于c - 从 Asm 访问 C 中定义的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17365638/

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