-
-
[旧帖]
实参入栈过程[求助]
0.00雪花
-
发表于:
2010-4-30 17:44
1460
-
C++调用汇编中的一个过程,并传递三个参数
c++中声明如下:
extern "C" int __stdcall test(char *p, char *q, char *r);
....
addr=test(p,q,r); //p, q, r 是三个数组名
printf("addr=%08x, p=%08x, q=%08x, r=%08x\n", addr, p ,q, r);
汇编部分代码:
...
PUSH EBP
MOV EBP ,ESP
MOV EAX, [EBP+12] ;EAX值应该是q,但结果是p
....
POP EBP
编译执行后,C++中addr的值与p的值相同
我也测试了下其他的偏移地址
[EBP+12] = p
[EBP+16] = q
[EBP+20] = r
这是怎么回事啊?
首先说下我的理解, c++ 中调用test时,先push r, push q, push p, 然后再push返回的指令地址(应该是EIP吧,4个字节),进入汇编test过程后,先push ebp进行保存,然后ebp指向原先的ebp内容。我期待的结果是: p=[ebp+8], q=[ebp+12], r=[ebp+16]
希望大家解决我的疑问.谢谢。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!