0-汇编语言
运算
AND(&) OR(|) XOR(^) NOT(~) SHL(<<) SHR/SAR(>>)
加法计算:异或,与左移一位(重复)
通用寄存器
32位 | 16位 | 8位 |
---|---|---|
EAX | AX | AL、AH |
ECX | CX | CL、CH |
EDX | DX | DL、DH |
EBX | BX | BL、BH |
ESP | SP | |
EBP | BP | |
ESI | SI | |
EDI | DI |
注:AX、AL、AH分别表示EAX中的2个低位字节、1个低位字节和1个高位字节
内存
每个应用程序都会有自己的独立4GB内存空间
MOVE DOWRD/WORD/BYTE PTR DS:[内存地址],立即数/32位通用寄存器
数据存储在ARM上采用大端模式(数据低位在高位地址中)
指令
MOVS指令默认使用ESI和EDI,执行完成后ESI、EDI的值会自增或自减(取决于DF位和传送数据的数据宽),按照数据宽度简写为MOVSB,MOVSW,MOVSD
STOS同理,将AL/AX/EAX的值储存到EDI指定的内存地址
REP MOVS指令/STOS指令,循环执行MOVS指令/STOS指令,次数取决于ECX中的值
窗口输入dd 7FFDF000即可看到堆栈的地址范围
堆栈
EIP存放CPU下次要执行的指令地址
平衡堆栈有两种情况三个方法:1.使用完堆栈后,POP释放数据;2.外平栈:使用ADD指令;3.内平栈:使用RET指令
ESP寻址:MOV EAX, DWORD PTR SS:[ESP+4]
EBP寻址:保存EBP的值,将EBP指向ESP的位置,在原来的堆栈基础上将ESP上移,变成新的堆栈
标志寄存器
条件标志位:SF(符号)、ZF(零)、OF(溢出[有符号])、CF(进位[无符号])、AF(辅助进位)、PF(奇偶)
控制标志位:DF、IF、TF