如何在ASM数据部分中取消引用指针?

时间:2017-10-25 06:47:54

标签: c assembly symbols extern dereference

我有一个C代码,声明一个全局指针并初始化它。像这样:

my_type* var = malloc(...)

当我在ASM x86中将var声明为extern符号时,我得到了对指针的引用,即双指针,这真的很不方便,因为无论何时我想访问内容,我都必须这样做:

extern var
mov ax, [var]
mov dx, [ax]

我希望在ASM中获得一个符号,该符号包含malloc返回的值,即我在C代码中指向my_type的指针。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:3)

变量的工作原理。符号的值(即其地址)在运行时不能改变,这就是符号通常解析为数据的地址而不是数据本身的原因。没有办法获得您想要的确切行为,因为在链接时无法知道地址malloc返回。

如果你想避免处理包含指针的变量,可以考虑在静态存储中创建一个数组。