编译器和连接器
裸函数:编译器不管(挂钩子)
int __declspec(naked)plus(int x, int y) { __asm { push ebp //保留调用前的栈底 mov ebp, esp //提升堆栈 sub esp, 40h push ebx //保留现场 push esi push edi mov eax, 0xcccccccc //开始填充缓冲区 mov ecx, 10h lea edi, dword ptr ds : [ebp - 40] rep stosd mov eax,dword ptr ds:[ebp+8] //核心程序 add eax,dword ptr ds:[ebp+0xc] pop edi //恢复现场 pop esi pop ebx mov esp,ebp //降低堆栈 pop ebp ret //需要自己添加 } }
__fastcall 不一定需要平衡堆栈
真正函数的入口:mainCRTStartup() //可修改入口点
寻找main函数,找传3个参数的CALL(3个PUSH)
超出数据宽度:只取后面的一段
char k=0xFF //缓存区(FF CC CC CC) ---> -1 默认是有符号的
unsigned char k=0xFF //缓存区(FF CC CC CC) ---> 255
有无符号的用途:类型转换——比较大小和数学运算
*第五,六步(另一种方法):指数部分--> (127+n )的二进制
float:精确到小数点后六位
IEEE规范
浮点数:一定是有符号数