| [C++] 纯文本查看 复制代码 #include "stdafx.h"
#include <Windows.h>
struct mypass
{
	int a;
	int b;
	char szName[0x255];
	INT64 attible;
};写一个简单的demo然后我们可以得出一点小的结论
 
 实验证明: 结构体内的数据,int 为4字节长度,char数组按4字节对齐,int64占用8位, 传参方式:_stdcall 的方式的参数传递依次为 :R9,R8,RDX,RCX参数还是从右往左 返回值跟32位一样,仍然保存在*ax寄存器里 比如: [C++] 纯文本查看 复制代码 HWND myhwnd = ::FindWindowEx(NULL, NULL, mystr, L"test");
000000013F515D78  lea         r9,[string L"test" (013F519DB0h)]  
000000013F515D7F  lea         r8,[mystr]  
000000013F515D86  xor         edx,edx  
000000013F515D88  xor         ecx,ecx  
000000013F515D8A  call        qword ptr [__imp_FindWindowExW (013F521158h)]  
000000013F515D90  mov         qword ptr [myhwnd],rax  而float类型则通过mmx寄存器来进行传递,占用长度与32位相同仍为4字节 [C++] 纯文本查看 复制代码 float myfloat = 3.1415;
000000013F8E5D23  movss       xmm0,dword ptr [__real@40490e56 (013F8E9C20h)]  
000000013F8E5D2B  movss       dword ptr [myfloat],xmm0  
	float mydest = myfloat;
000000013F8E5D33  movss       xmm0,dword ptr [myfloat]  
000000013F8E5D3B  movss       dword ptr [mydest],xmm0  
//========================================================================================================
	float myfloat = 3.1415;
000000013F765D73  movss       xmm0,dword ptr [__real@40490e56 (013F769C20h)]  
000000013F765D7B  movss       dword ptr [myfloat],xmm0  
	float mydest = round(myfloat);
000000013F765D83  movss       xmm0,dword ptr [myfloat]  
000000013F765D8B  call        round (013F761401h)  
000000013F765D90  movss       dword ptr [mydest],xmm0  浮点型参数 xmm0...8?用来传递浮点类型,如果有返回值则结果保存在xmm0里 以上为初探X64做的笔记希望可以帮到坛友. 
 |