Главная страница
    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.035 c
1-1082957632
voprosik
2004-04-26 09:33
2004.05.09
Динамический PopUp


3-1081744611
Bizon
2004-04-12 08:36
2004.05.09
Checkbox в DBGride


1-1082613777
Demi
2004-04-22 10:02
2004.05.09
Почему неработает функция прерывания int в программе на Delphi


7-1080053468
dmytro
2004-03-23 17:51
2004.05.09
Запуск от имени


1-1082463556
Goida
2004-04-20 16:19
2004.05.09
Чистка Excel...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский