據我所知,當在C函數調用中傳遞參數時,被調用者可以在[ebp+8]
處找到第一個參數。
通過eax
返回值適用於我,從堆棧讀取正確的參數值不。無法將參數從C傳遞到彙編代碼
現在我只是想編寫一個彙編函數,它可以從C調用並返回相同的值,它正在傳遞。
當我運行以下程序時,它將number: 1
打印到控制檯,無論傳入的值是myFunc
。我究竟做錯了什麼?
assembly.s
section .text
global _myFunc
_myFunc:
mov eax, [ebp+8]
ret
的main.c
#include <stdio.h>
extern unsigned int myFunc(unsigned int somedata);
int main() {
unsigned int i = myFunc(6);
printf("number: %i\n",i);
return 0;
}
我使用的是Mac,NASM組裝的C語言編譯代碼和gcc。
的Makefile
macho32:
nasm -f macho32 assembly.s
gcc -m32 -o macho32 assembly.o main.c
了我的元素的一點點,但我認爲你必須設置'ebp'與'推ebp'和'MOV EBP,esp'之前你組裝功能你可以引用函數參數。那麼在你返回之前,你需要'pop ebp'。請參閱http://unixwiz.net/techtips/win32-callconv-asm.html –