Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Простой вопрос по IDA. Анализ функции
Посл.ответ Сообщение

Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 ноября 2007 19:30
· Личное сообщение · #1

Вот пример двух функций импортируемых в екзешник из некоторой библиотеки (в окне IDA-View-A):
.idata:005F1660 ; public: bool __thiscall CClientMsgRecord::GetClientMsgSid(char *)
.idata:005F1660 extrn ?GetClientMsgSid@CClientMsgRecord@@QAE_NPAD@Z:dword
.idata:005F1660 ; CODE XREF: sub_52B190+138p
.idata:005F1660 ; DATA XREF: sub_52B190+138r
.idata:005F1664 ; public: bool __thiscall CClientMsgRecord::GetClientMsgTime(char *)
.idata:005F1664 extrn ?GetClientMsgTime@CClientMsgRecord@@QAE_NPAD@Z:dword
.idata:005F1664 ; CODE XREF: sub_52B190+155p
.idata:005F1664 ; DATA XREF: sub_52B190+155r


Подскажите пожалуйста, что можно сказать о этих функциях из приведенного выше кода?
Входные данные только char*?
Выходные bool?
Правильно ли я понимаю, что процедуры принадлежат классу CClientMsgRecord?

Что означает следующая строчка?
extrn ?GetClientMsgTime@CClientMsgRecord@@QAE_NPAD@Z:dword

То что значение функции (bool) возвращается в виде dword? то есть 32битным?

Многовато вопросов наверно =) Зато простые.
Заранее спасибо за ответ!

P.S. Что означает Code XRef и Data XRef?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 28 ноября 2007 21:20 · Поправил: s0larian
· Личное сообщение · #2

C++ прототип:
public:
bool __thiscall CClientMsgRecord::GetClientMsgSid(char *)

Реальное имя в экспорте (из-зи name mangling/decoration):
extrn ?GetClientMsgSid@CClientMsgRecord@@QAE_NPAD@Z:dword

вторая форма это ASCII имя с закодированными аргументами. Это и есть name mangling.

Функия является методом С++ класса. sizeof(boo) == sizeof(dword) == 4




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 28 ноября 2007 21:21
· Личное сообщение · #3

s0larian пишет:
P.S. Что означает Code XRef и Data XRef?

cross-references - сцилки



Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 28 ноября 2007 22:17
· Личное сообщение · #4

Правильно ли я понимаю, что раз експортируется функция CClientMsgRecord::GetClientMsgSid(char *), то библиотека является MFC EXTENSION DLL?

То есть экспортируется целый класс.
Как вообще можно узнать extension dll или простая?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 29 ноября 2007 00:18
· Личное сообщение · #5

shob_vas посмотри используется ли MFC. Гугл рулит - прервая сцилка:
msdn2.microsoft.com/en-us/library/h5f7ck28(vs.80).aspx

CClientMsgRecord не является частью MFC. Ты что, основываешься на "С" префиксе в имени?



Ранг: 11.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 29 ноября 2007 10:07
· Личное сообщение · #6

Не знаю, вполне возможно что я заблуждаюсь, но я читал что библиотеки под mfc бывают двух типов:
1) MFC extension .DLL
2) Regular DLL

В extension dll есть возможность экспорта целых классов.
В regular dll нет такой возможности.
Вот я и спрашиваю. Если IDA определил функцию как CClientMsgRecord::GetClientMsgSid(char *), значит ли это что экспортирован весь класс CClientMsgRecord?

Если нет, то как определить с какой библиотекой я имею дело (extension или regular)?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 29 ноября 2007 21:01
· Личное сообщение · #7

shob_vas пишет:
как определить с какой библиотекой я имею дело (extension или regular)?

песец, я ж тебе кинул сцилку - нам описаны все признаки/возможности MFC dll. Проверь их.

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


 eXeL@B —› Вопросы новичков —› Простой вопрос по IDA. Анализ функции
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати