![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.05.2011
Сообщений: 99
|
![]()
Всем доброго времени суток!
Есть exe-файл, если смотреть его через DependencyWalker, видно несколько дллок с экспортируемыми функциями(скрин ниже). Так вот... Пишу свою программу, которая будет использовать функции из этой дллки. Надо грамотно составить header и код.. Пожалуйста, сделайте это на примере одной функции. Перечитал в инете не мало статей, но не понял, как надо экспортировать функции. Из того, что попытался навалять сам. + вылетает ошибка GetTextWrapper:could... из-за того, что PDD.dll начинает выполнятся, можно ли как-то загрузить библиотеку так, чтобы она не выполнялась? Код:
Код:
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
Это смахивает на Depends.exe - если так, то попробуйте View / Undecorate C++ functions.
Если не поможет тофда надо будет рыться и понять а) какой компилятор был использован и б) как работает mangling у этого компилятора. В итоге вы получите список функций с их аргументами. Беда в том, что НЕ получите размер классов (если там есть классы). |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 28.05.2011
Сообщений: 99
|
![]() Цитата:
Я попросил пример кода, использования тех функций, которые на скрине. Это одни и те же просто со включенной/выключенной опцией View/Undecorate C++ Functions.
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
|
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
Значит надо искать компилятор, чтоб потом смотреть mangling имен. Тогда можно будет восстановить аргументы, иначе никак...
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 28.05.2011
Сообщений: 99
|
![]()
Если посмотреть на скрины(верхние), то можно увидеть, что аргументы, нужные для вызова тоже видны. Черт возьми, просто пример вызова можно показать? Аргументы и т.д. сам подставить, наверное, смогу. И! Второй вопрос в этой теме: "Можно ли как-то загрузить библиотеку, чтобы её код не выполнялся?" То есть, там есть некая точка входа, с которой выполняется код, а его выполнение не нужно.
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
но там ООП, это еще хуже. ТС вам нужна та же версия компилятора для применения. так же вам нужно восстановить описание класса, для его корректного применения(хотя и можно извратится через указатели, но это маразм наверно) если нет такой важности, я бы забил, не столь там все просто Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 28.05.2011
Сообщений: 99
|
![]() Цитата:
Так? а использовать методы из класса надо допустим: CarManager или ?%25q5233r2CarManager53@$24 ?
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
|
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
суть в том что если вы хотите применить классы как они есть у себя, без костылей.
вам нужен тот же компилятор что был применен для длл(причем еще и версия лучше чтоб похожа была). и потом полностью воссоздать описание класса. костыли заключаются в том что вам придется забив на ООП работать с функциями по прямым указателям, вручную имитируя нужное окружения вызова(thiscall) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 28.05.2011
Сообщений: 99
|
![]() Цитата:
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
|
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]() Цитата:
А так - легче сего воспользоваться GetProcessAddress() и заполнить таблицу адресов. Кроме того, можете создать *свой* DLL, с нужными именами методов а в DEF файле указать forwarding - имя функции и имя функции в *другом* DLL модуле. Можете почитать об этом здесь: http://blogs.msdn.com/b/oldnewthing/...19/671238.aspx Последний раз редактировалось waleri; 08.08.2013 в 09:36. |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пример использования многомерного массива | Ципихович Эндрю | JavaScript, Ajax | 3 | 15.10.2011 15:31 |
Компонент без исходников | lisiserg | Общие вопросы Delphi | 7 | 09.09.2010 09:20 |
Простой пример использования TDrawGrid | bookkc | Помощь студентам | 1 | 17.03.2010 15:51 |
Нужнен пример использования dll | bookkc | Общие вопросы Delphi | 0 | 13.02.2010 13:37 |
Доработка программы без исходников. | indigov | Фриланс | 4 | 18.11.2009 16:08 |