Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/46: Рейтинг темы: голосов - 46, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 33

Просмотр функций dll

13.11.2012, 11:47. Показов 9675. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как посмотреть весь список функций и их параметров в dll???

Добавлено через 32 минуты
при динамическом подключении dll из темы DLL, ошибка Cannot convert 'char *' to 'char'
выводит ShowMessage("Невозможно найти функцию getFloatValues");
хотя знаю, что название функции написано правильно. В чем еще может быть причина?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2012, 11:47
Ответы с готовыми решениями:

Использование функций из DLL
Всем привет! В С++ я новичек, долго пытался разобраться, но, видимо, без помощи никак. Иммется DLLка (для работы с оборудованием и...

Использование функций из других .dll
Всем добрый вечер. Ребята такая просьба у меня есть дллка написанная на дельфи. Как мне ее подключить и использовать оттуда функции? На...

Как узнать список функций dll библиотеки?
как узнать список функций dll библиотеки? Возможно ли ето в класическом с++?

42
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 33
14.11.2012, 13:04  [ТС]
Студворк — интернет-сервис помощи студентам
всем спасибо за помощь, dll работает!!!

Добавлено через 3 часа 29 минут
вот такой вопрос, если при нажатии одной кнопки я динамически загрузил dll, использовал нужную функцию, выгрузил функцию. В другой кнопке я вызываю другую функцию из этой dll, то мне опять писать весь этот же алгоритм???
0
14.11.2012, 13:18

Не по теме:

builderf, хоть выложил бы код кнопки. Подытожил бы топик для будущих поколений.

0
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 33
14.11.2012, 13:56  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void __fastcall TMainForm::Button3Click(TObject *Sender)
{
 
 InfoForm->InfoMemo->Clear();
 OID1=StrToInt(Edit2->Text);
 StatusBar1->SimpleText="Чтение регистра";
//dll чтение
const char * bibl =  (Edit5->Text+".DLL").c_str() ;
   void (*Message) (char const *,unsigned short,unsigned short,float *) ;
 
     HINSTANCE dllp = LoadLibrary(bibl);
    if (dllp) {
      const char * lpProcName = "?getFloatValues@@YAHPBDGGPAM@Z";
      char *T1 = "MPU";
      float nResult;
      Message = (void(*)(char const *,unsigned short,unsigned short,float *))
        GetProcAddress(dllp,lpProcName) ;
      if (Message) {
      Message(T1,OID1,1,EthernetBuffer);
      nResult = EthernetBuffer[0];
      }
      else ShowMessage("Невозможно найти функцию");
      Edit4->Text = FloatToStrF(nResult,ffFixed,5,3);
 
    }
    else ShowMessage("Невозможно подключить dll");
   FreeLibrary(dllp);
//end  dll
}
моя кнопка под первый вызов функции

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

Добавлено через 31 минуту
Вообщем разобрался, все работает, окончательный вариант, мб кому-то понадобится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void __fastcall TMainForm::Button3Click(TObject *Sender)
{
 
 InfoForm->InfoMemo->Clear();
 OID1=StrToInt(Edit2->Text);
 StatusBar1->SimpleText="Чтение регистра";
//dll чтение
const char * bibl =  "MPUBComm.dll";
   void (*Message) (char const *,unsigned short,unsigned short,float *) ;
 
     HINSTANCE dllp = LoadLibrary(bibl);
    if (dllp) {
      const char * lpProcName = "?getFloatValues@@YAHPBDGGPAM@Z";
      char *T1 = "MPU";
      float nResult;
      Message = (void(*)(char const *,unsigned short,unsigned short,float *))
        GetProcAddress(dllp,lpProcName) ;
      if (Message) {
      Message(T1,OID1,1,EthernetBuffer);
      nResult = EthernetBuffer[0];
      }
      else ShowMessage("Невозможно найти функцию");
      Edit4->Text = FloatToStrF(nResult,ffFixed,5,3);
 
    }
    else ShowMessage("Невозможно подключить dll");
   FreeLibrary(dllp);
//end  dll
}
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.11.2012, 03:41
Цитата Сообщение от builderf Посмотреть сообщение
В другой кнопке я вызываю другую функцию из этой dll, то мне опять писать весь этот же алгоритм???
В общем скачал dll-ку подправленную _lucius_ https://www.cyberforum.ru/post3692454.html
( далее см инфу из моего блога https://www.cyberforum.ru/blog... og478.html )

Создал h- файл по данным о сигнатуре ф-ций полученных PEExplorer
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef MPUBCommH
#define MPUBCommH
//---------------------------------------------------------------------------
//  [url]https://www.cyberforum.ru/cpp-builder/thread696209.html[/url]
//---------------------------------------------------------------------------
#define DLL_SPEC extern "C" __declspec(dllimport)
 
DLL_SPEC int __cdecl getFloatValues(char const *,unsigned short,unsigned short,float *);
DLL_SPEC int __cdecl getIntValues(char const *,unsigned short,unsigned short,int *);
DLL_SPEC int __cdecl setFloatValues(char const *,unsigned short,unsigned short,float *);
DLL_SPEC int __cdecl setIntValues(char const *,unsigned short,unsigned short,int *);
DLL_SPEC int __cdecl testTheDLL1(void);
DLL_SPEC int __cdecl testTheDLL2(unsigned short,unsigned short);
//---------------------------------------------------------------------------
#endif
Создал def -файл



И подправил его под соглашение __cdecl для Builder-а ( см http://www.rsdn.ru/article/devtools/bcbdll.xml )

Code
1
2
3
4
5
6
7
8
9
LIBRARY     MPUBCOMM.DLL
 
EXPORTS
    _getFloatValues=getFloatValues  @1   ; getFloatValues
    _getIntValues=getIntValues       @2   ; getIntValues
    _setFloatValues=setFloatValues  @3   ; setFloatValues
    _setIntValues=setIntValues        @4   ; setIntValues
    _testTheDLL1=testTheDLL1        @5   ; testTheDLL1
    _testTheDLL2=testTheDLL2        @6   ; testTheDLL2
Создал lib-файл с помощью утилиты из VC++ 2010




lib и h подключил к проекту

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//----------------------------------
#include "MPUBComm.h"
#pragma comment(lib,"MPUBComm-bcb.lib")
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
const char SERVERADDR[] = "127.0.0.1";
 
float A[50];
int OID1=0;
 
getFloatValues(SERVERADDR,OID1,1,A);
}
//---------------------------------------------------------------------------
Вложения
Тип файла: rar MPUBComm.rar (1.99 Мб, 10 просмотров)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.11.2012, 03:52
Цитата Сообщение от Avazart Посмотреть сообщение
Создал lib-файл с помощью утилиты из VC++ 2010
Поправочка implib.exe из Builder, а не с VC++ 2010 ( перепутал с утилитой lib.exe )

_lucius_, у меня такой вопрос чем вы подправляли имена ф-ций в dll ?

Добавлено через 3 минуты
Чем можно подправлять это
Декодирование имён экспортируемых функций
Возвращение осмысленного вида декорированным именам

Библиотеки DLL, написанные на C++, часто экспортируют функции с совершенно нечитабельными, так называемыми decorated ("декорированными") именами. Иногда эти имена ещё называют mangled - т.е. "искажённые" или "испорченные".

Происходит это из-за того, что язык C++ позволяет программисту давать разным объектам одинаковые имена. В результате компоновщик генерирует странно выглядящие, но зато уникальные внешние имена функций, в которых закодирована информация о типах принимаемых и возвращаемых переменных.

Таким образом, "декорация" имён гарантирует, что внешние имена функций не будут совпадать и будут содержать только допустимые алфавитно-числовые символы.
Декодирование mangled имён функций

Декодирование mangled имён и возвращение им осмысленного вида затрудняется тем, что разные компиляторы используют разные схемы кодировки для генерирования внешних имён. Например, при компилировании функции:

C++
1
char * istrstream::str(void)
Компиляторы C++ от Microsoft кодируют её как:

Code
1
?str@istrstream@@QAEPADXZ
а компиляторы C++ от Borland кодируют её как:

Code
1
@std@istrstream@str$qv

PE Explorer поддерживает обе схемы декодирования внешних имён и приводит к удобочитаемому виду имена экспортируемых функций из DLL, созданных компиляторами C++ как от Microsoft, так и от Borland.
http://www.heaventools.ru/pe-explorer-unmangle.htm
1
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 06:07
Цитата Сообщение от Avazart Посмотреть сообщение
_lucius_, у меня такой вопрос чем вы подправляли имена ф-ций в dll ?
Hiew32 использовал.
Миниатюры
Просмотр функций dll   Просмотр функций dll  
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.11.2012, 06:11
Ну так это вроде обычный HЕX- редактор ?

А как править ?
Стирать "лишние символы" или ставить вместо них NULL-символ ?
0
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 06:21
Ну не совсем обычный. Он ведь хидер PE'шнику проанализировал. На первом скриншоте выбираю указатель на таблицу экспорта и перехажу туда. Ну и там уже не вникая имена легко найти, таблица экспорта не большая.
Цитата Сообщение от Avazart Посмотреть сообщение
Стирать "лишние символы" или ставить вместо них NULL-символ ?
Там ещё вопрос первым идет. Т.е. нужно передвинуть имя на позицию влево, затем мусор затереть нулями (можно один ноль поставить обозначив терминацию).
Цитата Сообщение от Avazart Посмотреть сообщение
Компиляторы C++ от Microsoft кодируют её как:
Код Code
1 ?str@istrstream@@QAEPADXZ
а компиляторы C++ от Borland кодируют её как:
Код Code
1 @std@istrstream@str$qv
Исходя из этого можно запросто утилитку написать которая будет имена править. Делов минут на 40. Ведь вручную не очень удобно патчить. Таблица может большой оказаться.
1
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 06:29
Вот пример правки:
Миниатюры
Просмотр функций dll  
1
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 08:07
Написал утилиту для правки имен, вот такого типа: ?str@istrstream@@QAEPADXZ
При запуске откроется диалоговое окно, в нём выбрать dll файл. Бэкап файлов не создается, так что на всякий случай dll'ку нужно сохранять самому. Исходник прилогается.
Вложения
Тип файла: zip MdNm.zip (2.0 Кб, 14 просмотров)
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.11.2012, 10:07
_lucius_, меня, откровенно говоря, умиляет такая хакерская отвага в деле приватизации чужих библиотек. И я не говорю даже о правовой стороне вопроса (тема копирайтов меня мало волнует), но ведь возможен вариант, когда третьестороннее или системное приложение использует эту же библиотеку. Ну хорошо, если по их числовым идентификаторам, а если по имени?
0
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 10:57
Цитата Сообщение от nick42 Посмотреть сообщение
но ведь возможен вариант, когда третьестороннее или системное приложение использует эту же библиотеку. Ну хорошо, если по их числовым идентификаторам, а если по имени?
Можно либу с поправленными именами у себя в директории разместить.

Добавлено через 24 минуты
Ну или как вариант расширить таблицу экспорта. Т.е. оставить старые и добавить новые имена.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.11.2012, 11:08
- просто добавить имена - недостаточно; они должны соответствовать (адресами) первородной функции. Ну, и стоит ли такая овчинка выделки? Нет, конечно с эстетической точки зрения я вас поддерживаю, но только с этой точки... .
Конечно, если длл небольшая, в системном окружении отсутствует, а вашей программе необходима, то можно ее таким образом "облагородить", даже переименовать, поместить в ресурс своего приложения и пользоваться... . Но придется забыть значение слова Copyright.
0
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
15.11.2012, 11:58
Цитата Сообщение от nick42 Посмотреть сообщение
Ну, и стоит ли такая овчинка выделки?
Не так уж сложно это сделать. Хоть и данные находятся выше по адресам, но ведь dll содержит релоки, т.е. мы можем после того как пересобрали таблицу экспорта (если пришлось сдвигать то что выше по адресу после неё) пройтись по таблицы релоков и пропатчить код ну и хидер пересобрать. Ну или более ленивый вариант создать секцию в конце и там новую таблицу экспорта собрать. Но тогда наша dll станет не совсем стандарной (ав заматерятся).

Цитата Сообщение от nick42 Посмотреть сообщение
Но придется забыть значение слова Copyright.
Вообще я и не думал чей-то копирайт нарушать. Мало ли напишу модуль на С++ и захочу из асма его юзать, а там такая абракодабра. =)
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.11.2012, 18:15
- просто добавить имена - недостаточно; они должны соответствовать (адресами) первородной функции. Ну, и стоит ли такая овчинка выделки? Нет, конечно с эстетической точки зрения я вас поддерживаю, но только с этой точки... .
Конечно, если длл небольшая, в системном окружении отсутствует, а вашей программе необходима, то можно ее таким образом "облагородить", даже переименовать, поместить в ресурс своего приложения и пользоваться... . Но придется забыть значение слова Copyright.
Ну просто изначальную либу к примеру мне статически прилинковать не удалось... вот тебе и применение...
0
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 33
19.11.2012, 15:17  [ТС]
эко вы разошлись
0
 Аватар для Ex_Soft
213 / 107 / 15
Регистрация: 28.01.2009
Сообщений: 481
19.11.2012, 18:48
Цитата Сообщение от builderf Посмотреть сообщение
что за символы в name кроме getfloatvalues???
Name mangling
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
19.11.2012, 18:53
Чет у меня так и не получилось выйти на менюшку в экспортом в Hiew32...

Неужели нет аналогичных программ по новее?
0
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
19.11.2012, 21:18
Avazart,

Перейти на RVA таблицы экспорта:
F4 -> HEX -> F8 -> F10 -> Export
Посмотреть список экспортируемых функций:
F4 -> HEX -> F8 -> F9
Редактирование:
F3 -> (редактируем) -> (F9 - сохранение изменений, Esc - отмена)
1
 Аватар для _lucius_
391 / 179 / 2
Регистрация: 14.03.2012
Сообщений: 443
19.11.2012, 21:27
Цитата Сообщение от Avazart Посмотреть сообщение
Неужели нет аналогичных программ по новее?
Есть. CFF Explorer, там просто двойной клик по имени функции, далее сохранение через меню. Я только щас узнал, что он так умеет.
Миниатюры
Просмотр функций dll  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2012, 21:27

Список функций из стандартных dll библиотек (lib.exe MVS)
В общем нужен список функций (желательно и хедеров, в которых они находятся) исходя из имени стандартной библиотеки dll. Наткнулся в...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями?
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

Использование функций DLL из другой DLL
Ребята подскажите имеется hscli.DLL hscli.LIB и hscli.H , собираю свою DLL-ку , которая использует функции hscli.DLL мои...

Просмотр кода в DLL-файлах
возможно ли с помощью каких-нибудь программ посмотреть DLL-файлы и извлечь оттуда исходный код на C# ?

Убрать из $watch() просмотр функций
Добрый день. У меня есть массив объектов. Некоторые из свойств этого объекта - это функции, которые возвращают значения на основе данных...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru