【汇编Asm】汇编写花指令完全手册 汇编花指令

  • A+
所属分类:lcx

    使用汇编语言(Asm)编写花指令完全手册,汇编语言(Asm)中的花指令详解。

一、花指令概念:

    花指令是一堆汇编指令组成,对于程序来说,是一堆废话,加不加花指令都不影响程序的正常运行。

    简单地说,例如计算:1+1=2,这个很简单的算式。如果加入花指令的话,则是变成了这样的:

    “1+1+2-2+4+5+6-4-5-6-7-8-9+7+8+9+0=2”

    后边的“+2-2+4+5+6-4-5-6-7-8-9+7+8+9+0”全是废话,全部互相抵消了,跟没有没什么区别,这就是花指令。

    要注意的是,编写的花指令要终始保持堆栈的平衡。

    保持堆栈平衡,可以简单的理解为:就是让后边的那一大堆废话“+2-2+4+5+6-4-5-6-7-8-9+7+8+9+0”,全部互相抵消,始终保持为“0”。不论存不存在,都不影响原算式的结果、值,这个就是保持堆栈平衡。说白了,就是保持原始计算结果不变。

二、编写花指令的原则:

    编写花指令的基本原则,就是要保持堆栈的平衡(废话,堆栈不平衡,运行结果就变了,程序就会出错,这就不叫花指令了)。

    编写花指令,细细品味下面一段比喻:

    我们把一段花指令比喻成一道数学运算题,把汇编指令(push pop 之类的)比喻成加减乘除,把寄存器或数据(eax, ebx, 1 等)比喻成数字(1, 2, 3 等)。那么要保持花指令堆栈的平衡,等于保持这道数学题的结果始终是0。

三、解释一些指令含意:

    A、以下指令均为两条一组,两条指令之间互相抵消,nop 指令自己跟自己抵消,相当于“0”。
    -----------------------------------------
    nop         //不执行,空操作。(详见底下的“Nop 指令说明”)
    -----------------------------------------
    push ebp    //把基址指针寄存器压入堆栈
    pop ebp     //把基址指针寄存器弹出堆栈
    -----------------------------------------
    push eax    //把数据寄存器压入堆栈
    pop eax     //把数据寄存器弹出堆栈
    -----------------------------------------
    push esp    //把指针寄存器压入堆栈
    pop esp     //把指针寄存器弹出堆栈
    -----------------------------------------
    dd esp,1    //指针寄存器加1
    sub esp,1   //指针寄存器减1
    -----------------------------------------
    inc ecx     //计数器加1
    dec ecx     //计数器减1
    -----------------------------------------
    sub esp,1   //指针寄存器加1
    sub esp,-1  //指针寄存器减1
    -----------------------------------------

    B、跳到程序入口地址、指定地址指令。
    -----------------------------------------
    jmp  入口地址      //跳到程序入口地址。
    -----------------------------------------
    push 入口地址      //把入口地址压入堆栈。
    retn               //返回到入口地址,整体效果与(jmp 入口地址)一样。
    -----------------------------------------
    jb   入口地址      //效果和jmp入口地址一样,直接跳到程序入口地址。
    jnb  入口地址      //效果和jmp入口地址一样,直接跳到程序入口地址。
    -----------------------------------------
    mov eax, 入口地址  //把入口地址传送到数据寄存器中。
    jmp eax            //跳到数据寄存器中的地址,也就是程序入口地址。
    -----------------------------------------

四、免杀花指令编写手册:

    注意:以下指令均为两个一组互相抵消,详细请参考上边的“指令含意”。以后编写花指令,都可以参考本手册,灵活组合,快速写出自己的花指令。

    -----------------------------------------
    push ebp            //把基址指针寄存器压入堆栈
    pop ebp             //把基址指针寄存器弹出堆栈
    -----------------------------------------
    push eax            //把数据寄存器压入堆栈
    pop eax             //把数据寄存器弹出堆栈
    -----------------------------------------
    push esp            //把指针寄存器压入堆栈
    pop esp             //把指针寄存器弹出堆栈
    -----------------------------------------
    push 0              //相当于0,自身与自身抵消
    -----------------------------------------
    push 10             //其中数字可以任意,注意与下面对应。相当于加上10
    push -10            //相当于减去10,+10-10=0
    -----------------------------------------
    nop                 //可任意在中间添加,不执行,空操作,自身与自身抵消
    -----------------------------------------
    move edi, edi       //效果与nop一样,自身与自身抵消
    -----------------------------------------
    add esp, 1          //其中数字可以任意,注意以下面对应。相当于加上1
    add esp, -1         //相当于减去1,+1-1=0
    -----------------------------------------
    add esp, 1          //其中数字可以任意,注意以下面对应。相当于加上1
    sub esp, 1          //相当于减去1,+1-1=0
    -----------------------------------------
    inc ecx             //计数器加1
    dec ecx             //计数器加1
    -----------------------------------------
    sub eax, -2         //指针寄存器减2。其中数字可任意,与inc的个数对应
    inc eax             //指针寄存器加1
    inc eax             //指针寄存器加1
    -----------------------------------------
    sub esp,1           //指针寄存器加1
    sub esp,-1          //指针寄存器减1
    -----------------------------------------
    add eax -2          //数据寄存器减2。其中数字可任意,与inc的个数对应
    inc eax             //数据寄存器加1
    inc eax             //数据寄存器加1
    -----------------------------------------
    jmp 底下的jmp地址   //跳到底下的jmp地址继续执行,意思就是跳过本行,继续执行
    jmp 底下的指令地址  //跳到底下指令地址继续执行,意思就是跳过本行,继续执行底下的指令
    -----------------------------------------
    push ebp            //把基址指针寄存器压入堆栈
    mov ebp, esp        //移动基址指针寄存器到指针寄存器
    -----------------------------------------
    jmp 入口地址        //最后跳到程序原入口地址,继续执行原程序。
    -----------------------------------------

