Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Injecting library   Найти похожие ветки 

 
Wiz@rd ©   (2004-03-21 18:29) [0]

Есть длл которую inject"или в процесс как туда (етой длл) передать данные (в виде структуры) - в котрой обязательно будут строки - пробовал через CreateFileMapping - но работаент только с dll загруженной нормальным способом - чувствую надо как-то через
VirtualAllocEx и WriteProcessMemory в чужом процессе - но как это потом найти эти данные этой dll в процессе, может ещё какие способы приемлемы типа DDE - у кого есть рабочий пример поделитесь - срочно нужно. Огромное спасибо!


 
Wiz@rd ©   (2004-03-21 18:30) [1]

т.е. структура типа

Struct = packed record
 S1: String;
 I: Integer;
end;

Как ее передать и считать


 
Cobalt ©   (2004-03-22 00:24) [2]

> но работаент только с dll загруженной нормальным способом

Имхо, это у васм где-то ошибка в использовании строк (?)
Попробуйте прописать в Library  uses sharemem;


 
Wiz@rd ©   (2004-03-22 01:10) [3]

Если пишу GetMem (Struct, ...) и ZeroMemory (Stcruct, ...) все без ошибок - но в полях нули, если без GetMem - то поля например типа Integer нормально работают, а String & Pointer"ы с ошибками
(String"и инициализирую SetLength"ом)...


 
BiN ©   (2004-03-22 09:47) [4]

Во-первых, директива packed record теряет смысл при использовании динамических строк.
Во-вторых, чтобы записать данные произвольной длины (конечно же меньшей чем размер созданного тобой MMF) лучше всего использовать такую схему записи
write DataSize
write Data //символы, цифры, разная лабуда.. :)
write I и т.д.
случае же с sharemem (см. [2]) придется за собой таскать BORLANDMM.DLL


 
Wiz@rd ©   (2004-03-22 10:29) [5]

packed record - это я в натуре погорячился... Может кто писал Inject library - с которой происходил обмен данными, а то во всех подобных пример есть только сам процесс injectin"га. Если у кого есть рабочий пример поделитесь... И такой вопрос CreateFileMapping может записывать записи с динамичискими структурами или нет?
Вот пример может так понятней (прога лоадер - инициализирует структуру (FillChar например), а dll просто читает):

 type
   PHookInfo = ^THookInfo;
   THookInfo = record
     i: Integer;
     Subject: String;
   end;

 var
   WMHook: Integer = 0;
   CommonArea: PHookInfo = NIL;

implementation

var
  Mapping: THandle = 0;

const
  UniqueId = "{4FFDE751-D5A2-4D26-AE17-B3795854817F}";

initialization
  Mapping := CreateFileMapping(DWORD (-1), NIL, PAGE_READWRITE, 0, SizeOf(CommonArea), UniqueId);
  CommonArea := MapViewOfFile(Mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
  WMHook := RegisterWindowMessage(UniqueId);

finalization
  if Assigned(CommonArea) then
    UnmapViewOfFile(CommonArea);
  if Mapping <> 0 then
    CloseHandle(Mapping);
end.

P.S. Может есть ещё подобные способы обмена данными?


 
Wiz@rd ©   (2004-03-22 10:30) [6]

P.P.S. Это модуль обмена - который компилится и в лоадере и в dll...


 
BiN ©   (2004-03-22 11:27) [7]

Как ты думаешь, чему у тебя равен  SizeOf(CommonArea).

Ты, кстати, можешь решить свою проблему, используя ShortString,
если длина Subject у тебя не привышает 256 байт.
А пример записи данных произвольного размера я тебе в общих чертах дал в [4].

Да, и воизбежание конфликта имен используй разные значения в  CreateFileMapping и RegisterWindowMessage (пусть меня поправят, если я не прав).


 
Wiz@rd ©   (2004-03-22 17:12) [8]

Относительно [4] - как это применить для CreateFileMapping... Догадываюсь что ReadFile, WriteFile... Так?


 
BiN ©   (2004-03-22 17:18) [9]

как это применить для CreateFileMapping... Догадываюсь что ReadFile, WriteFile... Так?

нет. достаточно Move
типа

P:=CommonArea;
Move(DataSize, P^, sizeof(Datasize);
Inc(PByte(P), SizeOf(DataSize));
Move(Data, P^, DataSize);
Inc(PByte(P), DataSize);
и т.д.


 
Wiz@rd ©   (2004-03-22 17:20) [10]

Thx, щас попробую



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
1-1080229284
rimd
2004-03-25 18:41
2004.04.11
Каверзный вопрос про потоки


1-1080127303
Zilog
2004-03-24 14:21
2004.04.11
Расчет времени! Нужна помощь...


4-1075748523
DelphiN!
2004-02-02 22:02
2004.04.11
Как достать файл из ресурса и сохранить на диск


14-1079411613
просто юзер
2004-03-16 07:33
2004.04.11
заработок в инете - реально ли это?


9-1070862678
Kair
2003-12-08 08:51
2004.04.11
Фигуры