выполнить exe в памяти
Я пробовал этот код.
Я натыкаюсь на ошибку "типы фактических и формальных параметров var должны быть идентичны". Любая помощь в этом отношении высоко ценится.
......
ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes); <-- error is here
.......
and
.....
WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes); <---- error here
......
Я использую Delphi XE2 и windows 7 64 bit. Некоторые из моих друзей могут скомпилировать его в среде D7. Любая помощь ценится.
1 ответ:
Ошибка говорит вам, что одна из переменных, передаваемых в качестве параметра, не имеет требуемого типа. Ошибка находится в параметре
var
. Конечным параметром для обеих этих функций является единственный параметр var, поэтому очевидно, чтоBytes
не является требуемым типом.Решение состоит в том, чтобы сделать
Bytes
совпадающим с типом, указанным в объявленииReadProcessMemory
иWriteProcessMemory
. В XE2 этот тип равенSIZE_T
. Поэтому вам просто нужно изменить свое определениеBytes
, чтобы оно было типаSIZE_T
.Вот XE2 заявления:
function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: SIZE_T; var lpNumberOfBytesRead: SIZE_T): BOOL; stdcall; function WriteProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: SIZE_T; var lpNumberOfBytesWritten: SIZE_T): BOOL; stdcall;