去痘疤哪家医院最好:汇编里的跳转命令的格式是什么??(同学代问)

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/03 01:06:10
晕死了,我的一个同学问我一个变态的问题,说什么JMP 什么的格式,我听不明白,好像说如果要把一段命令移到另一个地方,而程序又可以运行,应该怎么做呢??????家里有电脑还真是要为人们服务啊,晕~~~~~~~先帮他出15个积分,到时叫他给人民币,哈哈哈,为了人民币,帮下忙
我根本对这些事都没有了解,只可以尽我努力说明白一点了,例:
0040A2AF: A2 65FA4095 MOV [9540FA65],AL
0040A2B4: 835F D7 77 SBB [DWORD EDI-29],77
0040A2B8: 68 7661389E PUSH 9E386176
0040A2BD: 3D 627FD80C CMP EAX,CD87F62
0040A2C2: 6BA9 1DC958B4 42 IMUL EBP,[ECX+B458C91D],42
0040A2C9: E3 FB JECXZ SHORT 0040A2C6
0040A2CB: 7B 13 JPO SHORT 0040A2E0
0040A2CD: B5 53 MOV CH,53
移转到0040B2CD ,怎么办?????(这个不就是传说中的鬼画符吗???)

jmp 后面跟地址啊。

感觉问的不太清楚。

格式: JMP 目标地址

无条件转移指令jmp:

这种跳转指令有三种方式:短(short),近(near)和远(far)。短是指要跳至的目标地址与当前地址前后相差不超过128字节。近是指跳转的目标地址与当前地址在用一个段内,即CS的值不变,只改变EIP的值。远指跳到另一个代码段去执行,CS/EIP都要改变。短和近在编码上有所不同,在汇编指令中一般很少显式指定,只要写 jmp 目标地址,几乎任何汇编器都会根据目标地址的距离采用适当的编码。远转移在32位系统中很少见到,原因前面已经讲过,由于有足够的线性空间,一个程序很少需要两个代码段,就连用到的系统模块也被映射到同一个地址空间。

jmp的操作数自然是目标地址,这个指令支持直接寻址和间接寻址。间接寻址又可分为寄存器间接寻址和内存间接寻址。举例如下(32位系统):

jmp 8E347D60 ;直接寻址段内跳转
jmp EBX ;寄存器间接寻址:只能段内跳转
jmp dword ptr [EBX] ;内存间接寻址,段内跳转
jmp dword ptr [00903DEC] ;同上
jmp fward ptr [00903DF0] ;内存间接寻址,段间跳转

解释:
在32位系统中,完整目标地址由16位段选择子和32位偏移量组成。因为寄存器的宽度是32位,因此寄存器间接寻址只能给出32位偏移量,所以只能是段内近转移。在内存间接寻址时,指令后面是方括号内的有效地址,在这个地址上存放跳转的目标地址。比如,在[00903DEC]处有如下数据:7C 82 59 00 A7 01 85 65 9F 01

内存字节是连续存放的,如何确定取多少作为目标地址呢?dword ptr 指明该有效地址指明的是双字,所以取
0059827C作段内跳转。反之,fward ptr 指明后面的有效地址是指向48位完全地址,所以取19F:658501A7 做远跳转。

注意:在保护模式下,如果段间转移涉及优先级的变化,则有一系列复杂的保护检查,现在可不加理会。将来等各位功力提升以后可以自己去学习。

条件转移指令jxx:只能作段内转移,且只支持直接寻址。