如何在c中获取asm函数的地址
how to get the address of an asm function in c
我有一个 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;
您应该能够使用您在 .global
声明中使用的相同符号在 C 中声明您的 asm 函数:
extern void myfunc(void);
符号由链接器解析。只要从您的 asm 文件创建的目标文件导出符号 myfunc
,您的 C 源代码的目标文件就可能包含对它的未定义引用。
根据特定的 ABI 或目标文件格式(a.out 与 ELF),您可能需要在 extern
声明中使用 _myfunc
而不是 myfunc
。
我有一个 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;
您应该能够使用您在 .global
声明中使用的相同符号在 C 中声明您的 asm 函数:
extern void myfunc(void);
符号由链接器解析。只要从您的 asm 文件创建的目标文件导出符号 myfunc
,您的 C 源代码的目标文件就可能包含对它的未定义引用。
根据特定的 ABI 或目标文件格式(a.out 与 ELF),您可能需要在 extern
声明中使用 _myfunc
而不是 myfunc
。