好友
阅读权限10
听众
最后登录1970-1-1
|
雨落叶哭
发表于 2020-6-20 21:05
1.32位通用寄存器 EAX ESP ECX EBP EDX ESI EBX EDI
2.MOV指令 立即数到寄存器 MOV EAX,1; 寄存器到寄存器 MOV EAX,EBX; 立即数到内存 MOV DWORD PTR DS:[0x13FFC4],1; 寄存器到内存 MOV DWORD PTR DS:[0x13FFC4],EAX; 内存到寄存器 MOV EAX,DWORD PTR DS:[0x13FFC4];
3.存储模式 大端模式:数据高位在低位,数据低位在高位 小端模式:数据低位在高位,数据高位在低位
4.常用汇编指令add//加法sub//减法and//和or//或xor //异或运算not //取反指令movs//移动指令,从内存到内存
5.MOVS指令:移动数据 内存到内存 MOVS BYTE PTR ES[EDI],BYTE PTR DS:[ES]
6.STOS指令:将AL/AX/EXAX的值储存到[EDI]指定的内存单元
7.REP指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令 MOV ECX,10; REP MOVSD; REP STOSD;
8.堆栈 堆栈就是一块内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用。 和数据结构的堆栈无关 ESP中存储了当前的堆栈
9.PUSH指令 功能: 向堆栈中压入数据 修改栈顶指针 PUSH EAX;
10.POP指令 功能: 将栈顶数据存储到寄存器/内存 修改栈顶指针ESP寄存器 POP EAX;
11.无条件跳转 修改EIP(EIP的值是cpu下一次执行指令的地址) mov指令不能修改EIP JMP指令: JMP 寄存器/立即数/内存; (mov EIP,寄存器/立即数/内存;) CALL指令: CALL 寄存器/立即数/内存; (PUSH 下一行地址;mov EIP,寄存器/立即数/内存;) RET指令: RET (ADD ESP ,4;MOV EIP,[ESP-4];)
12.有条件跳转 JCC 标志寄存器
13.函数 用JMP来执行函数 用CALL来执行函数 用来堆栈传参
14.堆栈平衡 如果要返回父程序,则当在堆栈进行堆栈的操作的时候,一定要保证在RET这条指令之前, ESP指向的是压入栈中的地址。 如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数导致的堆栈变化. 平衡方式:内平栈,外平栈
15.ESP寻址和EBP寻址 ESP(栈顶指针) EBP(栈底指针) 原因:EBP位置相对稳定 过程: PUSH EBP; MOV EBP = ESP;
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|