[英]how to get the address of an asm function in c
我有一個asm文件(我正在使用gas)和ac文件。 我的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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.