一个简单函数问题

xuexi1028 2011-06-24 03:22:26
如下代码
98: int set(int m)
99: {
00401330 push ebp
00401331 mov ebp,esp
00401333 sub esp,44h
00401336 push ebx
00401337 push esi
00401338 push edi
00401339 lea edi,[ebp-44h]
0040133C mov ecx,11h
00401341 mov eax,0CCCCCCCCh
00401346 rep stos dword ptr [edi]
100: //int m=1;
101: int n = m++ + m++;
00401348 mov eax,dword ptr [ebp+8]
0040134B add eax,dword ptr [ebp+8]
0040134E mov dword ptr [ebp-4],eax
00401351 mov ecx,dword ptr [ebp+8]
00401354 add ecx,1
00401357 mov dword ptr [ebp+8],ecx
0040135A mov edx,dword ptr [ebp+8]
0040135D add edx,1
00401360 mov dword ptr [ebp+8],edx
102: return n;
00401363 mov eax,dword ptr [ebp-4]
103: }
在上面代码中 [ebp-4] 是m的值 传入的参数
如下
00401386 push ebx
00401387 push esi
00401388 push edi
00401389 lea edi,[ebp-44h]
0040138C mov ecx,11h
00401391 mov eax,0CCCCCCCCh
00401396 rep stos dword ptr [edi]
106: //char chTest1[255]={"myhelloworld"};
107: //char chTest2[255]={"wo"};
108: //strstr(chTest1,chTest2);
109: int res =set(1);
00401398 push 1 //传入参数

[ebp+8] 是n的值,,我很纠结 什么时候 把N 放在这个位置了实在没找到,,,,我是菜鸟,,请各位大神,帮忙
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuexi1028 2011-06-27
  • 打赏
  • 举报
回复
.....我试着 参考下,,,LS 的说的
继续顶热
O丸子爹O 2011-06-26
  • 打赏
  • 举报
回复
找一本宏汇编的书看看就知道了,一般都会有汇编与C相互调用函数的介绍。
[ebp]是栈顶的位置,而函数的参数都是通过栈来传递的,因此……
有许多病毒都是利用栈这一特性来实现其目的的
G_Spider 2011-06-24
  • 打赏
  • 举报
回复
你行的。

/*
低地址:
........
........ 局部变量内存区
局部变量2
局部变量1
ebp-> 调用函数的栈基址EBP 调用函数的栈基址
返回地址
入口参数1
入口参数2
.........
.........
.........
入口参数n
*/
xuexi1028 2011-06-24
  • 打赏
  • 举报
回复
E 搞错了LS 的说的对 ,,但是能解释下原因吗 有显式的进栈了吗
G_Spider 2011-06-24
  • 打赏
  • 举报
回复
int n = m++ + m++;

[ebp-4] 为n,局部变量;
[ebp+8] 为m,输入参数。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