Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
1

Список параметров функции из DLL

01.02.2016, 04:10. Показов 2711. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В runtime загружаю DLL'ки, вывожу список функций содержащийся в них, но так и не нашёл вариантов как экспортировать типы аргументов и возвратного значения.. Пару статей указали на то, что если создатели библиотеки использовали стандарт (name mangeling?), то можно экпортировать, но если нет - то фиг вам)
Так вот если нельзя, то можно может хотя бы размер бит-аргументов узнать? (т.е. общий размер, например в какой то функции под названием GetParent, допустим 4 аргумента, все они int_32, т.е. 4х4байт=32, а return там bool - 1 байт, т.е. в сумме 33 байта. (вот это число 33 байта можно ли как нибудь вытащить?)

Вообще конешно в идеале хотелось бы вытащить полностью инфу (конкретные типы), может есть пример как это делается если dll'ка помечена создателем Microsoft? (т.е. предполагаю что у них то всё по стандарту)

И ещё один под вопрос, где взять документацию по всей библиотеке (например user32.dll), т.е. все функции, все параметры, возможно описания, ещё какие то плюшки.. Руками перебирать сайт MSDN не хочется, может есть что то уже скомпанованное?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2016, 04:10
Ответы с готовыми решениями:

Список формальных параметров в функции
Не понимаю цель формальных параметров. Зачем, например, вводить (int a, int b) в функции int...

Список параметров для функции Format!
всем привет. я уже, *№?"%, себе мозг сломал, не пойму, в чем дело! итак: есть код. который...

Как понять список формальных параметров функции Bar?
class Foo { void friend Bar(Foo & foo); private: int data;

Как сделать список возможных параметров для своей функции
Как при создании пользовательской функции средствами VBA в екселе задать параметр фунции с...

4
50 / 49 / 10
Регистрация: 24.01.2010
Сообщений: 225
04.02.2016, 15:51 2
В наш век инета - быстрее через него.
Но если инфы совсем ёк - то глазками, больше никак.
Т.е. либо аида наша всё(декомпиляция), либо тупо вызываете функцию(благо имя самой функции найти можно и соглашение по очистке стэка) ну а далее смотреть, что юзается с приходящего стэка и ресгистров в самой функции. Дело долгое, муторное и требует внимательности.

(круглый)
0
127 / 126 / 59
Регистрация: 22.01.2014
Сообщений: 462
02.04.2016, 15:56 3
Цитата Сообщение от Izual Посмотреть сообщение
допустим 4 аргумента, все они int_32, т.е. 4х4байт=32, а return там bool - 1 байт, т.е. в сумме 33 байта
Это значит, в стэк передается четыре аргумента int32_t , а результат в регистре EAX (тип вызова stdcall,cdecl).
Для незадокументированных dll можно диассемблировать и посмотреть аргумент return. По этому значению можно угадать сколько у функции аргументов в DWORD. Но это грубое упрощение, в расчете на то, что в функции стандартный предсказуемый эпилог. Иначе надо будет учитывать другие инструкции.
Что касается стандартных dll.
Можно просмотреть загловочные файлы из-под установленного Masm-а.
Например: Masm/include/user32.inc.
Но это дает данные о том, сколько параметров у функции, и есть ли результат.
Для просмотра, какие параметры у функции придется смотреть справку WinAPI.
У меня она старая 17 Мб занимает(English), а 2 Гб справки устанавливать на компьютер не интересно.
Можно просматривать заголовочные файлы.
Можно даже хитрее сделать: Написать скрипт, который бы получал по DLL список экспортируемых функции(dumpbin,pexports в помощь), и пытался найти их определения в папке include С/С++ компилятора.
Что-то вроде:
Bash
1
2
3
4
5
6
pexports user32.dll >user32.def
echo "Function List:"> user32.lst
for n in `cat user32.def`;
do
    fgrep -r $n c:/Pograms/MinGW/Include >> user32.lst
done
0
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
02.04.2016, 16:15  [ТС] 4
Ну я решил сделать так:
1. Из Длл выгрузить имена функций.
2. Поставил MSDN 2008, написал парсер для него, на ночь поставил - получил более 90% полноценных файлов описывающих функции. (тут и аргументы, и типы, и описания)
3. Ну и тоскать все эти файлы с собой.. По другому всё равно не сделать, т.к. даже с учётом что можно как то вытащить хотя бы аргументы, то описание всё равно нужно будет. (по крайней мере в будующем)

Конешно косяк будет, если например ДЛЛка левая или ещё что то подобное случится, именно по этому и хотелось хотя бы кол-во байт узнать (в run-time), чтоб уменьшить вероятность краша перед использованием.
0
127 / 126 / 59
Регистрация: 22.01.2014
Сообщений: 462
02.04.2016, 17:19 5
Можно получить количество байт на параметры с помощью исследавания lib файлов. Дело в том, что имена функций в либ файлах отличаются от тех имен, которые прописаны на экспорт в dll.
Пример:
Bash
1
objdump -t libuser32.a | tail
[ 2](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 0) 0x00000000 .bss
[ 3](sec 4)(fl 0x00)(ty 0)(scl 3) (nx 0) 0x00000000 .idata$7
[ 4](sec 5)(fl 0x00)(ty 0)(scl 3) (nx 0) 0x00000000 .idata$5
[ 5](sec 6)(fl 0x00)(ty 0)(scl 3) (nx 0) 0x00000000 .idata$4
[ 6](sec 7)(fl 0x00)(ty 0)(scl 3) (nx 0) 0x00000000 .idata$6
[ 7](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 _ActivateKeyboardLayout@8
[ 8](sec 5)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __imp__ActivateKeyboardLayout@8
[ 9](sec 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __head_libuser32_a
Да, lib файлы из-под mingw можно открыть с помощью 7z(Кстати lib файлы MSVC тоже). Это будет выглядеть как архив, в корне которого 1.txt содержит список функций.
Так вот, в декорации объектного имени и содержится "@8". Это как я понимаю и есть количество байт по параметры для stdcall. И только для stdcall, cdecl функции в таком "@" не нуждается, так как в функциях cdecl могут быть переменное количество параметров.
1
02.04.2016, 17:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2016, 17:19
Помогаю со студенческими работами здесь

Передача параметров через список параметров формы
Hi all! У кого есть опыт передачи параметров через заголовочный список параметров формы? ...

Добавление своей dll в список dll подгружаемых процессом чужого процесса
Вообще вопрос такой,как можно внедрить свою dll в список Import чужого не запущенного процесса?Не...

Количество параметров и возвращаемых параметров у функции
Преподаватель составил такой вопрос: "Количество параметров и возвращаемых параметров у функции"...

передача параметров dll fasm
Если у кого есть пример дайте плз. Проблема такая: как передать параметры в длл на фасме и из нее в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru