zoukankan      html  css  js  c++  java
  • 关于王爽汇编书中实验8 一个奇怪的程序

    assume cs:code
    
    code segment
            mov ax, 4c00h
            int 21h
    start: 
            mov ax, 0
        s: nop
            nop
            mov di, offset s
            mov si, offset s2
            mov ax, cs:[si]
            mov cs:[di], ax
        s0: jmp short s
        
        s1: mov ax, 0
            int 21h
            mov ax, 0
        s2: jmp short s1
            nop
    code ends
    View Code

    本质问题说的是jmp指令被编译为机器码后,机器码是 EB,后面的数据是 IP 寄存器 将要加、减的值。

    代码中第一次跳转是上图中的 红圈1, EBF0被读取后, IP寄存器指向的是 076A:0018这个地址,即【IP】=18H,  EBF0执行后,IP=【IP】-10H,跳转到 红圈3 处,此处两个NOP点位的两个字节此时被换为了 红圈2 处的机器码 EBF6, 加载 EBF6后,IP指向076a:000A处,即 【IP】=0AH   执行EBF0后, IP=【IP】- 0AH,即指向了076A:0000处理,代码继续执行。

    这段代码表明:

    1、JMP指令被编译为机器指令后,【跳转值】就已经已经确定了。

    2、JMP指令影响IP寄存器的值。

  • 相关阅读:
    SSH服务附带----SFTP
    SSH附带的远程拷贝----SCP
    linux下的SSH服务
    model.form使用,配合form的钩子
    import_module 导入变量的包
    dir函数
    python爬虫之scrapy
    python爬虫之解析库Beautiful Soup
    django 过滤器,标签
    django 验证码实现
  • 原文地址:https://www.cnblogs.com/Jiaojiawang/p/14352384.html
Copyright © 2011-2022 走看看