gpt4 book ai didi

c++ - Delphi 到 C++ GetModuleBase 函数的转换?

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:24 32 4
gpt4 key购买 nike

我不是 Delphi 向导,但我在板上找到了这个函数,我非常需要它用于 C++,是否有人足够了解 Delphi 和 C++ 来转换它?

function GetModuleBase(hProcID: Cardinal; lpModName: PChar):Cardinal;
var
hSnap: Cardinal;
tm: TModuleEntry32;
begin
result := 0;
hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, hProcID);
if hSnap <> 0 then
begin
tm.dwSize := sizeof(TModuleEntry32);
if Module32First(hSnap, tm) = true then
begin
while Module32Next(hSnap, tm) = true do
begin
if lstrcmpi(tm.szModule, lpModName) = 0 then
begin
result := Cardinal(tm.modBaseAddr);
break;
end;
end;
end;
CloseHandle(hSnap);
end;
end;

最佳答案

以下未经测试,但应该接近:

#include <windows.h>
#include <tlhelp32.h>

byte *getModuleBase(DWORD hProcId, TCHAR *lpModName)
{
byte *result = NULL;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, hProcId);

if (hSnap)
{
MODULEENTRY32 tm;
tm.dwSize = sizeof(MODULEENTRY32);

if (Module32First(hSnap, &tm))
{
while (Module32Next(hSnap, &tm))
{
if (lstrcmpi(tm.szModule, lpModName) == 0)
{
result = tm.modBaseAddr;
break;
}
}
}

CloseHandle(hSnap);
}

return result;
}

请注意,此代码不检查第一个模块的名称。如果你也想检查第一个模块,那么你可以尝试这样的事情:

if (Module32First(hSnap, &tm))
{
do
{
if (lstrcmpi(tm.szModule, lpModName) == 0)
{
result = tm.modBaseAddr;
break;
}
}
while (Module32Next(hSnap, &tm));
}

关于c++ - Delphi 到 C++ GetModuleBase 函数的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2269623/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com