首页
社区
课程
招聘
[讨论]注重基本知识之局部变量与栈
发表于: 2007-10-17 23:10 7652

[讨论]注重基本知识之局部变量与栈

2007-10-17 23:10
7652
小弟学破解目的:其实说学破解不怎么正确,而是学会分析程序。我将来的目标是编写网络游戏,学完基础网络游戏编写后,经常下载几个游戏来分析,可底层的东西全部在PE文件里,不得不学逆向分析才能从中学会想要的技术。

小弟学破解,看论坛里的文章,不知所云,大多都是写出破解步骤,而不写为什么这样做。
为什么不写呢?因为写破文的人已经懂得其中的道理,自觉不用写。
可是破文如果写给能看懂的人,写了干什么?写了给新手看?可新手看不懂。
而大多破文都是讲的“注册”,而我想要的是逆向分析。

小弟打开OllyDBG,眼花缭乱,自觉原因有二:
一:不熟悉汇编指令和系统API
二:不知道程序运行到哪了,不知道某个时刻寄存器里面存的到底是什么,此条是关键

今天,写了个只有入口函数的程序,硬着头皮用OllyDBG打开,还是看不懂,怎么上来就push ebp?于是上网搜索,原来每个子函数的开头代码都是给局部变量分配空间。

大家能不能帮帮我这个迷途的羔羊?程序的运行原理,从加载到结束的所有原理,应该怎么学?或者有没有现成的文章可以查阅?帮帮小弟吧。我觉得这些所有的底层的基本知识应该被重视,比如在《加密解密》里面就没有写啊。假如知道了程序的运行原理,可想而知,可以做的事就不仅仅是破解了吧。

在下面的代码结束后,小弟又不知道是什么意思了:
push ebp
mov  ebp, esp
sub   esp, SIZE

push ebx;从这句开始,不知道是什么了。
……

哎,不知道程序到底怎么在底层运行,真是郁闷……

需要了解局部变量与栈的知识的朋友们,可以到百度搜索:Win32程序函数调用时堆栈变化情况分析

我就不在这里贴了,贴了以后,文章就没中心思想了,我写这篇文章的主要目的是求助。

继续硬着头皮看,原来push ebx开始,是对栈的初始化。

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
准备上2年时间,在论坛疯狂的灌水,你就会发现,push ebx其实是保存ebx寄存器
2007-10-18 00:23
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
……我知道,我是说从push ebx开始……
2007-10-18 01:02
0
雪    币: 462
活跃值: (53)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
4
一个函数开头的三条指令:
PUSH EBP
MOV EBP, ESP
SUB ESP, XXX(有时出于优化目的可能将这条指令移到后面不远处)
前两条是为了创建标准的堆栈帧,而第三条是为函数使用的局部变量保留空间。有时如果这个函数使用的局部变量很少的话(比如只使用了两个int类型的变量),为了提高效率,编译器并不用SUB ESP, XXX来为这两个变量保留空间,而是用了下面这两条指令:
PUSH ECX
PUSH ECX
如果没有异常处理的话,接下来通常是另外三条指令:
PUSH EBX
PUSH ESI
PUSH EDI
这就是所谓的“保护现场”。编译器文档中一般对此有说明。比如Visual C++编译器文档在讲到内联汇编时提到:在C/C++中使用__asm编写汇编代码时,不需要保存EAX、EBX、 ECX、 EDX、 ESI、和 EDI 这六个通用寄存器。之所以会这样,就是因为编译器会自动保存函数用到的通用寄存器。而前面提到的三条指令就是用于此目的的。以上这些指令加起来也就组成了所谓的函数的“prolog”代码。而在函数最后的一系列POP指令也就是所谓的“epilog”代码。
2007-10-18 01:05
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
非常感谢,明白了很多。
能不能告诉我这些底层的知识从什么书籍上可以看到?
2007-10-18 01:19
0
雪    币: 462
活跃值: (53)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
6
MSJ杂志Under The Hood专栏、《Debugging Applications》、MSDN上的编译器文档以及你的大脑。
2007-10-18 03:59
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
动手教你写操作系统
2007-10-18 22:54
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这些教授汇编的书籍里面都有,你可以看看论坛的精华。就知道需要些什么东西了
http://bbs.pediy.com/showthread.php?s=&threadid=31840
2007-10-19 08:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢太好了
可不可以理解为开辟空间放东西
2007-11-15 22:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
来论坛以潜水多年,无奈大家讨论的都看不懂,终于找到和我一样的了
2007-11-16 09:11
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
11
千金易得,知音难求啊
2007-11-16 10:56
0
游客
登录 | 注册 方可回帖
返回
//