выполнить exe в памяти


Я пробовал этот код.

Выполнить 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 4

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;