关于c调用汇编函数 汇编如何获得得到的参数呢

发布网友 发布时间:2022-04-22 08:06

我来回答

2个回答

热心网友 时间:2022-06-18 07:32

参数传递规则要根据函数遵循的调用约定而定,不同的调用约定(stdcall,C约定fast call,pascal等)其不同,也可以使用自己的约定(在你非常熟悉接口或底层做了什么的情况下),
一般【esp+4】是eip的值,如果不清楚所用约定,是尝试esp+2*4,esp+3*4等,还得注意在子程序的堆栈平衡,自己参考线调用约定的内容吧

热心网友 时间:2022-06-18 07:33

C:
int i=4:
foo(i) 或者foo(4);
假设 foo的功能是 返回 i+20
foo(4);的汇编代码是
asm:
push4
call_foo
add esp, 4

foo的实现是:

asm:
_foo proc
push ebp;
mov ebp,esp;
mov eax,ebp[0x08];

add eax,0x14
pop ebp

ret
end proc

除非特别说明,或者编译选项里另外设置;
C函数都是cdecl,也就是C调用约定
C++通常都是stdcall,也就是标准调用约定

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com