汇编基础一日一学习3
[b][color=#ff0000]汇编基础一日一学习3大家可以直接点这个贴子上面的回复按钮,这样就不会看到其他学员的答案了。
今天我们来学习下eip寄存器。不要小看这个寄存器。它可存储着我们cpu要读取指令的地址,没有了它,cpu就无法读取下面的指令(通俗点讲cpu就无法执行)。如果玩过破解,跟踪过程序的人都应该知道。每次相应汇编指令执行完相应的eip值就会增加。我大致描述一下这个寄存器的情况。
因为80386 cpu的寻址范围是4GB。所以它的寻址模式是平坦模式的。这里我描述下cpu通过读取eip寄存器执行的大致过程。。
此时我们假设一个程序开始执行了。首先PE loader装载我们的pe文件,读取我们pe文件的基地址和入口RVA地址(相对于基地址的偏移),并且读取相应节表结构的值,然后将我们的程序映射到内存。
此时,映射到内存以后.. 此时PE loader把返回的程序入口点给cpu的eip寄存器赋值,然后通知我们的cpu:“ 并且说:我映射完了,你可以执行了。eip也相应的赋值了。此时cpu知道了eip的值,那么它通过将eip的值传送到输入输出电路,并送入相应的地址总线上。那么此时cpu就通过eip读取eip偏移上的二进制数据(我这里用汇编指令来表示)并传送到数据总线上,最后传送到指令缓冲区。传送到指令缓冲区后,那么此时eip会自动的增加其读入指令的数量,以便往下执行, 最后执行控制器第七指令缓冲区的指令并且往下执行。
大致过程就是这样。因为我的美术功底实在不敢恭维。但是怕大家不理解。还是画个图片吧。不过这个图还不好画郁闷死列。。[/color][/b]
[img]http://www.hacker.com.cn/upload/forum/200804/20080409185559H.jpg[/img]
[b][color=black]我们cpu每次执行控制器读取完,相应的就在通过eip寄存器去进行下一次的读取指令工作。。每次cpu读取指令到指令缓冲区,相应的eip寄存器的值增加,增加大小的就是读取指令的字节大小(也可以说是长度)。。
举个例子 我们程序的入口点是
push ebp 这个汇编指令。
(注:此时eip+ 读取指令的大小)
首先cpu - > 读取eip - > 来到eip值的偏移 - > 读取push ebp -> 存放指令到指令缓冲区 - > 执行.. 反复循环
现在大家知道eip的作用性了吧。每次cpu执行都要先读取eip寄存器的值,然后定位eip指向的内存地址,并且读取汇编指令,最后执行。
这里还要介绍一个jmp指令,大家都比较熟悉吧。。 但是你是否知道每次执行jmp 后,eip的值的变化呢。其实你猜测也可以猜测到。jmp顾名思义 跳转指令。执行后 eip的值=后面要跳转的地址。
举个例子:
假设之前eip = 00403021h ,执行jmp 00403058h 。执行完指令后eip = 00403058H
小作业:
1.假设目前的eip寄存器的值是 eip = 00400001h , 00400001h偏移处的汇编指令是mov ebp, esp,这个指令占2个字节。那么执行完这句指令后,此时的eip值是多少?
2.执行以下几句指令后,eip发生了几次变化?
push ebp
add ax,ax
mov ebp
3.执行以下语句后,eip发生了几次变化?最后的eip值等于多少
push ebp
mov ebp, esp
jmp 00405060h[/color][/b] 参观课堂!
偷偷来看 第一个是错的吧…… 学习了 Y荡阿.em66. 1.
eip=00400003H
小鱼老师说mov ebp,esp占用2个字节
那其他的指令占多少字节呢?
2.
经过三条指令后
eip变化了三次
3\
eip变化4次。
因为读取push ebp指令到指令缓冲区后,eip变化一次 。 读取mov ebp, esp指令到指令缓冲区后eip变化一次。 读取 jmp 00405060h 到指令缓冲区后eip变化一次。 在执行jmp 00405060h 指令的时候
eip变化1次。 [i=s] 本帖最后由 自在飞花 于 2009-6-2 22:43 编辑 [/i]
1.假设目前的eip寄存器的值是 eip = 00400001h , 00400001h偏移处的汇编指令是mov ebp, esp,这个指令占2个字节。那么执行完这句指令后,此时的eip值是多少?00400002h(错误,是我粗心造成的,加2后应为00400003H)
2.执行以下几句指令后,eip发生了几次变化?3
push ebp
add ax,ax
mov ebp
3.执行以下语句后,eip发生了几次变化?最后的eip值等于多少?4次,00405060H
push ebp
mov ebp, esp
jmp 00405060h 好教材啊!!! 寄存器的名称要死记着{::dizzy::} [quote]好教材啊!!! 寄存器的名称要死记着{::dizzy::}
[size=2][color=#999999]scien 发表于 2009-6-5 18:00[/color] [url=http://3ast.com.cn/redirect.php?goto=findpost&pid=45567&ptid=8572][img]http://3ast.com.cn/images/common/back.gif[/img][/url][/size][/quote]
打印用张图贴在墙上,一共也没几个。 学习.....................
页:
[1]