2010-12-02 81 views
2

如何將C main函數的參數傳遞給彙編函數?我知道我的自定義函數必須看起來像:將參數從C傳遞給程序集?

void function(char *somedata) __attribute__((cdecl)); 

現在我將如何在裝配文件中使用somedata。我的操作系統是Linux Ubuntu,我的處理器是x86。

回答

12

我在這裏有點小事,但希望這個例子能讓你順利。我已經測試過它,它的工作原理,唯一的問題是軟件不可用。我正在使用nasm進行組裝。

的main.c

extern void myFunc(char * somedata); 

void main(){ 
    myFunc("Hello World"); 
} 

myFunc.asm

section .text 
    global myFunc 
    extern printf 

    myFunc: 
     push ebp 
     mov ebp, esp 

     push dword [ebp+8] 
     call printf 

     mov esp, ebp 
     pop ebp 
     ret 

COMPILE

nasm -f elf myFunc.asm 
gcc main.c myFunc.o -o main 

注:

您需要安裝NASM(彙編)(Ubuntu的是:sudo apt-get install nasm)

基本上發生在c代碼中的消息調用myFunc。在myFunc.asm中,我們得到字符串的第一個字符的地址(在[ebp + 8]中可以看到這裏的信息(http://www.nasm.us/xdoc/2.09.04/html/nasmdoc9.html見9.1.2,它在某種程度上描述了c調用約定),並將它傳遞給printf函數(通過將它推入堆棧)。printf位於c標準庫中,默認情況下gcc會自動鏈接到我們的代碼中,除非我們說不

我們必須在彙編文件中導出myFunc,並在main.c文件中聲明myFunc爲外部函數在myFunc.asm中,我們也從stdlib導入printf函數,以便我們可以輸出消息爲儘可能簡單

希望這會有所幫助

+0

正是我在找什麼。 – 2010-12-05 02:49:46