Мне нужно преобразовать этот C-код в Delphi-Code и потому, что мой Delphi-Knowledge недостаточно хорош Мне нужна ваша помощь!Преобразуйте этот C-код в Delphi-Code
Моя основная проблема заключается в том, что я не знаю, как отличать указатели/вычислять с помощью указателей в 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);
}
}
И конвертированный в Делифед:
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() - Литая и т.д. Мне очень жаль, но я не знаю, как правильно бросить его.
Заранее благодарен! С уважением
Спасибо, это решило мою проблему! – nemoest