Главная страница
    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.04 c
7-1079620947
1
2004-03-18 17:42
2004.05.09
Как добавить(изменить) новое значение в реестр?


6-1079094334
Dysan
2004-03-12 15:25
2004.05.09
почему отсылаеться приатаченный файл


4-1079681594
Dmitry-K
2004-03-19 10:33
2004.05.09
Работа с двумя мониторами???


1-1082927765
Wi_Julia
2004-04-26 01:16
2004.05.09
StrToInt


1-1082618636
Alex*
2004-04-22 11:23
2004.05.09
Как превести в PWideChar или как работает функция StringToWideCh





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