Вопросы по ООП
От: wbear  
Дата: 11.03.21 12:42
Оценка:
Всем привет.

Возникла задачка разобрать исходный код программы и восстановить структуру данных для ряда переменных.

Анализ кода показал, что программа разработана на основе объектно-ориентированного подхода.
Вообщем куча классов, наследование, виртуальные функции и много другого.

Опыта в реверсионном разборе именно С++ кода у меня маловато.

Как происходит создание класса я разобрался.

Однако остались вопросы, с которыми хочется разобраться.

Приведу фрагмент кода конструктора класса с наследованием. И вот вопрос — что за указатели на массивы мы загружаем в начале функции(конструктора)?

dword_10044090  dd 0
                                  dd 50h                  ; Base::Base
                                  dd 88h                  ; Sub::Sub
                                  dd 94h                  ; Ser::Ser


dword_100440A8  dd 0FFFFFFFCh
                                   dd 0FFFFFFB8h
                                   dd 0FFFFFFF0h


dword_100440B4  dd 0FFFFFFFCh
                                   dd 0FFFFFFE8h
…………………………………………………………………………
mov     [ebp+_this], ecx   ;загружаем указатель на начало класса

mov     eax, [ebp+_this]     ;
dword ptr [eax], offset dword_10044090

mov     ecx, [ebp+_this]     ;
dword ptr [ecx+98h], offset dword_ 100440A8

mov     ecx, [ebp+_this]     ;
dword ptr [ecx+A0h], offset dword_ 100440B4

………………………………………………………….
mov     ecx, [ebp+_this]     ;
add     ecx, 50h
call    Base::Base()               ; Вызываем конструктор класса Base::Base

mov     ecx, [ebp+_this]     ;
add     ecx, 88h
call    Sub:: Sub ()                ; Вызываем конструктор класса Sub:: Sub

mov     ecx, [ebp+_this]     ;
add     ecx, 94h
call    Ser:: Ser ()                  ; Вызываем конструктор класса Ser::Ser
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.