C语言__后半段,数据类型

编译器和连接器

裸函数:编译器不管(挂钩子)

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规范

浮点数:一定是有符号数



猜你喜欢

转载自blog.csdn.net/z1592570975/article/details/80335721