08 2021 档案
摘要:指针 忘记指针,重学指针 指针类型引入 可以简单的将指针类型看作为一个带*的的类型 所有的类型后面加一个或者多个*即为指针类型 指针类型的声明 一般类型声明 char c; short s; int i; __int64 l; float f; double d; struct student {
阅读全文
摘要:循环语句逆向分析 从反汇编的角度简单分析while,do-while和for循环语句 while CPP代码: #include "stdafx.h" void Fun() { int s = 0, i = 1; while (i <= 10) { s += i++; } } int main(in
阅读全文
摘要:switch语句逆向 通过反汇编深入了解switch语句,并从中理解为何在某些情况下其性能优于if...else语句 语句结构 switch (整形表达式) { case 常量表达式1: 语句块; break; case 常量表达式2: 语句块; break; ...... ...... .....
阅读全文
摘要:基于缓冲区溢出的HelloWorld CPP代码 #include "stdafx.h" void HelloWorld() { printf("Hello World"); getchar(); } void Fun() { int arr[5] = {1,2,3,4,5}; arr[6] = (
阅读全文
摘要:IF多分支逆向分析 案例 CPP代码 #include "stdafx.h" int cnt; void Function(int x, int y) { if (x == 1) { cnt = 1; } else if (y == 1) { cnt = 1; } else { cnt = 0; }
阅读全文
摘要:IF-ELSE逆向分析 案例 CPP代码: #include "stdafx.h" int max_num; void Function(int x, int y) { if (x > y) { max_num = x; } else { max_num = y; } } int main(int
阅读全文
摘要:IF语句逆向分析 内存图 代码区 存放指令,可读,可执行 堆栈 存放参数、局部变量、临时数据 堆 同态申请的,大小是可变的,可读,可写 全局变量区 存放全局变量,可读,可写 常量区 存放常量,只读 全局变量与局部变量 全局变量 int g_n = 10; //g_n存储到全局变量区 int Func
阅读全文
摘要:C/C++数据类型 一、分类表格 C语言数据类型 基本类型 整数类型 浮点类型 构造类型 数组类型 结构体类型 共用体(联合)类型 指针类型 空类型(void) 二、数据类型三要素 存储数据的宽度 存储数据的格式 作用范围(作用域) 三、整数类型 类型 宽度 字节数 char 8bit 1字节 sh
阅读全文
摘要:查找程序入口 win32控制台程序查找程序入口 一、调用特征 main函数被调用前要先调用的函数如下 GetVersion() _heap_init() GetCommandLineA() _crtGerEnviromentStringsA() _setargv() _setEnvp _cinit(
阅读全文
摘要:调用约定 规定了参数的传递 一、常见的调用约定 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈 调用者清理栈 __stdcall 从右至左入栈 自身清理堆栈 __fastcall ECX/EDX传送前两个剩下的从右至左入栈 自身清理堆栈 __cdecl为默认调用约定 二、各调用约定的
阅读全文
摘要:裸函数 编译器不会做出保存现场、提升堆栈、恢复现场等功能,在调用函数时只会生成CALL指令 一、普通函数 声明 int plus(int a, int b) { return a + b; } 汇编表示 函数代码及断点设置 调用普通函数时编译器的处理 参数处理 CALL调用 外平栈 返回值处理 JM
阅读全文
摘要:JCC EIP的值决定cpu即将执行的指令 JMP指令 JMP指令 直接修改EIP MOV EIP,R/IMM ;以上指令功能由JMP表示为 JMP R/IMM CALL指令 跳转前将下一指令的地址压入栈 PUSH M1 MOV EIP,M2/R ;以上指令功能由CALL表示为 CALL M2/R
阅读全文

浙公网安备 33010602011771号