急,在线等待!

needways needways 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
代码如下:

#pragma check_stack(off)
#pragma pack(push, 8)

typedef struct {
DWORD dwProcessId;
PBYTE pfnHookFunc;
} INJLIBINFO, *PINJLIBINFO;

__declspec(naked) DWORD WINAPI CallDefault()
{
// __asm push ebp
// __asm mov ebp, CallDefault
// __asm add ebp, 70
// __asm mov eax, [ebp + INJLIBINFO.dwProcessId]
// __asm pop ebp
// __asm ret
}

static void AfterCallDefault(void) {}

#pragma pack(pop)
#pragma check_stack

//=======================================================================================
void Test()
{
INJLIBINFO InjLibInfo = {0};

InjLibInfo.dwProcessId = 19800611;

// 计算出 InjLibInfo 结构的大小
const int cbInfoSize = sizeof(InjLibInfo);

// 计算 CallDefault() 函数所占用的字节数
const int cbCodeSize = ((LPBYTE)AfterCallDefault - (LPBYTE)CallDefault);

// 计算出所需要的内存大小
const DWORD cbMemSize = cbCodeSize + cbInfoSize + 3;

// 分配共享内存
HANDLE hMapping = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, cbMemSize, NULL);

// 映射共享内存
PBYTE pbCodeRemote = (PBYTE)MapViewOfFile(hMapping, FILE_MAP_WRITE,
0, 0, 0);
TRACE1("Address Of CallDefault: 0x%08X", pbCodeRemote);

// 将 CallDefault 放入共享内存中
memcpy(pbCodeRemote, (LPVOID)CallDefault, cbCodeSize);

// 将 INJLIBINFO 结构放入共享内存中
memcpy(pbCodeRemote + ((cbCodeSize + 4) & ~3), &InjLibInfo, cbInfoSize);

// 调试
DWORD d = ((DWORD(WINAPI*)(void))pbCodeRemote)();

TCHAR szTEMP[256];
wsprintf(szTEMP, "CallDefault Return: %d\n", d);
MessageBox(NULL, szTEMP, "TestFM", MB_ICONINFORMATION);

// 释放共享内存
UnmapViewOfFile(pbCodeRemote);
CloseHandle(hMapping);
return 0;
}

我想在 CallDefault 中得到 InjLibInfo 的内存地址,请问如何办啊?
...全文
评论 12
收藏 已收藏
分享
返回顶部
needways
进程/线程/DLL 15,465 成员 49,169 内容