Thunk新思路, x86成功,x64失败,寻求帮助
这个链接是Thunk实现的一种新思路:http://www.cppblog.com/proguru/archive/2008/08/24/59831.html
作者将hWnd替换为this指针,回调函数风格变成:
于是我在作者思路的基础上改写如下:
其中,x86下成功,但x64失败:CreateWindowEx时返回错误码1812,意思是:The specified image file did not contain a resource section.
之后崩溃。
请帮忙:x64的实现哪里出现了问题?应该如何修正呢?
作者将hWnd替换为this指针,回调函数风格变成:
LRESULT CALLBACK wndProc(UINT msg, WPARAM wpa, LPARAM lpa)
{
// hWnd 通过Thunk代码保存到窗口类的第一个数据成员:HWND _wnd; 中
}于是我在作者思路的基础上改写如下:
struct ThunkData
{
#if defined(_M_IX86)
#pragma pack(push, 1)
unsigned char m_szMachineCode[22];
void* init(DWORD_PTR proc, void* pthis)
{
*((WORD *) &m_szMachineCode[ 0]) = 0xB851;
*((DWORD *) &m_szMachineCode[ 2]) = (DWORD)pthis;
*((DWORD *) &m_szMachineCode[ 6]) = 0x08244C8B;
*((DWORD *) &m_szMachineCode[10]) = 0x44890889;
*((DWORD *) &m_szMachineCode[14]) = 0xE9590824;
*((DWORD *) &m_szMachineCode[18]) = proc - reinterpret_cast<DWORD>(this) - sizeof(ThunkData);
// write block from data cache and flush from instruction cache
FlushInstructionCache(GetCurrentProcess(), this, sizeof(ThunkData));
return this;
}
#pragma pack(pop)
#elif defined(_M_AMD64)
#pragma pack(push, 1)
unsigned char m_szMachineCode[27];
void* init(DWORD_PTR proc, void *pthis)
{
*((WORD *)&m_szMachineCode[0]) =0xB848;
*((INT_PTR*)&m_szMachineCode[2]) =reinterpret_cast<INT_PTR>(pthis);
*((DWORD *)&m_szMachineCode[10]) =0x89480848;
*((DWORD *)&m_szMachineCode[14]) =0x00B848C1;
*((INT_PTR*)&m_szMachineCode[17]) =proc;
*((WORD *)&m_szMachineCode[25]) =0xE0FF;
FlushInstructionCache(GetCurrentProcess(), this, sizeof(ThunkData));
return this;
}
#pragma pack(pop)
#endif
void* getCode()
{
return this;
}
void* operator new(size_t)
{
return VirtualAlloc(NULL, sizeof(ThunkData), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
}
void operator delete(void* thunk)
{
VirtualFree(thunk, 0, MEM_RELEASE);
}
};其中,x86下成功,但x64失败:CreateWindowEx时返回错误码1812,意思是:The specified image file did not contain a resource section.
之后崩溃。
请帮忙:x64的实现哪里出现了问题?应该如何修正呢?
...全文
相关推荐
科技中介服务机构如何利用智能体提升技术需求挖掘与转化服务效率?.docx
科技中介服务机构如何利用智能体提升技术需求挖掘与转化服务效率?
高校技术转移办公室如何提升科技成果推介效率?.docx
高校技术转移办公室如何提升科技成果推介效率?
过碳酸钠行业分析:在绿色洗涤、包衣稳定化与关税重构下的市场前景如何?.pdf
过碳酸钠行业分析:在绿色洗涤、包衣稳定化与关税重构下的市场前景如何?.pdf
高校技术转移办公室在推动成果转化时,如何精准匹配企业需求?.docx
科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。
PDF、epub、mobi、AZW3文件阅读器
PDF、epub、mobi、AZW3、MD、TXT、HTML文件阅读器,可预览docx文件。 自由下载,免费使用,可现时打开多个文档,也可将文件拖入窗口打开。


