내가 알기로, 매개 변수가 C에서 함수 호출로 전달되면 호출 수신자는 첫 번째 매개 변수를 [ebp+8]
에서 찾을 수 있습니다.
eax
을 통해 값을 반환하면 스택에서 올바른 매개 변수 값을 읽지 않아도됩니다.C에서 어셈블리 코드로 매개 변수를 전달할 수 없다
지금 당장 나는 C에서 호출 할 수있는 어셈블리 함수를 작성하려고하고 있으며 전달 된 동일한 값을 반환합니다.
다음 프로그램을 실행할 때 어떤 값이 myFunc
에 전달 되더라도 콘솔에 number: 1
을 인쇄합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
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;
}
나는 C 컴파일에 대한 코드 및 GCC를 조립하는 맥, NASM을 사용하고 있습니다.
메이크 당신이에서 읽고, 스택에 인수를 참조
macho32:
nasm -f macho32 assembly.s
gcc -m32 -o macho32 assembly.o main.c
,하지만 난 당신이 푸시 ebp'와'mov 인 EBP, esp' 전에'와 어셈블리 기능에'ebp'을 설정해야합니다 생각 함수 인수를 참조 할 수 있습니다. 그런 다음 돌아 오기 전에 '팝 립 (pop ebp)'해야합니다. http://unixwiz.net/techtips/win32-callconv-asm.html –