Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Reverse класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создание и обработка матрицы http://www.cyberforum.ru/cpp-beginners/thread1062036.html
Здравствуйте, я начинающий в программировании и в С++ в частности, вот столкнулся с проблемой, мне надо задать матрицу, выделить все элементы над главной диагональю и из них выбрать наибольшие по...
C++ Необъявленный идентификатор addClientCommand( "m0d_tele_locations", (int)cmd_tele_locations ); addClientCommand( "m0d_teleport_locations", (int)cmd_tele_locations ); addClientCommand( "adminsonline", (int)cmd_admins ); ... http://www.cyberforum.ru/cpp-beginners/thread1061994.html
C++ Сформировать 3-ий массив, записать в него числа из 1-ого, которые отсутствуют во 2-ом
Даны 2 массива. Сформировать третий массив, записать в него числа из 1 массива, которые отсутствуют во 2. Задаю оба массива вручную, проверяю и передаю в 3. Исправьте код: for(int i=0;i<n;i++)...
Работа с динамическими строками C++
Все здравствуйте. Есть вот такое задание к нему программа. Среда разработки - VS 2005. Компиляция проходит без ошибок, однако после ввода строки возникает ошибка: The variable 'i' is being used...
C++ Упорядочить столбцы матрицы по возрастанию количества одинаковых элементов в каждом столбце http://www.cyberforum.ru/cpp-beginners/thread1061951.html
Дана целочисленная прямоугольная матрица. Упорядочить столбцы матрицы по возрастанию количества одинаковых элементов в каждом столбце. Что я могу сделать, так это матрицу заполняющуюся с...
C++ Что такое глобальные и локальные объекты класса? Что такое глобальние и локальные обекты класа. Напишыте пожалуста с примерами. подробнее

Показать сообщение отдельно
Brust
35 / 29 / 8
Регистрация: 16.07.2012
Сообщений: 68

Reverse класса - C++

03.01.2014, 08:32. Просмотров 337. Ответов 0
Метки (Все метки)

С новым годом друзья!

Реверсю один exe, больше половины востановил (благо написана она на Qt и сюдя по всему скомпилированна в том же компиляторе что и у меня, т.к декорирование импорта из dll_ок даже совпадает )
Но есть кусок проблемного для меня дизассемблерного кода в самом начале который я временно отбросил, но дальше без него уже никак:


Assembler
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
.text:0040C660 ; int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
.text:0040C660 _WinMain@16 proc near                   ; CODE XREF: ___tmainCRTStartup+13Bp
.text:0040C660
.text:0040C660 var_1D4C= dword ptr -1D4Ch
.text:0040C660 var_1D48= dword ptr -1D48h
.text:0040C660 var_1D44= byte ptr -1D44h
.text:0040C660 var_1D40= byte ptr -1D40h
.text:0040C660 var_1D3C= byte ptr -1D3Ch
.text:0040C660 var_1D38= dword ptr -1D38h
.text:0040C660 var_1D34= byte ptr -1D34h
.text:0040C660 var_1D2C= dword ptr -1D2Ch
.text:0040C660 var_1D28= byte ptr -1D28h
.text:0040C660 var_1D20= dword ptr -1D20h
.text:0040C660 var_1D1C= dword ptr -1D1Ch
.text:0040C660 var_1D18= dword ptr -1D18h
.text:0040C660 var_1D14= dword ptr -1D14h
.text:0040C660 var_1D10= byte ptr -1D10h
.text:0040C660 var_4= dword ptr -4
.text:0040C660 arg_0= dword ptr  8
.text:0040C660 arg_4= dword ptr  0Ch
.text:0040C660 arg_8= dword ptr  10h
.text:0040C660 arg_C= dword ptr  14h
.text:0040C660
.text:0040C660 push    ebp
.text:0040C661 mov     ebp, esp
.text:0040C663 and     esp, 0FFFFFFF8h
.text:0040C666 mov     eax, 1D4Ch
.text:0040C66B call    __alloca_probe
.text:0040C670 mov     eax, ___security_cookie
.text:0040C675 xor     eax, esp
.text:0040C677 mov     [esp+1D4Ch+var_4], eax
.text:0040C67E mov     ecx, [ebp+arg_4]
.text:0040C681 mov     eax, [ebp+arg_0]
.text:0040C684 push    ebx
.text:0040C685 push    esi
.text:0040C686 mov     esi, [ebp+arg_8]
.text:0040C689 mov     [esp+1D54h+var_1D1C], ecx
.text:0040C68D mov     ecx, ds:?excp@@3VEXCEPTION_HANDLER@@A ; EXCEPTION_HANDLER excp ; core.dll 
.text:0040C693 push    edi
.text:0040C694 mov     [esp+1D58h+var_1D20], eax
.text:0040C698 mov     [esp+1D58h+var_1D38], esi
.text:0040C69C call    ds:?setdefaulttrap@EXCEPTION_HANDLER@@QAEXXZ ; EXCEPTION_HANDLER::setdefaulttrap(void)
.text:0040C6A2 call    sub_424C40
.text:0040C6A7 push    8                               ; unsigned int
.text:0040C6A9 mov     [esp+1D5Ch+var_1D18], offset aName; "Pro"
.text:0040C6B1 mov     [esp+1D5Ch+var_1D14], esi
.text:0040C6B5 mov     [esp+1D5Ch+var_1D2C], 2
.text:0040C6BD call    ??2@YAPAXI@Z                    ; operator new(uint)
.text:0040C6C2 mov     esi, eax
.text:0040C6C4 add     esp, 4
.text:0040C6C7 test    esi, esi
.text:0040C6C9 jz      short loc_40C6E8
.text:0040C6CB push    1040804h
.text:0040C6D0 lea     edx, [esp+1D5Ch+var_1D18]
.text:0040C6D4 push    edx
.text:0040C6D5 lea     eax, [esp+1D60h+var_1D2C]
.text:0040C6D9 push    eax
.text:0040C6DA mov     ecx, esi
.text:0040C6DC call    ds:??0QApplication@@QAE@AAHPAPADH@Z ; QApplication::QApplication(int &,char * *,int)

Конкретно для меня не ясна строка инициализации класса EXCEPTION_HANDLER::
Assembler
1
mov     ecx, ds:?excp@@3VEXCEPTION_HANDLER@@A ; EXCEPTION_HANDLER excp
.
Как может выглядеть его объявление в экспорте dll и инициализация на C++, чтобы заставить компилятор сгенерировать тоже самое?

Добавлено через 9 часов 46 минут
Мда, надо больше спать..
Оказалось все проще чем я думал
С утричка только понял что в дизасме так выглядит импорт экземляра класса из dll,
объявленный как:

C++
1
2
3
4
5
class DLL_EXPORT EXCEPTION_HANDLER {
public:
     void setdefaulttrap(void);
 };
EXCEPTION_HANDLER excp;
А при импорте инициализируется просто вызовом метода
C++
1
excp.setdefaulttrap();
P.S. Декомпилятор в IDA - ЗЛО! хотя я и раньше это знал, но в очередной раз убедился
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru