摘要:
知识点: cdecl 函数调用约定 stdcall 函数调用约定 CALL堆栈平衡 配置属性--> c/c++ -->高级-->调用约定 一、cdecl调用约定 VC++默认约定__cdecl 1、源代码 int __cdecl add1(int a,int b) { return a+b; } 2、生成汇编代码 00401000 /$ 55 ... 阅读全文
摘要:
知识点: PUSH POP CALL堆栈平衡 RETN指令 一、PUSH入栈指令 (压栈指令): 格式: PUSH 操作数 //sub esp,4 ;mov [esp],EBP 操作数可以是寄存器,存储器,或者立即数 二、POP出栈指令 (弹栈指令) 格式:POP 操作数 //mov EBP,[esp] ;add esp,4 操... 阅读全文
摘要:
知识点: CALL框架 EBP寄存器 栈底指针 ESP寄存器 栈顶指针 一、EBP栈底指针 EBP是一个特殊的寄存器,通过EBP+偏移量 可以访问CALL里边的局部变量。它的低16位叫BP。//EAX和AX的关系 二、ESP栈顶指针 ESP栈顶指针与EBP构成的一段空间大小,一般就是本CALL局部变量的空间大小总和。ESP指针配合EBP使用。//SP 三、代码分析 v... 阅读全文
摘要:
条件跳转指令 总结 无符号 条件转移指令 阅读全文
摘要:
OD调试 命令栏指令 一、OD调试 重新开始:Ctrl+F2 转到地址:CTRL+G 断点切换: F2 断点窗口: Alt+B 运行 : F9 暂停 : F12 单步步过: F8 //遇到CALL跳过 单步步入: F7 //遇到CALL进入 运行到选定位置 :F4 //这个主菜单上没有,右键菜单-断点-F4 反汇编窗口中跟随 :回车键enter 跟随: ... 阅读全文
摘要:
知识点: LEA指令 &与LEA OD里修改汇编代码 一、LEA指令格式 有效地址传送指令 LEA 格式: LEA 操作数A, 操作数B 功能: 将操作数B的有效地址传送到指定的的某个寄存器,操作数A必须是寄存器。(32位系统上就是32位寄存器) 二、C++代码测试 int i; int *p=&i; 三、OD里修改汇编代码 按下空格后 直接输入汇编代码 四、汇编... 阅读全文
摘要:
知识点: MOVSX符号扩展传送 MOVZX零扩展传送 一、MOVSX与MOVZX格式 MOVSX 操作数A ,操作数B MOVZX 操作数A ,操作数B 相同点:操作数B 空间必须小于 操作数A 1、格式与MOV基本相同 2、能完成小存储单元向大存储单元的数据传送 比如 movsx eax,bx movzx ebx,ax movsx eax,bx MOVSX,MOVZX... 阅读全文
摘要:
知识点: 寄存器EAX 寄存器AX 寄存器AH 寄存器AL 一、EAX与AX,AH,AL关系图 一格表示一字节 #include int _tmain(int argc, _TCHAR* argv[]) { DWORD iEax; WORD iAx; BYTE iAh,iAl; printf("\n"); __asm { mov eax,0x87654321... 阅读全文
摘要:
知识点: 十六进制 字节,字,双字 汇编中的内存单元长度修饰 add [ebx],0x111 //00401048 |. 8003 11 ADD BYTE PTR DS:[EBX],11 ; i=i+11 一、十六进制 十六进制同我们日常中的十进制表示法不一样。它由0-9,A-F,组成。与10进制的对应关系是:0-9对应0-9;A-F对应10-15; ... 阅读全文
摘要:
知识点: 加法汇编指令ADD 一、加法指令 ADD(Addition) 格式 格式: ADD A,B //A=A+B; 功能: 两数相加 1. OPRD1为任一通用寄存器或存储器操作数,可以是任意一个通用寄存器,而且还可以是任意一个存储器操作数. OPRD2为立即数,也可以是任意一个通用寄存器操作数.立即数只能用于源操作数B. 2. A和B均为寄存器是允许的,一个为寄存器而另一... 阅读全文