急,在线等待!
代码如下:
#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 的内存地址,请问如何办啊?
#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 的内存地址,请问如何办啊?
...全文
相关推荐
行业文档-设计装置-简易在线带钢急峻度测量平台.zip
【标题解析】标题"行业文档-设计装置-简易在线带钢急峻度测量平台.zip"揭示了这个压缩包文件的主要内容,它包含了关于一个特定行业的技术文档,具体是关于设计一种装置,该装置用于在线测量带钢的急峻度。"
Discuz! 默默的等待模板
"Discuz! 默默的等待模板"是一个专为Discuz! 论坛系统设计的网页模板,旨在提供用户友好的界面和优化的用户体验。Discuz!
急加速急刹车标准
在谈论急加速和急刹车标准时,我们首先需要明确何为急加速和急减速。
Selenium (强制等待、隐式等待、显式等待)三类等待的作用
在编写Selenium脚本时,我们常常需要处理页面加载的问题,这时就会涉及到三种主要的等待方式:强制等待、隐式等待和显式等待。**1.
急求学生会监察部工作计划!.doc
急求学生会监察部工作计划!.doc


进程/线程/DLL
