gpt4 book ai didi

将此 C 代码转换为 Delphi 代码

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:04 25 4
gpt4 key购买 nike

我需要将此 C 代码转换为 Delphi 代码,因为我的 Delphi 知识不够好,所以我需要您的帮助!

我的主要问题是,我不知道如何在 Delphi 中转换指针/用指针计算。

当然,我尝试过转换它,对于熟悉这两种语言的人来说,这应该很容易做到:)

原始代码(C):

void* GetPayloadExportAddr( LPCWSTR lpPath, HMODULE hPayloadBase, LPCSTR lpFunctionName ) {
// Load payload in our own virtual address space
HMODULE hLoaded = LoadLibrary( lpPath );

if( hLoaded == NULL ) {
return NULL;
} else {
void* lpFunc = GetProcAddress( hLoaded, lpFunctionName );
DWORD dwOffset = (char*)lpFunc - (char*)hLoaded;

FreeLibrary( hLoaded );
return (DWORD)hPayloadBase + dwOffset;
}
}

BOOL InitPayload( HANDLE hProcess, LPCWSTR lpPath, HMODULE hPayloadBase, HWND hwndDlg ) {
void* lpInit = GetPayloadExportAddr( lpPath, hPayloadBase, "Init" );
if( lpInit == NULL ) {
return FALSE;
} else {
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0,
lpInit, hwndDlg, 0, NULL );

if( hThread == NULL ) {
return FALSE;
} else {
CloseHandle( hThread );
}
}

以及部分转换的 Delphicode:

function GetPayloadExportAddr( lpPath: LPCWSTR; hPayloadBase: HMODULE; lpFunctionName: LPCWSTR) : Pointer;
var
hLoaded: HMODULE;
lpFunc: pointer;
dwOffset: DWORD;
begin
hLoaded := LoadLibrary( lpPath );

if( hLoaded = 0 ) then
begin
Result := 0;
end
else
begin
lpFunc := GetProcAddress( hLoaded, lpFunctionName );
dwOffset := DWORD(PCHAR(lpFunc) - PCHAR(hLoaded));

FreeLibrary( hLoaded );
Result := PDWORD(DWORD(hPayloadBase) + dwOffset);
end;
end;

procedure CallStopHack( hProcess: THandle; lpPath: LPCWSTR; hPayloadBase: HMODULE);
var
lpInit : Pointer;
hThread: THandle;
bla:Cardinal;
begin
lpInit := GetPayloadExportAddr(lpPath, hPayloadBase, 'StopSpeedhack');
if( lpInit = nil ) then
begin
Exit;
end
else
begin
hThread := CreateRemoteThread( hProcess, nil, 0,
lpInit, 0, 0, bla);

if( hThread = 0 ) then
begin
Exit;
end
else
begin
CloseHandle( hThread );
end;
end;
end;

我假设我搞砸了 PDWORD()-Cast 等。很抱歉,但我不知道如何正确地转换它。

提前致谢!问候

最佳答案

应该这样做:

dwOffset := DWORD(lpFunc) - hLoaded;

lpFunc 已经是一个指针,你想要的只是地址,hLoaded 已经是一个 NativeUint。

Result := Ptr(hPayloadBase + dwOffset);

关于将此 C 代码转换为 Delphi 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084718/

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