首页
论坛
课程
招聘
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝

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

2007-10-17 23:10 6081

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

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

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

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

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

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

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

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

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

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

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

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

[公告]看雪论坛2020激励机制上线了!多多参与讨论可以获得积分快速升级?

最新回复 (10)
雪    币: 5535
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2007-10-18 00:23
2
0
准备上2年时间,在论坛疯狂的灌水,你就会发现,push ebx其实是保存ebx寄存器
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
冰七灵 活跃值 2007-10-18 01:02
3
0
……我知道,我是说从push ebx开始……
雪    币: 369
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
zhzhtst 活跃值 11 2007-10-18 01:05
4
0
一个函数开头的三条指令:
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”代码。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
冰七灵 活跃值 2007-10-18 01:19
5
0
非常感谢,明白了很多。
能不能告诉我这些底层的知识从什么书籍上可以看到?
雪    币: 369
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
zhzhtst 活跃值 11 2007-10-18 03:59
6
0
MSJ杂志Under The Hood专栏、《Debugging Applications》、MSDN上的编译器文档以及你的大脑。
雪    币: 372
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
笨奔 活跃值 1 2007-10-18 22:54
7
0
动手教你写操作系统
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aleon 活跃值 2007-10-19 08:32
8
0
这些教授汇编的书籍里面都有,你可以看看论坛的精华。就知道需要些什么东西了
http://bbs.pediy.com/showthread.php?s=&threadid=31840
雪    币: 194
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuzhihua 活跃值 2007-11-15 22:51
9
0
谢谢太好了
可不可以理解为开辟空间放东西
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
okbaby 活跃值 2007-11-16 09:11
10
0
来论坛以潜水多年,无奈大家讨论的都看不懂,终于找到和我一样的了
雪    币: 359
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 活跃值 12 2007-11-16 10:56
11
0
千金易得,知音难求啊
游客
登录 | 注册 方可回帖
返回