Asm

作者: Noefl | 来源:发表于2017-01-02 15:45 被阅读0次

    1.如何理解JZ OR JNZ?
    Jz=jump if zero (结果为0则设置ZF零标志为1,跳转)
    Jnz=jump if not zero (结果不为零(或不相等)则设ZF零标志位0,跳转)
    eg.

    Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器结果本身不会保存。
    TEST AX,BX 与 AND AX,BX 命令有相同效果,只是Test指令不改变AX和BX的内容,而AND指
    令会把结果保存到AX中。
    
    test eax,0x4000000                      //逻辑与 10000000000000000000000000000000
    jnz short KGUI.5DEB7DB4          //如果eax=0x40000000 则跳转
    
    test eax,0x80008000                    //逻辑与 10000000000000001000000000000000
    je short KGUI.5DEB7D99            //如果 eax  高位 和  低位  不为8  则 跳转
    
    test逻辑与运算结果为零,就把ZF(零标志)置1;
    cmp 算术减法运算结果为零,就把ZF(零标志)置1.
    

    2.如何理解ESP?
    函数内部:push 一个参数后 (当前地址)ESP=(原地址)ESP-4,相应的下面列表中需要+4.

    esp+ 函数参数 esp- 函数局部变量
    0x4 函数第一个参数 0x4 局部变量第一个参数
    0x8 函数第二个参数 0x8 局部变量第二个参数
    0xC 函数第三个参数 0xC 局部变量第三个参数
    0x10 函数第四个参数 0x10 局部变量第四个参数
    0x14 函数第五个参数 0x14 局部变量第五个参数
    0x18 函数第六个参数 0x18 局部变量第六个参数
    0x1C 函数第七个参数 0x1C 局部变量第七个参数
    0x20 函数第八个参数 0x20 局部变量第八个参数

    3.通用寄存器

    通用寄存器
    EAX 累加(Accumulator)寄存器 AX(AH、AL) 常用于乘、除法和函数返回值
    EBX 基址(Base)寄存器 BX(BH、BL) 常做内存数据的指针, 或者说常以它为基址来访问内存.
    ECX 计数器(Counter)寄存器 CX(CH、CL) 常做字符串和循环操作中的计数器
    EDX 数据(Data)寄存器 DX(DH、DL) 常用于乘、除法和 I/O 指针
    ESI 来源索引(Source Index)寄存器 SI 常做内存数据指针和源字符串指针
    EDI 目的索引(Destination Index)寄存器 DI 常做内存数据指针和目的字符串指针
    ESP 堆栈指针(Stack Point)寄存器 SP 只做堆栈的栈顶指针; 不能用于算术运算与数据传送
    EBP 基址指针(Base Point)寄存器 BP 只做堆栈指针, 可以访问堆栈内任意地址, 经常用于中转 ESP 中的数据, 也常以它为基址来访问堆栈; 不能用于算术运算与数据传送

    4.短跳转和长跳转 EB E9

    00D298B2     /75 04         jnz Xxajh.00D298B8
    00D298B4     |33D2          xor edx,edx
    00D298B6     |EB 08         jmp Xxajh.00D298C0
    00D298B8  |> \8B51 08       mov edx,dword ptr ds:[ecx+0x8]
    00D298BB  |.  2BD0          sub edx,eax
    00D298BD  |.  C1FA 03       sar edx,0x3
    00D298C0  |>  8B71 08       mov esi,dword ptr ds:[ecx+0x8]
    
    =========================================================
    00D299D8   .  3B7D 04              cmp edi,dword ptr ss:[ebp+0x4]
    00D299DB   .  74 04                je Xxajh.00D299E1
    00D299DD   .  8B3F                 mov edi,dword ptr ds:[edi]
    00D299DF   .^ EB CB                jmp Xxajh.00D299AC
    00D299E1   >^ E9 AAD7FFFF          jmp xajh.00D27190
    00D299E6   >  8DBE 54010000        lea edi,dword ptr ds:[esi+0x154]
    00D299EC   .  8BCF                 mov ecx,edi
    00D299EE   .  E8 2DCFF9FF          call xajh.00CC6920
    00D299F3   .  8DAE 8C010000        lea ebp,dword ptr ds:[esi+0x18C]
    
    直接的jmp分3种 
    Short Jump(短跳转)机器码 EB rel8 
    只能跳转到256字节的范围内 
    Near Jump(近跳转)机器码 E9 rel16/32 
    可跳至同一个段的范围内的地址 
    Far Jump(远跳转)机器码EA ptr 16:16/32 
    可跳至任意地址,使用48位/32位全指针 
    
    
    

    5.汇编中寄存器32位,低16位,高8位,低8位的理解

    QQ截图20170304075831.png

    相关文章

      网友评论

        本文标题:Asm

        本文链接:https://www.haomeiwen.com/subject/jevwvttx.html