Что нового

Получение данных из dll

SealAlbinos

Продвинутый
Сообщения
162
Репутация
59
извините за глупый вопрос, но можно ли получить данные из dll, которая уже внедрена в процесс
допустим получить данные из MessageBoxA, если такое возможно то как можно это осуществить
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
SealAlbinos
С какой целью и какие данные вы хотите получить? Текст окна созданного функцией MessageBoxA в контексте некоторого процесса? В таком случае узнать из какого модуля(dll) был произведен вызов достаточно затруднительно и ненадежно, но возможно, к примеру:

1. Получить поток владеющий диалоговым окном.
2. Раскрутить стек до EntryPoint'а потока.
3. Сопоставить его позицию с загруженными модулями.
 
Автор
SealAlbinos

SealAlbinos

Продвинутый
Сообщения
162
Репутация
59
firex сказал(а):
SealAlbinos
С какой целью и какие данные вы хотите получить? Текст окна созданного функцией MessageBoxA в контексте некоторого процесса? В таком случае узнать из какого модуля(dll) был произведен вызов достаточно затруднительно и ненадежно, но возможно, к примеру:

1. Получить поток владеющий диалоговым окном.
2. Раскрутить стек до EntryPoint'а потока.
3. Сопоставить его позицию с загруженными модулями.
просто хотел узнать пример, а суть будет в том что dll будет использоваться в качестве поиска сигнатур
а autoit в качестве формы, которая должна взаимодействовать с внедренной dll в процессе
к примеру включение или отключение функции
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
SealAlbinos
Я так понимаю dll не ваша? Ибо если ваша, то таких вопросов быть не должно.

Смотрите в сторону этого:
1.
Код:
DllCall

2.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

Для первого случая может быть организован рабочий поток, управление которым производится вызовами DllCall. Ну а второй, к примеру, будет сам создавать рабочий поток.


Если же она не ваша, то не мешало бы подробнее почитать о ее интерфейсах.
 
Автор
SealAlbinos

SealAlbinos

Продвинутый
Сообщения
162
Репутация
59
firex сказал(а):
SealAlbinos
Я так понимаю dll не ваша? Ибо если ваша, то таких вопросов быть не должно.

Смотрите в сторону этого:
1.
Код:
DllCall

2.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

Для первого случая может быть организован рабочий поток, управление которым производится вызовами DllCall. Ну а второй, к примеру, будет сам создавать рабочий поток.
dll будет еще в процессе написана, но в ней будет хранится включение и выключение функции (к примеру ставим галку на checkbox dll изменяет адресс на \x90\x90 снимаем галку и возвращается в прежнее состояние), при этом она должна находиться уже в процессе, так что dllcall по идеи уже не сработает потому что он работает напрямую с dll
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
SealAlbinos[?]
в ней будет хранится включение и выключение функции (к примеру ставим галку на checkbox dll изменяет адресс на \x90\x90 снимаем галку и возвращается в прежнее состояние)
Я не должен был понять этот бессвязный поток мыслей, но похоже понял, как и в целом вашу затею.

Изучите этот топик:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365574(v=vs.85).aspx

Наиболее элементарным будет способ завязанный на проецируемых файлах (File Mapping), таким образом вы сможете передавать данные от вашей dll (загруженной в любой процесс) в вашу главную программу. Пример использования:
Код:
_WinAPI_CreateFileMapping
 

Prog

Продвинутый
Сообщения
640
Репутация
80
firex [?]
Наиболее элементарным будет способ завязанный на проецируемых файлах
Это говорить об элементарных способах, то в dll можно создать shared секцию и производить обмен через нее.
 
Верх