扩展知识:

    Nop 指令说明:CPU 不执行此指令,但占用一个指令周期(也就是 CPU 空闲一会儿,详见底下的“什么是指令周期”),指令周期(空闲时间)的长短因 CPU 不同等因素而不同。

    什么是指令周期?

    指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。

    CPU 从内存取出一条指令并执行这条指令的时间总和。

    指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

    从指令的执行速度看,单字节和双字节指令一般为单机器周期和双机器周期,三字节指令都是双机器周期,只有乘、除指令占用4个机器周期。在编程时要注意选用具有同样功能而机器周期数少的指令。

    使用汇编语言(Asm)编写花指令完全手册,汇编语言(Asm)中的花指令详解,使用汇编语言(Asm)编写花指令完全手册,使用汇编语言(Asm)编写花指令手册,使用汇编语言(Asm)编写花指令,使用汇编(Asm)编写花指令手册,汇编语言(Asm)中的花指令详解,使用汇编语言编写花指令手册,使用汇编编写花指令手册,使用Asm编写花指令手册,汇编(Asm)中花指令详解,汇编语言中花指令详解,使用汇编编写花指令,使用Asm编写花指令,使用汇编编花指令,使用汇编写花指令,汇编中花指令详解,Asm中花指令详解,使用Asm编花指令,使用Asm写花指令,用汇编写花指令,用汇编编花指令,汇编花指令详解,用Asm编花指令,用Asm写花指令,Asm花指令详解,汇编写花指令,汇编编花指令,Asm编花指令,Asm写花指令,花指令详解,汇编花指令,Asm花指令,汇编,Asm,汇编语言(Asm),编写花指令,花指令概念,花指令互相抵消,保持堆栈平衡,互相抵消,编写花指令原则,堆栈不平衡,汇编指令,push pop,加减乘除,寄存器,数据,eax, ebx, 1,花指令堆栈平衡,两条指令之间互相抵消,nop 指令,nop 自己跟自己抵消,nop 相当于0,nop 不执行,空操作,Nop 指令说明,push ebp把基址指针寄存器压入堆栈,pop ebp 把基址指针寄存器弹出堆栈,push eax把数据寄存器压入堆栈,pop eax 把数据寄存器弹出堆栈,push esp把指针寄存器压入堆栈,pop esp 把指针寄存器弹出堆栈,dd esp,1指针寄存器加1,sub esp,1 指针寄存器减1,inc ecx 计数器加1,dec ecx 计数器减1,sub esp,1 指针寄存器加1,sub esp,-1 指针寄存器减1,跳到程序入口地址,跳到指定地址指令,jmp 入口地址 跳到程序入口地址,push 入口地址 把入口地址压入堆栈,retn 返回到入口地址,jb 入口地址 直接跳到程序入口地址,jnb 入口地址,mov eax, 入口地址 把入口地址传送到数据寄存器中,jmp eax 跳到数据寄存器中的地址,也就是程序入口地址,免杀花指令编写手册,push 0 相当于0,自身与自身抵消,push 10 相当于加上10,push -10相当于减去10,nop 可任意在中间添加,不执行,空操作,自身与自身抵消,move edi, edi 效果与nop一样,自身与自身抵消,add esp, 1 相当于加上1,add esp, -1 相当于减去1,sub esp, 1 相当于减去1,inc ecx 计数器加1,dec ecx 计数器加1,sub eax, -2 指针寄存器减2,inc eax 指针寄存器加1,sub esp,1 指针寄存器加1,sub esp,-1 指针寄存器减1,add eax -2 数据寄存器减2,inc eax 数据寄存器加1,push ebp 把基址指针寄存器压入堆栈,mov ebp, esp移动基址指针寄存器到指针寄存器,jmp 入口地址,程序入口地址,Nop 指令,指令周期,什么是指令周期,执行指令所需时间,机器周期,单机器周期,双机器周期,三字节指令,4个机器周期。

文章来源于lcx.cc:【汇编Asm】汇编写花指令完全手册 汇编花指令

相关推荐: 【文章】应用密码学:分布式 - 鉴别安全协议

DASS     分布式鉴别安全协议(DASS)是由数字设备公司开发的,它也提供相互鉴别和密钥交换[604,1519,1518]。与前面的协议不同,DASS同时使用了公开密钥和对称密码。Alice和Bob每人有一个私钥,Trent有他们公钥签名的副本。    …

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: