【发布时间】:2015-08-26 16:18:53
【问题描述】:
我有一个 asm 文件(我正在使用 gas)和一个 c 文件。我的 asm 文件包含一个函数,像这样
.global myfunc
.type myfunc, @function
myfunc:
pusha
.
.
.
现在我想从我的c文件中获取标签myfunc的地址,所以我写了
extern uintptr_t _myfunc asm("myfunc");
我的程序链接没有问题,但是当我执行我的程序时,变量 _myfunc 不包含正确的地址。
编辑 1
也许知道这段代码是裸机程序的一部分很有用
编辑 2
使用函数原型解决了问题
void function() asm("myfunc");
uintptr_t _myfunc = (uintptr_t)&myfunc;
【问题讨论】:
-
你怎么知道它没有包含正确的地址?
-
我已经使用命令 x/i 使用 gdb 检查了内存。
-
好点 :) 您可能希望将此信息添加到您的原始问题中作为编辑。
-
为什么不简单地创建一个原型,并像使用任何其他自然衰减到函数指针的函数一样使用它?如果您不确定,请使用地址运算符,如
&myfunc。然后让链接器解析地址。 -
我还是不明白你在比较什么。您如何获得“正确”地址,以及如何查看“错误”地址?您可以将步骤添加到问题正文中吗?
标签: c gnu-assembler