您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > OD的常用命令及汇编知识
以下命令适用于OllyDbg的命令行插件Cmdline.dll(显示于程序的插件菜单中)===============================================================命令行插件支持的命令CALC判断表达式WATCH添加监视表达式AT在指定地址进行反汇编FOLLOW跟随命令ORIG反汇编于EIPDUMP在指定地址进行转存DA转存为反汇编代码DB使用十六进制字节格式转存DC使用ASCII格式转存DD转存在堆栈格式DU转存在UNICODE格式DW使用十六进制字词格式转存STK前往堆栈中的地址AS(AS+地址+字符串)在指定地址进行汇编BP进行条件中断(有条件的断点)BPX中断在全部调用(Call)BPD清除全部调用中的断点BC清除断点MR内存断点于访问时MW内存断点于写入时MD清除内存断点HR访问时进行硬件中断HW写入时进行硬件中断HE执行时进行硬件中断HD清除硬件断点STOP停止运行程序调试PAUSE暂停执行程序调试RUN运行程序进行调试GE运行和通过例外SI单步进入Call中SO步过CallTI跟踪进入直到地址TO跟踪步过直到地址TC跟踪进入直到满足条件TOC跟踪步过直到满足条件TR运行直到返回TU运行直到用户代码LOG查看记录窗口MOD查看模块窗口MEM查看内存窗口CPU查看CPU窗口CS查看Call堆栈BRK查看断点窗口TCEIP5000000071169CE82ECEFFFFcallvideofix.0070E4CF0071CAC2E88434FFFFcallvideofix.0070FF4B0071CB7A45incebp0071CB7A45incebp0071E36FE89229FFFFcallvideofix.00710D0600720664E8E2F8FEFFcallvideofix.0070FF4BOPT打开选项设置窗口EXIT退出OllyDbgQUIT退出OllyDbgOPEN打开一个可执行文件CLOSE关闭可执行文件RST重新运行当前程序HELP查看API函数的帮助汇编知识/////////////////////////////一.机器码.win32ASM打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.///////////////////////////二.需要熟练掌握的全部汇编知识(只有这么多)不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了cmpa,b比较a与bmova,b把b的值送给aret返回主程序nop无作用,英文“nooperation”的简写,意思是“donothing”(机器码90)***机器码的含义参看上面(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)call调用子程序je或jz若相等则跳(机器码74或0F84)jne或jnz若不相等则跳(机器码75或0F85)jmp无条件跳(机器码EB)ja若大于则跳jg若大于则跳jge若大于等于则跳jb若小于则跳jl若小于则跳jle若小于等于则跳pop出栈push压栈///////////////////////////三.常见修改(机器码)74=7574=9074=EB75=7475=9075=EB///////////////////////////四.两种不同情况的不同修改方法1.修改为jmpje(jne,jz,jnz)=jmp相应的机器码EB(出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息xxxxxxxxxxxx出错信息,例如:注册码不对,sorry,未注册版不能...,FunctionNotAvaibleinDemo或CommandNotAvaible或Can'tsaveinShareware/Demo等(我们希望把它跳过,不让它出现)2.修改为nopje(jne,jz,jnz)=nop相应的机器码90(正确信息向上找到的第一个跳转)nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处xxxxxxxxxxxx正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)1.通用数据传送指令.MOV传送字或字节.MOVSX先符号扩展,再传送.MOVZX先零扩展,再传送.PUSH把字压入堆栈.POP把字弹出堆栈.PUSHA把AX,CX,DX,BX,SP,BP,SI,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先交换再累加.(结果在第一个操作数里)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;把偏移地址存到DX.LDS传送目标指针,把指针内容装入DS.例:LDSSI,string;把段地址:偏移地址存到DS:SI.LES传送目标指针,把指针内容装入ES.例:LESDI,string;把段地址:偏移地址存到ESI.LFS传送目标指针,把指针内容装入FS.例:LFSDI,string;把段地址:偏移地址存到FSI.LGS传送目标指针,把指针内容装入GS.例:LGSDI,string;把段地址:偏移地址存到GSI.LSS传送目标指针,把指针内容装入SS.例:LSSDI,string;把段地址:偏移地址存到SSI.4.标志传送指令.LAHF标志寄存器传送,把标志装入AH.SAHF标志寄存器传送,把AH内容装入标志寄存器.PUSHF标志入栈.POPF标志出栈.PUSHD32位标志入栈.POPD32位标志出栈.二、算术运算指令───────────────────────────────────────ADD加法.ADC带进位加法.INC加1.AAA加法的ASCII码调整.DAA加法的十进制调整.SUB减法.SBB带借位减法.DEC减1.NEC求反(以0减之).CMP比较.(两操作数作减法,仅修改标志位,不回送结果).AAS减法的ASCII码调整.DAS减法的十进制调整.MUL无符号乘法.IMUL整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM乘法的ASCII码调整.DIV无符号除法.IDIV整数除法.以上两条,结果回送:商回送AL,余数回送AH,(字节运算);或商回送AX,余数回送DX,(字运算).AAD除法的ASCII码调整.CBW字节转换为字.(把AL中字节的符号扩展到AH中去)CWD字转换为双字.(把AX中的字的符号扩展到DX中去)CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND与运算.OR或运算.XOR异或运算.NOT取反.TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL逻辑左移.SAL算术左移.(=SHL)SHR逻辑右移.SAR算术右移.(=SHR)ROL循环左移.ROR循环右移.RCL通过进位的循环左移.RCR通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时,可直接用操作码.如SHLAX,1.移位1次时,则由寄存器CL给出移位次数.如MOVCL,04SHLAX,CL四、串指令───────────────────────────────────────DS:SI源串段寄存器:源串变址.ESI目标串段寄存器:目标串变址.CX重复次数计数器.AL/AX扫描值.D标志0表示重复操作中SI和DI应自动增量;1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS串传送.(MOVSB传送字符.MOVSW传送字.MOVSD传送双字.)CMPS串比较.(CMPSB比较字符.CMPSW比较字.)SCAS串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS装入串.把源串中的元素(字或字节)逐一装入AL或AX中.(LODSB传送字符.LODSW传送字.LODSD传送双字.)STOS保存串.是LODS的逆过程.REP当CX/ECX0时重复.REPE/REPZ当ZF=1或比较结果相等,且CX/ECX0时重复.REPNE/REPNZ当ZF=0或比较结果不相等,且CX/ECX0时重复.REPC当CF=1且CX/ECX0时重复.REPNC当CF=0且CX/ECX0时重复.五、程序转移指令───────────────────────────────────────1无条件转移指令(长转移)JMP无条件转移指令CALL过程调用RET/RETF过程返回.2条件转移指令(短转移,-128到+127的距离内)(当且仅当(SFXOROF)=1时,OP1OP2)JA/JNBE不小于或不等于时转移.JAE/JNB大于或等于转移.JB/JNAE小于转移.JBE/JNA小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE大于转移.JGE/JNL大于或等于转移.JL/JNGE小于转移.JLE/JNG小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ等于转移.JNE/JNZ不等于时转移.JC有进位时转移.JNC无进位时转移.JNO不溢出时转移.JNP/JPO奇偶性为奇数时转移.JNS符号位为0时转移.JO溢出转移.JP/JPE奇偶性为偶数时转移.JS符号位为1时转移.3循环控制指令(短转移)LOOPCX不为零时循环.LOOPE/LOOPZCX不为零且标志Z=1时循环.LOOPNE/LOOPNZCX不为零且标志Z=0时循环.JCXZCX为零时转移.JECXZECX为零时转移.4中断指令INT中断指令INTO溢出中断IRET中断返回5处理器控制指令HLT处理器暂停,直到出现中断或复位信号才继续.WAIT当芯片引线TEST为高电平时使CPU进入等待状态.ESC转换到外处理器.LOCK封锁总线.NOP空操作.STC置进位标志位.CLC清进位标志位.CMC进位标志取反.STD置方向标志位.CLD清方向标志位.STI置中断允许位.CLI清中断允许位.六、伪指令───────────────────────────────────────DW定义字(2字节).PROC定义过程.ENDP过程结束.SEGMENT定义段.ASSUME建立段寄存器寻址.ENDS段结束.END程序结束.
本文标题:OD的常用命令及汇编知识
链接地址:https://www.777doc.com/doc-6400272 .html