03.10.2015, 21:30
|
|
Прохожий
|
|
Регистрация: 01.07.2015
Сообщения: 28
Версия Delphi: delphi xe7
Репутация: 10
|
|
в общем кактотак
Код:
program TestProj;
...
var
data_m, data_f: pointer;
ofs1, ofs2, pos: Cardinal;
dh:TImageDosHeader;
_text:TImageSectionHeader;
...
begin
data_m:=Addr(StartPointProc); //адрес какой-то функции в памяти процесса
CopyMemory(@dh, pointer(HInstance), SizeOf(TImageDosHeader)) ; //читаем заголовок dos
CopyMemory(@_text, pointer(HInstance+dh._lfanew+
sizeof(TImageNtHeaders)), SizeOf(TImageSectionHeader)) ; //читаем заголовок первой секции (секции кода)
ofs1:=Cardinal(data_m)-HInstance; //смещение адреса функции от начала имиджа
ofs2:=ofs1-_text.VirtualAddress; //смещение адреса функции от начала секции
pos:=_text.PointerToRawData + ofs2; //смещение адреса функции от начала файла
ms:=TMemoryStream.Create;
ms.LoadFromFile(ParamStr(0)); //загрузим стрим из этого же EXE
data_f:= ms.Memory;
inc(Cardinal(data_f), pos); //получим адрес того же куска в памяти стрима
//теперь если вычитать небольшой кусок данных из
// data_m - памяти процесса
// data_f - памяти стрима загруженного из файла
//они будут эквивалентны
типа того
http://saveimg.ru/show-image.php?id=...f93eafbd5d213a
|