网站大量收购独家精品文档,联系QQ:2885784924

第九章转移指令9-10精选.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章转移指令9-10精选

第九章转移指令 呵呵!转移相对于逆向软件还是非常重要的 其实我们之前学过的loop就是一个转移指令,可以说是一个条件转移 或者是循环转移的指令 先说offset操作符 他的作用就是取得标号的偏移地址! 比如:offset sb 如果sb标号所在的偏移地址为6,那么这个offset就取得6 例如: assume cs:qq qq segment mov ax,5 sb: mov bx,ax mov cx,offset sb s1: add ax,10 loop s1 mov ax,4c00h int 21h qq ends end 上面的cx,他的值就是3了,因为sb所在的偏移地址是3,mov ax,5这句占了3个地址,即0,1,2 下面说下jmp指令了 jmp为无条件转移指令,他的功能可以分为很多种,我们一样一样说 首先是短转移 格式是: jmp short 标号 既然短转移,可以看出肯定非常短,所以他只能修改ip的值,范围呢 就是-128到127之间,就是往前可以移动128个字节,往后可以移动127个字节 例如: assume cs:qq qq segment mov ax,5 add ax,10 jmp short s add ax,10 s:mov ax,4c00h int 21h qq ends end 那么这样的话,就只执行一次加10的操作,而跳过一个加10的操作 把上面程序,载入debug,用u指令查看 20BC:0000 B80500? ?? ???MOV? ???AX,0005 20BC:0003 83C00A? ?? ???ADD? ???AX,+0A 20BC:0006 EB03? ?? ?? ? JMP? ???000B 20BC:0008 83C00A? ?? ???ADD? ???AX,+0A 20BC:000B B8004C? ?? ???MOV? ???AX,4C00 20BC: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:qq qq segment mov ax,5 add ax,10 jmp far ptr s add ax,10 s:mov ax,4c00h int 21h qq ends end 载入debug使用U命令查看: 20BC:0000 B80500? ?? ???MOV? ???AX,0005 20BC:0003 83C00A? ?? ???ADD? ???AX,+0A 20BC:0006 EA0E00BC20? ? JMP? ???20BC:000E 20BC:000B 83C00A? ?? ???ADD? ???AX,+0A 20BC:000E B8004C? ?? ???MOV? ???AX,4C00 20BC:0011 CD21? ?? ?? ? INT? ???21 可以看出,jmp命令,已经把cs和ip的值都给了出来,而且机器码也显示出来 再说下一个jmp命令 就是jmp 寄存器(16位寄存器) 他的作用是修改ip的,范围和jmp near ptr一样 最后说一下,地址在内存的转移 这个有两种,也是段内转移,和段间转移 先说段内转移: 格式 jmp word ptr 内存单元地址 这个word说明从内存单元开始的一个字,是ip的地址 如:mov ax,1234h mov [bx],ax jmp word ptr [bx] 这样ip的值就是1234h 在就是段间转移 格式 jmp dword ptr 内存单元地址 这个dword说明从内存单元开始的一个双字,低字是ip的地址 高字是cs的地址 如:mov bx,0 mov ax,1122h mov [bx],ax mov ax,3344h mov [bx+2],ax jmp dword ptr ds:[0] a

文档评论(0)

pfenejiarz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档