Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

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

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


 
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;

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


 
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;


 
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"ом)...


 
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


 
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: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...


 
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 (пусть меня поправят, если я не прав).


 
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... Так?


 
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);
и т.д.


 
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, щас попробую


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

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



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

Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.046 c
1-1082645647
alienserg
2004-04-22 18:54
2004.05.09
Кнопка динамической формы на панели задач.


4-1078824354
X9
2004-03-09 12:25
2004.05.09
Вопрос при запуске exe-шников из Internet Explorer а


3-1081480032
F. Evgeney
2004-04-09 07:07
2004.05.09
как правильно подключить сетвую базу через ADOTable


8-1076342936
Сережа
2004-02-09 19:08
2004.05.09
Рисование


1-1082404703
ASvencim
2004-04-19 23:58
2004.05.09
Как программно узнать имя сеанса Windows?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский