Всем привет.
Возникла задачка разобрать исходный код программы и восстановить структуру данных для ряда переменных.
Анализ кода показал, что программа разработана на основе объектно-ориентированного подхода.
Вообщем куча классов, наследование, виртуальные функции и много другого.
Опыта в реверсионном разборе именно С++ кода у меня маловато.
Как происходит создание класса я разобрался.
Однако остались вопросы, с которыми хочется разобраться.
Приведу фрагмент кода конструктора класса с наследованием. И вот вопрос — что за указатели на массивы мы загружаем в начале функции(конструктора)?
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