飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: 千里之外

千里之外加入PYG54小组学习

[复制链接]

该用户从未签到

 楼主| 发表于 2007-5-19 09:12:11 | 显示全部楼层
push    1
push    2
push    3
push    4
add     esp, 4
pop     eax
mov     ebx, dword ptr [esp-8]

刚刚从图书馆出来 终于得到点心得 呵呵  我再把这个题的解法写一下 斑竹大哥看看对不对

下面是内存中的示意图

.                                                                                                                     低地址
.
4----------esp=esp-10h ---------esp(mov     ebx, dword ptr [esp-8]) 此时 ebx=4              
3----------esp=esp-ch  --------- esp(add esp+4)  pop eax 后 eax=3  esp加4h
2----------esp=esp-8h    ------ esp(pop eax)   ----esp(pop eax)
1----------esp=esp-4h
.-----------esp(开始位置)
.                                                                                                                       高地址
结果正如大哥说的 ebx=4 eax=3
PYG19周年生日快乐!

该用户从未签到

发表于 2007-5-19 10:36:38 | 显示全部楼层
push 1;push 2;push 3;push 4;堆栈结构与esp指针如下
.
.
4----------   esp      
3----------   esp+4
2----------   esp+8
1----------
.
.
add esp,4           ESP指向的地方变了,指向原来esp+4的地方
.
.
4----------   esp-4      
3----------   esp
2----------   esp+4
1----------
.
.
pop eax等价于 (mov eax,dword ptr[esp] ;add esp,4)
出栈esp+4,表示顶上那层已经被取走了,所以ESP指向了下一层
重新定位,dword ptr[esp-8]=0X00000004h
.
4----------   esp-8     
3----------   esp-4
2----------   esp
1----------   esp+4
.
.


_______________________________________________________
补一下byte,word,dword在反汇编里面存在的意义:
byte  反汇编里是00
word 反汇编里是0000
dword 反汇编里是 0000 0000
32位寄存器都是dword :0000 0000
堆栈每一层等价于一个寄存器,大小跟寄存器一样,dword:0000 0000
PYG19周年生日快乐!

该用户从未签到

发表于 2007-5-19 10:56:15 | 显示全部楼层
你收集的资料当中
push Var3
push Var2
push Var1
call SubRouting
add esp,12
在反汇编里是

push Var3
push Var2
push Var1
call SubRouting
add esp,0C
++++++++++++++++++++++
这个add esp,0c就是用来平栈用的
压了三个进去,一个都没有弹出来,所以esp没变,
要还原,所以add esp,0c

有此call自己平栈,那是因为弹出来了

像这样的call就不需要平栈,因为他弹出来了!
push a
push b
push c
call  xxx1
jmp *****不用平栈**
*****
@xxx1:
pop eax
pop ebx
pop ecx
add eax,ebx
sub eax,ecx
ret

这样的就要平栈,因为他没有弹出来,esp一直没变
push a
push b
push c
call  xxx1
add esp,0c平栈
*****
@xxx1:
mov eax,dword ptr[esp]
mov ebx,dword ptr[esp+4]
mov ecx,dword ptr[esp+8]
add eax,ebx
sub eax,ecx
ret

慢慢研究吧,谁一下子也不能完全接收过来的,有的是时间!/:09
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-5-19 11:57:36 | 显示全部楼层
push Var3           esp=esp-4
push Var2           esp=esp-8
push Var1           esp=esp-c
call SubRouting
add esp,0C          esp=esp-c+c=esp 这就是esp开始的位置了吧  这应该就是ESP的还原也就是平栈了吧

这个因为压栈后 esp=esp-0c 它不是原来的值了 所以要用esp+0c   结果esp重新指向了 开始的位置

-------------------------------------------------------------------------------------------------------------------
push a
push b
push c
call  xxx1
jmp *****不用平栈**
*****
@xxx1:
pop eax
pop ebx
pop ecx
add eax,ebx
sub eax,ecx
ret
这个是不是 因为每次执行POP操作的时候 esp+4H 所以esp在执行pop操作后就回到了原来指向的地址 也就不需要还原ESP的值了 因为它已经还原了
--------------------------------------------------------------------------------------------------------
我这样理解对吗
PYG19周年生日快乐!

该用户从未签到

发表于 2007-5-20 15:54:43 | 显示全部楼层
是的
很对
现在你可以进行任何算法的分析了,用IDA.OD.......
去分析任何东西吧
带上前辈们的文字教程,现在没有你看不懂的



________________________________________________
我走了.....
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-5-20 19:35:33 | 显示全部楼层
/:09 谢谢fonge版主大哥/:09

我会继续努力的  我刚刚试着分析了个软件 希望版主看看 有什么不对的地方

文章地址  https://www.chinapyg.com/viewthread.php?tid=15739

版主你很热心 PYG有你这样的人在 我相信它会越来越好  成为破解领域的一个楷模 我会永远支持PYG的 呵呵
PYG19周年生日快乐!

该用户从未签到

发表于 2007-5-20 19:51:07 | 显示全部楼层
给lz一个建议

看王爽的《汇编语言》
PYG19周年生日快乐!

该用户从未签到

 楼主| 发表于 2007-5-21 23:04:33 | 显示全部楼层
谢谢斗龙兄弟得建议/:09   我会看得 呵呵
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表