#汇编语言初探
##C语言转换为汇编语言
在vs中编辑好代码之后,可以先按F10进行编译处理之后,在空白处右键,转到反汇编,或者直接按Alt+8进行反汇编,这时从C语言转为汇编语言就完成。
##数值显示
###原码
原码是一种二进制表示方法。
原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0两种表示方法都可以),其余位表示数值的大小。
###补码
一个负整数(或原码)与其补数(或补码)相加,和为模。
对一个整数的补码再求补码,等于该整数自身。
补码的正零与负零表示方法相同。
###反码
正数的反码与其原码相同;
负数的反码是对其原码逐位取反,但符号位除外。
##寄存器
###标志寄存器
CF表示进位或借位,针对无符号整数,判断是否超出表达范围。
OF表示溢出,针对有符号整数,溢出符号就反啦,其实有符号与无符号一个区别就是最高位是符号还是数值,当是数值时,最高位的高位发生变化就是CF,而是符号时,最高位收到数值运算影响就是OF,计算机并不知道是否有符号,逻辑有程序员决定。
ZF,SF,PF分别表示上次运算结果为0,最高位为1,为1的位数为偶数个。
###寻址方式
| ————- |:————-:|
| 立即数寻址 | MOV EAX,123H |
| 寄存器寻址 | MOV EAX,EBX |
| 直接寻址 | MOV EAX, [12345678H] |
| 寄存器间接寻址 | MOV EAX, [EBX] |
| 乱七八糟寻址 | MOV EAX,123[BX][SI] |
###基本指令
| ————- |:————-:|
| 数据传送 | MOV, PUSH,POP,LEA,MOVSX,PUSHAD,POPAD |
| 算数运算 | ADD,INC,SUB, DEC,NEG,CMP,MUL,IMUL,DIV,IDIV |
| 逻辑运算 |AND,OR,NOT,XOR,TEST,SHL,SAL,SHR,SAR,ROL,ROR,RCL,RCR|
| 转移指令 | JMP, J[N]Z(E), J[N]B,JA,JL, JG |
| 循环指令 | LOOP, JCXZ |
| 串操作 |MOVS[BWD],CMPS,SCAS,LODS,STOS,REP |
| 其他指令 |INT,RET,NOP,CLD,CALL |
##虚拟机下的程序调试
###吾爱破解的布局
###其他窗口
| ————- |:————-:|
|L(og) | 日志信息 |
| E(xecute modules) | 模块信息 |
| M(emory map) |内存映射信息 |
| T(hreads) | 线程信息 |
| W(indows) | 窗口信息 |
| H(andles) |句柄信息 |
| C |当前线程上下文 |
| K |调用链信息 |
###常用快捷键
###基本调试流程
演示
GOTO
Breakpoint
Comment
Lable