Форум: "Система";
Текущий архив: 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