Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как вызвать неизвестную подпрограмму из неизвестной динамической библиотеки?

11K
29 ноября 2006 года
Огненный
15 / / 01.11.2005
Понятно , что никак? Но уточню задачу:

Обычно подключение динамической библиотеки ничем не отличается от статической - просто надо включить заголовок (и использовать правильное название (и подпись) попрограммы/класса ) и указать компилятору на динамическое подключение.

Есть возможность и выбирать нужную динамическую библиотеку в процессе вычисления, но опять таки нужно знать правильные названия!

Так вот задача:
Как в момент вычисленй узнать по любой (заранее неизвестной) динамической библиотеке (в windows dll-файлу, в Unix - so-файлу, ...) список включённых в неё подпрограмм со всем необходимым для вызова?

Как узнать содержание произвольной динамической библиотеки в момент вычисления?

P.S. Надеюсь , что хоть вопрос понять можно ...
Мой интерес чисто академический. Подобную функцию легко "осуществить", если в каждую динамическую библиотеку включить дополнительную функцию, например,

void header(char *);

результатом работы которой было бы формирование текста, соответствующего заголовочному файлу с опущенными директивами препроцессора и коментариями...

Если заблуждаюсь - скажите в чём ...
8.8K
29 ноября 2006 года
The_Ice
109 / / 04.04.2006
FARPROC GetProcAddress(

HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // name of function
);
наиболее подходящее, что смог вспомнить :)
11K
29 ноября 2006 года
_io_lock
73 / / 05.10.2006
[QUOTE="The_Ice"]FARPROC GetProcAddress[/QUOTE]
Да нет, ты непонял, ему _все_ функции нужны. Я лично только могу посоветовать ковыряться в недрах формата PE (или Elf для *nix) и искать все функции ручками. А параметры... ну можно анализировать код, смотрерть сколько функция стека забивает... но это уже из области фантастики... (хотя Ida же вон анализирует;)

ЗЫ : если сильно инересует, пиши в лычку, у меня уйма документации по этой теме :cool:
63
29 ноября 2006 года
Zorkus
2.6K / / 04.11.2006
В винде можно анализировать таблицу экспорта библиотеки.
355
29 ноября 2006 года
<SCORP>
786 / / 21.10.2006
и такие утилиты [для анализа экспортов] есть. т.е. задача вполне реальная :)
но как её решать у меня идей нету. ковыряться в зоголовках исполнимых файлов... ну может быть. думаю что есть более культурные варианты
11K
30 ноября 2006 года
Огненный
15 / / 01.11.2005
То есть, как я понял, что если в саму динамическую библиотеку не включена соответствующая void header(char *) , то решить мной обозначенную задачу можно только хакерским путём.

P.S. Честно говоря мне это кажется слегка противоречащем здравому смыслу ибо
1. операционная система как-то сверяет правильность названия и подписи вызываемой подпрограммы, а значит необходимая информация в сам формат представления динамической библиотеки включена,
2. отсутствие такого стандартного системного вызова вообще говоря слегка затрудняет повторное использование библиотеки, а ведь именно в целях повторного использования она и создана.

Единственно можно предположить, что общедостпность данной функции вызывает проблемы связанные с компьютерной безопасностью ...

А в целом спасибо за ответы!
3
30 ноября 2006 года
Green
4.8K / / 20.01.2000
Зачем гадать?
Ознакомься с форматом PE, а конкретно с секцией экспорта.
Из неё ты узнаешь о названиях экспортируемых функций.
Количество же и тип передаваемых параметров в общем случае узнать не имея соотв. описания нельзя.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог