【发布时间】:2018-04-06 03:30:47
【问题描述】:
我有一个声明全局指针并初始化它的 C 代码。像这样的:
my_type* var = malloc(...)
当我在 ASM x86 中将 var 声明为外部符号时,我得到了对指针的引用,即双指针,这真的很不方便,因为每当我想访问内容时,我都必须这样做:
extern var
mov ax, [var]
mov dx, [ax]
我想在 ASM 中获得一个包含 malloc 返回值的符号,即我在 C 代码中的指向 my_type 的指针。
有没有办法做到这一点?
【问题讨论】:
-
能否展示ASM代码的相关部分?
-
你的意思是
&var是一个双指针?所以你必须加载两次才能访问分配的内存?是的,当您将 malloc 返回值存储在内存中而不是在寄存器中传递它们时,就会发生这种情况。 -
我在 ASM 中添加了一个代码示例。我想避免使用括号两次!
-
@NicolásHertzulis 正如我在回答中解释的那样,没有办法避免这种情况。这就是装配的工作原理。第一次加载获取指针,第二次获取指向的数据。
标签: c assembly symbols extern dereference