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

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

4 голосов
/ 03 января 2012

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

выполнить 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 бит.Некоторые из моих друзей могут скомпилировать его в среде D7.Любая помощь приветствуется.

1 Ответ

5 голосов
/ 03 января 2012

Ошибка говорит о том, что одна из переменных, которые вы передаете в качестве параметра, не имеет требуемого типа. Ошибка в параметре 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;
...