Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> из .dll/.so файла получить информацию об экспорте 
V
    Опции темы
boostcoder
Дата 9.9.2011, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



всем доброго вечера.

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

подскажите куда копать.

OS: win32/*nix


спасибо.


зы
просьба к модераторам. не могли бы вы создать зеркало в разделе "C/C++: Системное программирование и WinAPI" ;)
спасибо.

PM WWW   Вверх
MAKCim
Дата 9.9.2011, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



вообще никак (если только самим не формировать нужную информацию)
хотя можно посмотреть в сторону dwarf2


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
boostcoder
Дата 9.9.2011, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(MAKCim @  9.9.2011,  22:35 Найти цитируемый пост)
вообще никак

ы!
вообще-вообще? никак?
PM WWW   Вверх
volatile
Дата 9.9.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(boostcoder @  9.9.2011,  21:44 Найти цитируемый пост)
1. имена экспортируемых функций.

с именами все просто. (я про венду)
нужно копать таблицу экспорта, в PE формате. 
PE-формат это формат исполнимых файлов, (Portable Executible)

Цитата(boostcoder @  9.9.2011,  21:44 Найти цитируемый пост)
2. возвращаемый тип.
3. кол-во и типы аргументов.

а вот с этим посложней будет. В общем случае не возможно.
Но если экспортируемые функции С++ замангленные, то можно частично еще кое-какую инфу извлечь.
Если же не замангленные, то дохлый номер, только имена.

PM MAIL   Вверх
boostcoder
Дата 9.9.2011, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(volatile @  9.9.2011,  23:28 Найти цитируемый пост)
если экспортируемые функции С++

нет. экспортируемые функции - Си. а то, что они выполняют внутри, может быть и с++.

вообще, не думал что с этим такая проблема...

Добавлено @ 23:36
Цитата(boostcoder @  9.9.2011,  23:35 Найти цитируемый пост)
экспортируемые функции - Си

т.е. что-то типа такого:
void* create_object(name) {}
void* create_object1(name, arg1) {}
void* create_object2(name, arg1, arg2) {}
...
void delete_object(void*) {}

Добавлено @ 23:38
таки что, придется самому генерить инфу об предоставляемых объектах... smile 

Это сообщение отредактировал(а) boostcoder - 9.9.2011, 23:38
PM WWW   Вверх
volatile
Дата 9.9.2011, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 2
Всего: 85



Цитата(boostcoder @  9.9.2011,  23:35 Найти цитируемый пост)
нет. экспортируемые функции - Си. 

Тогда только имена, без вариантов.

Походу, с замангленными С++ тоже бы пришлось не сладко, там их надо было бы разманглить. Теоретически в них зашифрованы типы аргументов и возвращаемого значения, но это теоретически. Практически пришлось бы неслабо позаниматься сексом, чтобы извлечь эту информацию. (общепринятых стандартов там нет)  smile 

Цитата(boostcoder @  9.9.2011,  23:35 Найти цитируемый пост)
таки что, придется самому генерить инфу об предоставляемых объектах...  

да, это единственно нормальный способ.
PM MAIL   Вверх
boostcoder
Дата 10.9.2011, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



расстроился я что-то... оптимизма реализовать получение информации об экспортируемых функциях что-то поубавилось  smile 

Это сообщение отредактировал(а) boostcoder - 10.9.2011, 00:18
PM WWW   Вверх
null56
Дата 11.9.2011, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



boostcoder, что - то похожее я узнавал про dll, но получить информацию об аргументах - ПРОБЛЕМА
http://forum.vingrad.ru/forum/topic-302230...rocaddress.html

Добавлено через 9 минут и 5 секунд
вроде как народ советовал смотреть в сторону
http://en.wikipedia.org/wiki/Name_mangling
но это не дало мне особых результатов
PM MAIL   Вверх
fish9370
Дата 12.9.2011, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 2
Всего: 1



а что если, по стандартному методу?
- открываем объектный модуль (so/dll) и запрашиваем информацию об экспортируемых символах и закрываем обратно.. 
другой вопрос, что объектник может ничего не экспортировать, при этом сам будет себя регистрировать в ядре программы.. в таком случае лучше всего, наверно, предусмотреть символ (функцию), которая будет возвращать информацию о плагине.. 
хотя и вариант, с регистрацией в ядре спецальной функции очень часто встречается, но его минус - невозможность получить информацию извне программы..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
xvr
Дата 12.9.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(fish9370 @  12.9.2011,  09:51 Найти цитируемый пост)
а что если, по стандартному методу?

Черевато  smile 

Цитата(fish9370 @  12.9.2011,  09:51 Найти цитируемый пост)
- открываем объектный модуль (so/dll) и 

и получаем SIGFAULT, после чего весь мэнэджер плагинов падает с грохотом  smile . Или просто получаем ошибку, при попытке загрузить so/dll (т.к. ей может не хватить других so/dll)

PM MAIL   Вверх
svlary
Дата 12.9.2011, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 8.9.2009

Репутация: 4
Всего: 4



Цитата(boostcoder @  9.9.2011,  21:44 Найти цитируемый пост)
получения информации об экспортируемых функциях

Может я не понял вопроса, но в линухе это делается так, к примеру :

Код

readelf -s libanl-2.12.2.so


За подробностями, естественно :

Код

man 1 readelf


PM MAIL   Вверх
xvr
Дата 12.9.2011, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(svlary @  12.9.2011,  14:41 Найти цитируемый пост)
Может я не понял вопроса, но в линухе это делается так, к примеру :

Список функций - да (еще можно objdump вспомнить). А вот параметры и тип возвращаемого значения, увы нет.

PM MAIL   Вверх
boostcoder
Дата 12.9.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(xvr @  12.9.2011,  14:43 Найти цитируемый пост)
А вот параметры и тип возвращаемого значения, увы нет.

а если поработать в направлении поиска операций со стеком? так, по идее, можно хотябы узнать размеры аргументов. еще бы возможность отличить значение от указателя..
PM WWW   Вверх
newbee
Дата 12.9.2011, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: нет
Всего: 19



Никаких стандартных способов получения этой информации нет. Нужно придумать универсальный плагинный интерфейс и по нему получать и список функций, и информацию о типах. Возможно будет намного проще в качестве аргументов экспортируемых функций использзовать только variant-ы, тогда информация о параметрах банально ограничится числом передаваемых параметров. Еще я поглядела твои темы, по-моему ты хочешь очень много динамики от статичного С++. Это конечно все можно сделать (и даже в виде патчей к компилятору, хе-хе), но семантически и синтаксически пользоваться и сопровождать, в т.ч. третьими лицами, это будет очень тяжело. Почему бы не воспользоваться более динамичными языками и вынести критические участки в с++?


--------------------
You're face to face
With man who sold the world
PM   Вверх
boostcoder
Дата 12.9.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(newbee @  12.9.2011,  15:39 Найти цитируемый пост)
Нужно придумать универсальный плагинный интерфейс

уже работаю в этом направлении.

Цитата(newbee @  12.9.2011,  15:39 Найти цитируемый пост)
использзовать только variant-ы

не-не-не smile 

Цитата(newbee @  12.9.2011,  15:39 Найти цитируемый пост)
ты хочешь очень много динамики от статичного С++

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

Цитата(newbee @  12.9.2011,  15:39 Найти цитируемый пост)
Еще я поглядела твои темы

наверное ты про эту тему? но так тема про добавление в с++ таких прелестей как reflection и introspection. а это невероятно восстребованно если знать как и для чего использовать. меня, с++ устраивает всем. но не устраивает отсутствием стандартной_сериализации, reflection и introspection smile 

Это сообщение отредактировал(а) boostcoder - 12.9.2011, 16:46
PM WWW   Вверх
borisbn
Дата 12.9.2011, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



представим, что у тебя есть информация о кол-ве и типах параметров. Что с этим делать в НЕскриптовом языке?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
fish9370
Дата 13.9.2011, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 2
Всего: 1



Цитата(xvr @  12.9.2011,  14:15 Найти цитируемый пост)
Черевато  


если это его собственные, то чем это чревато?


--------------------
undefined
PM MAIL WWW ICQ   Вверх
xvr
Дата 13.9.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(fish9370 @ 13.9.2011,  09:13)
Цитата(xvr @  12.9.2011,  14:15 Найти цитируемый пост)
Черевато  


то чем это чревато?

Я уже писал. При загрузке модуля (как dll так и so) начинает исполняться его стартап код (хотя dll можно загрузить не исполняя код, а вот с so не уверен). И что этот код сделает предсказать невозможно. Побочным эффектом может быть полное разрушение самой программы, которая его загрузила  smile 

Цитата

если это его собственные,
А если его собственные то и разбираться с экспортируемыми функциями смысла нет - его собственные модули должны подчиняться некоторому API приложения (по подключаемым модулям). Делать API в духе 'присоединяюсь к чему угодно' несколько опрометчиво, и самое главное - бессмысленно (любые функции можно передать через некоторое общее стандартное горло, не прибегая к расследованиям по мотивам имен и явок  smile )

PM MAIL   Вверх
fish9370
Дата 13.9.2011, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 2
Всего: 1



Цитата(xvr @  13.9.2011,  15:20 Найти цитируемый пост)
хотя dll можно загрузить не исполняя код, а вот с so не уверен


так сейчас не модно, но это вполне возможно..


Цитата(xvr @  13.9.2011,  15:20 Найти цитируемый пост)
А если его собственные то и разбираться с экспортируемыми функциями смысла нет


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


--------------------
undefined
PM MAIL WWW ICQ   Вверх
borisbn
Дата 13.9.2011, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



Народ, можете ответить: зачем это нужно (динамически получать кол-во и типы параметров) ???
ИМХО неважно, своя это длл-ка или чужая, т.к. без ассемблерных инъекций с этими данными делать нечего (если, конечно, это не питон или другой скриптовый язык). Разве что распечатать их... Просто для информации...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
fish9370
Дата 14.9.2011, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 2
Всего: 1



Цитата(borisbn @  13.9.2011,  16:46 Найти цитируемый пост)
можете ответить: зачем это нужно


прога растет, прога развивается, появляются новые версии плагинов.. думаю администратору, было бы полезно иметь инструмент который может точно определить подходит плагин к данной версии или нет.. это конечно можно сделать по номеру версии плагина, но это слишком категорично, бывает, что плагин не меняется на протяжении многих поколений программы, но бракуется как устаревший по версии..

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


--------------------
undefined
PM MAIL WWW ICQ   Вверх
borisbn
Дата 14.9.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: нет
Всего: 135



fish9370, ясно. Я доксиженом для этого пользуюсь smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
fish9370
Дата 14.9.2011, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: 2
Всего: 1



Цитата(borisbn @  14.9.2011,  09:47 Найти цитируемый пост)
ясно. Я доксиженом для этого пользуюсь


а я уже говорил, что doxygen мой любимый инструмент?  smile 

правда немного косячит, когда в одной папке есть несколько версий одного файла..


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.