能力值:
(RANK:210 )
|
-
-
2 楼
2.局部堆栈变量
局部变量在堆栈之中进行分配,在函数执行完毕后删除。请注意,在一般情况下
当函数为局部变量分配堆栈空间的时候,堆栈中已经存在函数的参数以及函数的返回地址。这时堆栈中内容如下:
先理解一下上面的图片:通常你会在每个函数的开始处看到如下内容:
push ebp
mov ebp,esp
为什么要把esp放入ebp中,也许是为了访问方便,因为函数中也会用到堆栈,这样esp总是变动的.有一些优化编译器会直接通过esp来访问堆栈,从而将EBP寄存器腾出来进行更有用的工作,所以你可能看不到类似于上面的代码,但大多数情况下是可以通过上面那两条指令寻找函数的开始位置的。
函数的参数和局部变量在调试的时候是比较烦的一个事情,大多数情况下都是和[ebp-**](局部变量),[ebp+**](参数)打交道,这时候IDA PRO可能会减轻许多工作。
回顾一下8086的寻址方式:立即数寻址,寄存器寻址,直接寻址,寄存器间接寻址,只有后两种是内存寻址方式。在对堆栈局部变量进行直接操作的时候,总是会用寄存器间接寻址方式,也就是说指令的操作数(与变量向对应的)全是地址。在32位平台下,一个地址总是32位(双字节)组成的,所以不管什么类型的变量,数组还是指针,byte还是word还是dword.所有对其直接操作的指令的操作数总是双字(32位)。在分析局部变量类型的时候要根据实际情况进行判断。
3. 返回值
要是每个函数都真的像高级语言中那样说的“只能有一个返回值“那逆向分析的时候就爽歪歪了,在分析函数的时候,我们得把函数所影响系统的一切东西当成返回值来对待,不管是寄存器还是磁盘文件全局变量,局部变量等等都得考虑到,在分析的时候需要考虑到所有有用的返回值,不仅仅是eax----它对应高级语言中的return。我自己认为可以这样理解:函数的返回值就是函数的作用。
|
能力值:
(RANK:350 )
|
-
-
3 楼
学习小组 第一期的部分学习资料,现在公开,供大家学习。
|
能力值:
( LV8,RANK:130 )
|
-
-
4 楼
请删除
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我怎么看不到图的??请问下新手学这个吗??
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
不错啊,我是新手,学习了,有第二周的吗
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
不错啊,我也是新手,偶们太菜了,可惜什么也不懂的.从头学吧.
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我来学习来啦
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我也是来学习的,看来要汇编知识啊
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
谢谢!真是太好了,期待后续的公开。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
万分感谢 期待第二周的课程!
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
新人慢慢来学习
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
呵呵, 好东西
|
能力值:
( LV6,RANK:90 )
|
-
-
14 楼
很有收获
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我是刚来的,基本上都看不懂啊,555~~~~~~~~~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
长金了,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
迷迷糊湖看懂些...新手,请老大指教。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
能不能弄个电子书类型的啊,最好能通俗易懂,图文并茂的,太绕口了
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
遇到好事了。哈哈全收下
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
头都大了
唉
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
支持...虽然平时没有时间...但为了兴趣....要奋斗....学习....
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
半懂。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
一周就学这点东西?
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
学习中,期待下一期
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
支持一下你们的.
|
|
|