资源描述:
《汇编经典基础知识》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、汇编经典基础知识汇编经典基础知识.txt性格本身没有好坏,乐观和悲观对这个世界都有贡献,前者发明了飞机,后者发明了降落伞。汇编经典基础知识一.机械码,又称机器码. ultraedit打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.二.需要熟练掌握的全部汇编知识 不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了 cmpa,b比较a与b mova,b把b的值送给a r
2、et返回主程序 nop无作用,英文“nooperation”的简写,意思是“donothing”(机器码90)***机器码的含义参看上面 (解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop) call调用子程序 je或jz若相等则跳(机器码74或0F84) jne或jnz若不相等则跳(机器码75或0F85) jmp无条件跳(机器码EB) jb若小于则跳 ja若大于则跳 jg若大于则跳 jge若大于等于则跳 jl若小于则跳 jle若小于等于则跳 pop出栈 pu
3、sh压栈 三.常见修改(机器码) 74=>7574=>9074=>EB 75=>7475=>9075=>EB jnz->nop 75->90(相应的机器码修改) jnz->jmp 75->EB(相应的机器码修改) jnz->jz 75->74(正常)0F85->0F84(特殊情况下,有时,相应的机器码修改) 四.两种不同情况的不同修改方法 1.修改为jmp je(jne,jz,jnz)=>jmp相应的机器码EB(出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错
4、信息 xxxxxxxxxxxx出错信息,例如:注册码不对,sorry,未注册版不能...,"FunctionNotAvaibleinDemo"或 "CommandNotAvaible"或"Can'tsaveinShareware/Demo"等(我们希望把它跳过,不让它出现) 。。。 。。。 xxxxxxxxxxxx正确路线所在 2.修改为nop je(jne,jz,jnz)=>nop相应的机器码90(正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利
5、来到紧跟其后的正确信息处 xxxxxxxxxxxx正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里) 。。。 。。。 xxxxxxxxxxxx出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1.通用数据传送指令. MOV传送字或字节. MOVSX先符号扩展,再传送. MOVZX先零扩展,再传送. PUSH把字压入堆栈. POP把字弹出堆栈. PUSHA把AX,CX,DX,BX,SP,BP,SI,
6、DI依次压入堆栈. POPA把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP交换32位寄存器里字节的顺序 XCHG交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX) XADD先交换再累加.(结果在第一个
7、操作数里) XLAT字节查表转换. ──BX指向一张256字节的表的起点,AL为表的索引值(0-255,即 0-FFH);返回AL为查表结果.([BX+AL]->AL) 2.输入输出端口传送指令. INI/O端口输入.(语法:IN累加器,{端口号│DX}) OUTI/O端口输出.(语法:OUT{端口号│DX},累加器) 输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时, 其范围是0-65535. 3.目的地址传送指令. LEA装入有效地址. 例:LEADX,string;把
8、偏移地址存到DX. LDS传送目标指针,把指针内容装入DS. 例:LDSSI,string;把段地址:偏移地址存到DS:SI. LES传送目标指针,把指针内容装入ES. 例:LESDI,string;把段地址:偏移地址存到ESI. LFS传送目标指针,把指针内容装入FS. 例:LFSDI,string;把段地址:偏移地址存到FSI. LGS传送