如何將C main函數的參數傳遞給彙編函數?我知道我的自定義函數必須看起來像:將參數從C傳遞給程序集?
void function(char *somedata) __attribute__((cdecl));
現在我將如何在裝配文件中使用somedata
。我的操作系統是Linux Ubuntu,我的處理器是x86。
如何將C main函數的參數傳遞給彙編函數?我知道我的自定義函數必須看起來像:將參數從C傳遞給程序集?
void function(char *somedata) __attribute__((cdecl));
現在我將如何在裝配文件中使用somedata
。我的操作系統是Linux Ubuntu,我的處理器是x86。
我在這裏有點小事,但希望這個例子能讓你順利。我已經測試過它,它的工作原理,唯一的問題是軟件不可用。我正在使用nasm進行組裝。
extern void myFunc(char * somedata);
void main(){
myFunc("Hello World");
}
section .text
global myFunc
extern printf
myFunc:
push ebp
mov ebp, esp
push dword [ebp+8]
call printf
mov esp, ebp
pop ebp
ret
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函數,以便我們可以輸出消息爲儘可能簡單
希望這會有所幫助
正是我在找什麼。 – 2010-12-05 02:49:46