汇编知识
4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) CMP AX,BX JZ XX 这两组是AX减BX,如果值为0则跳转到标号为XX的行 其它还有一些: JZ/JE 相等或为零则跳转 JNZ/JNE 不相等或不为零则跳转 JL/JLE 小于/小于或等于则跳转 JG/JGE 大于/大于或等于则跳转 JMP 无条件跳转 比较语句 CMP AX,BX AX寄存器减去BX寄存器的内容 AND AX,BX AX与BX做“与运算” OR AX,BX AX与BX做“或运算” TEST AX,BX 这个与AND AX,BX一样的效果 XOR AX,BX 将AX内容清零 子程式(这个在破解中特别重要),他是主程序的一个分支,一般在发送注册码,比较注册码这些工作都是靠子程式来完成的。 子程式的返回码一般是RET 一般是这个样子的: CALL 15F:334422 数据操作 MOV AX,BX 数据传送指令,将BX的值传送到AX中 XCHG AX,BX AX与BX值互换 还有见得最多的就是算术运算 ADD AX,BX 加法 AX=AX+BX SUB AX,BX 减法 AX=AX-BX INC AX 寄存器加1 AX=AX+1 DEC AX 寄存器减1 AX=AX-1 MUL 乘法 DIV 除法 mov ax,bx 意思是 把bx传入到ax里面! 寄存器分别为 AX BX CX DX SI DI SP BP IP CS SS DS ES PSW AX乘、除运算,字的输入输出,中间结果的缓存 BX存储器指针 CX串操作、循环控制的计数器 DX字的乘、除运算,间接的输入输出 简单的指令 mov ax,18 将18送入寄存器AX 高级语言 AX=18 mov ah,78 将78送入寄存器AH 高级语言 AH=78 add ax,8 将寄存器AX中的数值加上8 高级语言 AX=AX+8 mov ax,bx 将AXZ和BX中的数值相加,结果存在AX中 高级语言 AX=AX+BX 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB MOV 传送指令 PUSH 入栈指令 POP 出栈指令 XCHG 交换指令 XLAT 换码指令 LEA 有效地址送寄存器指令 LDS( 指针送寄存器和DS指令 LES 指针送寄存器和ES指令 LAHF 标志位送AH指令 SAHF AH送标志寄存器指令 PUSHF 标志进栈指令 POPF 标志出栈指令 ADD 加法指令 ADC 带进位加法指令 INC 加1指令 SUB 不带借位的减法指令 SBB 带借位的减法指令 DEC 减1指领 NEG 求补指令 CMP 比较指令 MUL 无符号数乘法指令 IMUL 有符号数乘法指令 DIV 无符号数除法指令 IDIV 有符号数除法指令 CBW 字节转换为字指令 CWD 字转换为双字指令 DAA 压缩的BCD码加法十进制调整指令 DAS 压缩的BCD码减法十进制调整指令 AAA 非压缩的BCD码加法十进制调整指令 AAS 非压缩的BCD码加法十进制调整指令 AND 逻辑与指令 OR 逻辑或指令 XOR 逻辑异或指令 NOT 逻辑非指令 TEST 测试指令 SHL 逻辑左移指令 SHR 逻辑右移指令 ROL 循环左移指令P58 ROR 循环右移指令P58 RCL 带进位循环左移 RCR带进位循环左移 MOVS串传送指令 STOS 存入串指令 LODS从串取指令 REP 重复操作前 CLD清除方向标志指令 STD设置方向标志指令 CMPS 串比较指令 SCAS 串扫描指令 REPE/REPZ相等/为零时重复操作前缀 REPNE/REPNZ不相等/不为零进重复前缀 IN 输入指令 OUT输出指令 JMP无条件转移指令 JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令 LOOP 循环指令P70 LOOPZ/LOOPE 为零/相等时循环指令 LOOPNZ/LOOPNE 不为零/不相等时循环指令 CALL 子程序调用指令 RET程序返回指令 CLC 进位位置0指令 CMC进位位求反指令 SRC进位位置1指令 NOP 无操作指令 HLT 停机指令 OFFSET 返回偏移地址 SEG 返回段地址 EQU(=) 等值语句 PURGE 解除语句 DUP 操作数字段用复制操作符 SEGMENT,ENDS 段定义指令 ASSUME 段地址分配指令 ORG 起始偏移地址设置指令 $ 地址计数器的当前值 PROC,ENDP 过程定义语句 NAME,TITLE,END 程序开始结束语句 MACRO,ENDM 宏定义指令 JZ OPR //结果为零转移 JNZ OPR //结果不为零转移 JS OPR //结果为负转移 JNS OPR //结果为正转移 JO OPR //溢出转移 JNO OPR //不溢出转移 JP OPR //结果为偶转移 JNP OPR //结果为奇转移 JC OPR //有进位转移 JNC OPR //无进位转移 F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点。(相当于 SoftICE 中的 F9) F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码。(相当于 SoftICE 中的 F10) F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上。(相当于 SoftICE 中的 F8) F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停。(相当于 SoftICE 中的 F7) F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行。(相当于 SoftICE 中的 F5)