簡體   English   中英

如何在c中獲取asm函數的地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM