- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章转移指令9-10精选
第九章转移指令呵呵!转移相对于逆向软件还是非常重要的其实我们之前学过的loop就是一个转移指令,可以说是一个条件转移或者是循环转移的指令先说offset操作符他的作用就是取得标号的偏移地址!比如:offset sb如果sb标号所在的偏移地址为6,那么这个offset就取得6例如:assume cs:qqqq segmentmov ax,5sb:mov bx,axmov cx,offset sbs1:add ax,10loop s1mov ax,4c00hint 21hqq endsend上面的cx,他的值就是3了,因为sb所在的偏移地址是3,mov ax,5这句占了3个地址,即0,1,2下面说下jmp指令了jmp为无条件转移指令,他的功能可以分为很多种,我们一样一样说首先是短转移格式是: jmp short 标号既然短转移,可以看出肯定非常短,所以他只能修改ip的值,范围呢就是-128到127之间,就是往前可以移动128个字节,往后可以移动127个字节例如:assume cs:qqqq segmentmov ax,5add ax,10jmp short sadd ax,10s:mov ax,4c00hint 21hqq endsend那么这样的话,就只执行一次加10的操作,而跳过一个加10的操作把上面程序,载入debug,用u指令查看20BC:0000 B80500? ?? ???MOV? ???AX,000520BC:0003 83C00A? ?? ???ADD? ???AX,+0A20BC:0006 EB03? ?? ?? ? JMP? ???000B20BC:0008 83C00A? ?? ???ADD? ???AX,+0A20BC:000B B8004C? ?? ???MOV? ???AX,4C0020BC:000E CD21? ?? ?? ? INT? ???21可以看出,其他立即数都显示在汇编指令中,如,MOV? ???AX,0005显示的是B80500 ,其他也有对应的数值,但jmp命令却没有 是:EB03 在观察可以发现,jmp 000b其实是给出的内存地址的位移数,即我们需要跳转到MOV? ???AX,4C00??这里,而这里的偏移地址正好是000b,而jmp指令后的的下一个地址是0008,相减正好是03,即我们得出结论jmp short 标号,的地址是,标号处的地址减去jmp指令执行后的第一个字节的地址还有一直和jmp short 指令很像的一条指令,我们称为近转移他的格式是 jmp near ptr标号,他也是只能修改ip的值,范围是-32768到32767之间是16位的位移!其他和jmp short一样!在就是jmp的段间转移了格式是jmp far ptr标号他是远转移,可以修改cs和ip的值,如:assume cs:qqqq segmentmov ax,5add ax,10jmp far ptr sadd ax,10s:mov ax,4c00hint 21hqq endsend载入debug使用U命令查看:20BC:0000 B80500? ?? ???MOV? ???AX,000520BC:0003 83C00A? ?? ???ADD? ???AX,+0A20BC:0006 EA0E00BC20? ? JMP? ???20BC:000E20BC:000B 83C00A? ?? ???ADD? ???AX,+0A20BC:000E B8004C? ?? ???MOV? ???AX,4C0020BC:0011 CD21? ?? ?? ? INT? ???21可以看出,jmp命令,已经把cs和ip的值都给了出来,而且机器码也显示出来再说下一个jmp命令就是jmp 寄存器(16位寄存器)他的作用是修改ip的,范围和jmp near ptr一样最后说一下,地址在内存的转移这个有两种,也是段内转移,和段间转移先说段内转移:格式 jmp word ptr 内存单元地址这个word说明从内存单元开始的一个字,是ip的地址如:mov ax,1234hmov [bx],axjmp word ptr [bx]这样ip的值就是1234h在就是段间转移格式jmp dword ptr 内存单元地址这个dword说明从内存单元开始的一个双字,低字是ip的地址高字是cs的地址如:mov bx,0mov ax,1122hmov [bx],axmov ax,3344hmov [bx+2],axjmp dword ptr ds:[0]a
文档评论(0)