2014-09-25 69 views
0

我對彙編代碼非常陌生,需要知道如何在函數參數中傳遞命令行參數(argc,argv,env)。在第2行(#RIGHT HERE)是我不知道實現的地方,我需要將這三個參數傳遞給我的主體。任何人都可以幫忙嗎?通過argc,argv,env來使用匯編函數

我正在編譯它通過運行:gcc -m32 t.c s.s.下面的代碼是S,S和mymain是T.C

main:  
    #RIGHT HERE 
    call mymain 
    ret 

回答

1

你必須要了解32位的Linux ABI(應用程序二進制接口),它描述了傳遞參數和堆棧使用的調用約定。我不打算列出這裏的所有細節,但可以通過網絡輕鬆訪問。

快速總結:32位linux將需要在調用之前存儲在堆棧上的參數。您需要足夠的空間來存儲參數,或者「推」它們,這會自動減少堆棧指針。您的電話返回後,需要清理此空間。

如果你不想花時間研究ABI,一個簡單的選擇是編寫一個C程序,調用一個傳入所有參數的函數,然後簡單地編譯它並查看程序集以瞭解它是如何實現的完成後,複製。