[汇编学习笔记][第九章转移指令的原理]

第九章 转移指令的原理

分类

  • jmp转移行为

    • 段内转移
      • 短转移 IP修改范围-128~127
      • 近转移 IP修改范围-32768~32768
    • 段间转移
  • 几个其余转移

    • 无条件转移(如:jmp)
    • 条件转移
    • 循环指令(如:loop)
    • 过程
    • 中断

通过深入理解转移指令jmp来理解CPU执行转移指令的基本原理

9.1 操作符offset

操作符offset是伪指令,取得标号的偏移地址。

还可以在标号出现之前使用,反正标号最后由编译器统一处理

9.2 jmp指令

两种语法

  • 转移目的地址
  • 转移的距离

9.3 根据位移进行的jmp指令

jmp short 标号(转到标号处执行指令)
  • 标号会被编译器翻译为IP

  • CPU在执行jmp指令的时候并不需要转移的 目标地址

  • jmp short 标号指令所对应的机器码中,不包含转移的地址,而包含的是转移的位移

    这个位移是编译器根据标号计算出来的

  • 所以jmp short 标号的功能为:(IP)=(IP)+8位位移(-128~127)

    1. 8位位移=标号地址-jmp指令后的第一个字节的地址
    2. short表明为8位位移,负数用补码表示
  • 还有一种jmp near ptr 标号的功能为:(IP)=(IP)+16位位移

    1. 16位位移=标号地址-jmp指令后的第一个字节的地址
    2. near ptr 表示段内近转移

9.4 根据目的进行的jmp指令

  • jmp far ptr 标号

  • 标号会被编译器翻译为CS:IP

  • 在机器指令中也是用CS:IP来指定目标地址,而不是通过位移

9.5 转移地址在寄存器中的jmp指令

  • jmp 16位reg
  • (IP)=(16位reg)

  • 与之对应的机器指令有什么含义?

9.6 转移地址在内存中的jmp指令

  • jmp word ptr 内存单元地址(段内转移)

    使IP=[内存单元地址],因为IP是一个word,所以必须要jmp word,没有jmp byte

  • jmp dword ptr 内存单元地址(段间转移)

    内存单元存放两个字,高地址表示段地址,低地址表示偏移地址

    • CS=(内存单元)+2
    • IP+(内存单元)

9.7 jcxz指令

jcxz 指令为有条件转移指令,所有的有条件转移指定都是 短转移
对IP的修改范围位-128~127

  • 格式:jcxz 标号
  • 操作: 当(cx)=0 时,IP=(IP)+8位位移
  • 等于

    if((cx)==0)
        jmp short 标号
    

9.8 loop指令

loop 指令为循环指令,所有的循环指令都是短转移

  • 格式 loop 标号
  • 操作:

    • (cx)=(cx)-1
    • 如果(cx)!=0 ,(IP)=(IP)+8位位移
  • 等于

    (cx)--;
    if((cx)!=0)  jmp short 标号
    

9.9 根据位移进行转移的意义

有利于程序段在内存中的浮动装配,是的程序段加载到内存什么位置都没有问题

9.10 编译器对转移位移超界的检测

如果转移范围超界,编译的时候,编译器会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!对于逆向学习汇编语言的学习笔记,我可以给你一些基本的指导。首先,汇编语言是一种低级语言,它与计算机的底层硬件密切相关。逆向工程则是通过分析和理解已编译的程序来获取程序的内部信息。 以下是一些学习汇编语言和逆向工程的建议: 1. 学习基础知识:了解计算机体系结构、寄存器、内存和指令集等基础概念是必要的。可以先阅读相关的书籍或在线教程,掌握这些基本概念。 2. 掌握汇编语言的语法和指令集:每种计算机体系结构都有自己的汇编语言语法和指令集。选择一种你感兴趣的体系结构(如x86、ARM等),并学习它的汇编语言。 3. 练习编写和调试汇编代码:通过编写简单的汇编代码来熟悉语法和指令集。使用调试器来单步执行代码并观察寄存器和内存的变化。 4. 分析已编译程序:选择一个目标程序进行逆向分析。使用反汇编器将程序转换为汇编代码,并分析代码的逻辑和功能。这有助于理解程序的结构和运行过程。 5. 使用调试器进行动态分析:通过调试器来动态地执行程序,并观察程序在运行时的行为。使用断点、内存查看器和寄存器查看器等工具来分析程序的状态和数据。 6. 学习逆向工程工具和技术:了解常用的逆向工程工具和技术,如IDA Pro、OllyDbg、Ghidra等。掌握这些工具的使用可以提高你的逆向分析能力。 7. 参考优秀资源:阅读与逆向工程和汇编语言相关的书籍、论文和博客,关注相关的社区和论坛。与其他逆向工程师交流经验也是很有帮助的。 记住,逆向工程是一个需要耐心和实践的过程。持续学习和实践将帮助你提高逆向分析的技能。祝你在学习汇编语言和逆向工程的过程中取得好成果!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值