[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做的笔记希望可以帮到坛友.
|