zoukankan      html  css  js  c++  java
  • 汇编实验八:分析一个奇怪的程序

    预备知识:

    (1) offset: 获取标号的偏移地址

    (2) jmp  :依据位移进行跳转 (jmp short 标号 ,jmp near ptr 标号,jmp near ptr 标号)——转到标号处

    (3) jmp  :转到内存 (jmp word ptr + 地址,jmp dword ptr + 地址 )

    (4) jcxz  :有条件转移

    (5) loop:循环指令

    实验任务:

    Source Code:

    assume cs:codesg
    
    codesg 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
    
    codesg ends
    end start
    View Code

     (注意:程序从程序入口start开始)

    di,si是根据代码段的偏移地址,mov ax,cs:[si],就是将s2处的机器码给ax;

    mov cs:[di],ax将s处两条nop 指令覆盖;具体就是F6EB;

    神奇的地方就是,下一条指令确实mov ax,4c00H,int 21H;

    jmp 0000,而不是jmp 到 我们以为的s1处,那是因为F6EB具体的含义,jmp指令里面没有存要目的地址,而是靠修改IP的值,lO(∩_∩)O哈哈~

  • 相关阅读:
    Cg学习
    Unity URP
    unity官方案例水效果解析
    Unity使用Xlua框架热更
    隐私政策以及用户协议
    iOS App 从点击到启动
    iOS编程中throttle那些事
    Homebrew安装
    ios 开发证书 appids 描述文件关系
    学习网站
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6927540.html
Copyright © 2011-2022 走看看