Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.03.2012, 15:35
_dss _dss вне форума
Прохожий
 
Регистрация: 29.03.2009
Сообщения: 4
Репутация: 10
По умолчанию Странные имена экспортируемых функций

Добрый день! Кто может подсказать, почему, когда я подгружаю стороннюю длл написанную на с++ и получаю полный список экспорта этой длл, я вижу не функцию, к примеру, _Activate, а нечто вроде ?@@_Activate...(дословно не скажу, всё дома осталось) и ещё много других символов. Я знаю только, что это определяется при компиляции длл, но с какой целью? И как сконвертировать такое имя функции к нормальному виду? Укажите, пожалуйста, где прочитать. И если найдётся кусок кода для изучения, буду премного благодарен. Кстати, тот же PE Explorer показал не только нормальные имена функций, но и их прототипы. Умеет же как-то.

Задача - найти в длл несколько функций с определёнными именами и получить их RV-адреса.

1. Подгружаю длл и получаю список экспорта (за основу взял великолепный код от Rouse_)
2. Заношу все получаемые функции в список строк
3. В списке ищу соответствие.
4. Если соответствие найдено - получаю адрес вызовом GetProcAddress

П.3 валится из-за несоответствия имён что у меня и что нашла процедура.

Заранее спасибо за любую помощь!
Ответить с цитированием
  #2  
Старый 04.03.2012, 16:30
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

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


Цитата:
1. Подгружаю длл и получаю список экспорта (за основу взял великолепный код от Rouse_)
2. Заношу все получаемые функции в список строк
3. В списке ищу соответствие.
4. Если соответствие найдено - получаю адрес вызовом GetProcAddress

А зачем искать соответствие? Если такой функции нет, то GetProcAddress вернет NULL, так в мсдн написано
Ответить с цитированием
  #3  
Старый 04.03.2012, 16:44
_dss _dss вне форума
Прохожий
 
Регистрация: 29.03.2009
Сообщения: 4
Репутация: 10
По умолчанию

Прежде всего, спасибо за помощь!

Цитата:
Сообщение от ChinYan
А зачем искать соответствие? Если такой функции нет, то GetProcAddress вернет NULL, так в мсдн написано

В том-то и дело, что не выходит. Смотри, нужная мне функция имеет имя, положим, _pNetGet, я так понял, это класс (заголовочного файла у меня нет, dll не имеет документации к себе). Я делаю GetProcAddress с параметром 'имя_функции'. Но GetProcAddress ничего не находит, ибо в экспорте они лежат "замангленные" (даже узнал как называется). Соответственно, GetProcAddress не может найти функцию, название которой искажено (ошибка "Не найдена функция").

У меня есть программа для получения экспорта из dll, писал когда-то. Она корректно воспринимает имена функций, т.е. без этого мусора, прочие снифферы делают либо также, либо искажают имена. В связи с этим вопрос: должна ли в данном конкретном случае GetProcAddress корректно находить функцию по "нормальному" имени?
Ответить с цитированием
  #4  
Старый 04.03.2012, 17:30
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

По корректному имени должна
Ответить с цитированием
Этот пользователь сказал Спасибо ChinYan за это полезное сообщение:
_dss (04.03.2012)
  #5  
Старый 04.03.2012, 17:39
_dss _dss вне форума
Прохожий
 
Регистрация: 29.03.2009
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от ChinYan
По корректному имени должна
Ясно, спасибо тебе за помощь! Буду искать ошибки у себя. Если что, отпишу.
Ответить с цитированием
  #6  
Старый 04.03.2012, 17:59
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Пришлите свою dll, мне тоже интересно посмотреть =)
Ответить с цитированием
  #7  
Старый 04.03.2012, 18:25
_dss _dss вне форума
Прохожий
 
Регистрация: 29.03.2009
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от ChinYan
Пришлите свою dll, мне тоже интересно посмотреть =)
Если не против, стукну в аську
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025