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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Brust
35 / 29 / 8
Регистрация: 16.07.2012
Сообщений: 68
#1

Reverse класса - C++

03.01.2014, 08:32. Просмотров 328. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 08:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Reverse класса (C++):

Reverse - C++
#include <iostream> #include <string.h> void reverse(char* s, size_t len); int main() { char test1 =...

Функция - Reverse(s). - C++
Помогите, нужен пример Функция - Reverse(s). Назначение - изменение порядка символов в строке s на противоположный.

reverse string'a - C++
Помогите с задачей. Нужно реверсировать первый элемент со вторым, третий с четвертым и т.д что у меня не так? #include <iostream> ...

Reverse для части массива - C++
Всем привет! Возник вопрос: как произвести операцию reverse только для части массива? Например, от второго элемента до пятого.

Recursion and pointers. Array in reverse order - C++
Задача: Suppose that intArray is an array of integers, and length specifies the number of elements in intArray. Also, suppose that low...

Развернуть участок массива с помощью reverse - C++
Здравствуйте! Нужно использовать функцию "reverse". Знаю только вариант: reverse(a, a + n) Но это переворачивает весь массив, а мне...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2014, 08:32
Привет! Вот еще темы с ответами:

Никак не могу запустить reverse приложение c++ - C++
Нашёл такое решение: www.partow.net/programming/tcpproxy/index.html Скомпиллировал всё хорошо. Если я понял то позволяет из вне...

функция reverse(). ошибка несоответствия типов - C++
где-то накосячил с указателями видимо... объясните, пожалуйста, где и почему. суть задания - создать функцию reverse() с 2...

функция Reverse которая паспологает строку в обратном положении-никакого результата - C++
//alex.h public: char reverse(char s){ int c,i,j; c=i=j=0; for(i=0,j=strlen(s)-1;i<j;i++,j--){ c=s; s=s; s=c; }

Список(List) как отсортировать по убыванию используя функции reverse(); sort(); ао убыванию - C++
Нужно отсортировать список по убыванию используя функции reverse(); и sort(); если можно фул прогу бо завтыкал тему чёто)))))


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru