首页
社区
课程
招聘
[旧帖] [求助]帮我看看这段代码 0.00雪花
发表于: 2009-9-15 11:46 3350

[旧帖] [求助]帮我看看这段代码 0.00雪花

2009-9-15 11:46
3350
反汇编一个软件,软件是用C++写的,请问这个一个函数:
sub_804c044      proc near
                     mov eax,ebp
                     retn
sub_804c044      endp
有什么作用的,为什么会这样不完整?
还有一段:
  mov edx,[eax+1ch]
   mov [eax+1ch],esp
   mov esp,edx
   mov ebp,[eax+20h]
很迷惑,这样不是把栈弄乱了吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
sub_804c044      proc near
                     mov eax,ebp
                     retn
sub_804c044      endp
这个函数的功能就是取栈底

你的这部分代码极有可能是C++的内联汇编
因为函数参数的传递和局部变量一般是使用堆栈的,所以在调用一个函数时,一般都会用到堆栈来存储数据,但都会把之前的堆栈信息保存,调用完函数则还原
mov [eax+1ch],esp 这句就是把堆栈指针给保存起来了
2009-9-15 12:01
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这段函数
  mov edx,[eax+1ch]
   mov [eax+1ch],esp
   mov esp,edx
   mov ebp,[eax+20h]
实际上是将[eax+1]和esp做了交换,还把ebp的值也给改变了,我实在看不懂,我再把整个函数贴出来,高手帮忙再分析一下
sub_804c054 proc near
         push ebp
         push ebx
         push esi
         push edi
         mov eax,ds:dword_99A9e20
         mov edx,[eax+1ch]
         mov [eax+1ch],esp
         mov esp,edx
         mov ebp,[eax+20h]
         mov ebx,[eax+24h]
         mov esi,[eax+28h]
         mov edi,[eax+2ch]
         retn
sub_804c054  endp
2009-9-15 14:13
0
雪    币: 251
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
保存寄存器,载入另一组寄存器的值,顺便切换堆栈
2009-9-15 14:40
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这样切换堆栈,堆栈还能平衡吗?为什么不正常用函数调用切换
2009-9-15 15:48
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
堆栈不平衡也不要紧,要紧的是你知道自己操作堆栈在做什么
2009-9-15 16:27
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不是我操作呀,是我看的代码,栈不平衡,程序还能正常运行吗
2009-9-15 17:28
0
游客
登录 | 注册 方可回帖
返回
//