eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: skv, ALY (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› Декомпилятор С++
Посл.ответ Сообщение


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 11 июля 2011 22:12 New!
Цитата · Личное сообщение · #1

Пришло время вернуться к отложенному проекту CppSourcer (начало работы здесь), декомпилятор представляет плагин для ИДА и позволяет получить исходный текст программ скомпилированных MS VisualStudio в среде Win32.
Отличия от предыдущей версии 2.00:
- Оптимизирован движок декомпилятора на основе положительного опыта, полученного в результате работы над VMSweeper.
- Плагин собран на VisualStudio 2008 под IDA 5.7
- Исправлено значительное число мелких ошибок.

Ограничения текущей 2.01 бета версии:
1. Обработка только exe файлов.
2. Наличие полной или частичной отладочной информации.
3. Протестирован пока только на файлах, созданных VisualStudio 6.0

Планы на ближайшее и не очень будущее:
1. Протестировать плагин на остальных версиях VS
2. Сделать декомпиляцию других типов файлов.
3. Сделать полную декомпиляцию файлов с минимальной отладочной информацией.
4. Реализация декомпиляции без отладочной информации.

Если есть желающие оказать помощь в реализации проекта, то я могу создать SVN раздел для совместной работы.
В прилагаемом пакете сам декомпилятор и тестовый пример с оригинальными и декомпилированными исходниками.


{ Атач доступен только для участников форума } - CppSourcer2beta01.rar

| Сообщение посчитали полезным: Airenikus, _ruzmaz_, obfuskator, daFix, Jonny, 4kusNick, Gideon Vi, VodoleY, HandMill, Ultras, DimitarSerg, sendersu, OnLyOnE, ClockMan, [Nomad], reversecode, stas_02, SReg, kampaster



Ранг: 1014.5 (!!!!)
Статус: Участник

Создано: 11 июля 2011 22:58 · Поправил: reversecode New!
Цитата · Личное сообщение · #2

попробовал на славноизвесном msdis140.dll/pdb
на десятке функций что я попробовал был одинаковый exception
собственно вопрос - может отключить на даном етапе pdb инфо
и пофиксить анализатор что бы он банальный псевдо листинг выводил?
правда не знаю как устроен твой декомпиль и можно ли это
может там все так завязано что нитак нисяк

ну msdis140 не совсем такая и моя, просто это единственная либа
хорошо попадающая под возможности соурсера


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 12 июля 2011 09:37 New!
Цитата · Личное сообщение · #3

reversecode пишет:
собственно вопрос - может отключить на даном етапе pdb инфо
и пофиксить анализатор что бы он банальный псевдо листинг выводил?

Не нужно опережать время, ограничения текущей версии я привел, твой файл под них не попадает, да и ИДА версии 6.1 - вопросы будут приниматься, рассматриваться и решаться в пределах того что реализовано. И не нужно приводить листинги исключений, которые никакой полезной информации не несут.
В будущем дойдет очередь и до этого файла..., а сейчас, если есть желание действительно помочь необходимо выполнить следующее:
1. Протестировать сурсер на предложенном примере с другими версиями ИДА на разных осях и сообщить отличия от выложенных результатов. (Сделано на WinXP SP3 с ИДА 5.7)
2. Скомпилировать из выложенных исходников тестовые примеры под другие версии VisualStudio (7.0, 2003, 2005, 2010, под 2008 сделаю сам) и проверить на соответствие образцу.

Когда эта работа будет сделана перейду к реализации п.2 из первого поста и начну с твоей либы...

Ранг: 3.3 (гость)
Статус: Участник

Создано: 12 июля 2011 22:12 New!
Цитата · Личное сообщение · #4

1.В каком виде выкладывать результаты сравнений? Лучше на примере.
1.Под VS 2010 SP1 есть несколько ошибочек при компиляции, позже выложу лог, если надо.

В наличии IDA 5.5 и местная 6.1, из осей Win2k, WinXP SP3, Win7 SP1.


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 12 июля 2011 23:19 New!
Цитата · Личное сообщение · #5

1.В каком виде выкладывать результаты сравнений? Лучше на примере.
Если имеются отличия от оригинала, то выкладывай в архиве всю папку созданную декомпилятором.
Под VS 2010 SP1 есть несколько ошибочек при компиляции, позже выложу лог, если надо.
Если ошибки эти - str = vDN_UNKNOWN + vDName("::") + str; в двух местах, то лог не нужен - обнаружил их при компиляции в VS 2008.

ЗЫ: Под WinXP SP3 c ИДА 6.1 сурсер работает нормально.

Ранг: 122.8 (ветеран)
Статус: Участник

Создано: 13 июля 2011 10:30 · Поправил: Ultras New!
Цитата · Личное сообщение · #6

Тестовый проект:
----------------------------------------------
- Проект Cryptest (Debug build, Win32) из Crypto++ 5.6.1 (свободно скачивается с http://www.cryptopp.com и быстро компилируется).
- Студия 2008
- IDA 6.1 *RDW*
- Win2k3 SP2
По F3(весь проект) или F5(отд. ф-ия) ида вылетает с эксептом.
На выходе успевают создасться 3 файла(All*.log) в ErrorLogs, но об ошибке в них ни слова, поэтому их не заливал.
По времени файла и по содержимому, такое ощущение что не до конца заполнился AllTypes.log
---------------------------------------------

Ранг: 3.3 (гость)
Статус: Участник

Создано: 13 июля 2011 12:26 · Поправил: C/Kashmir New!
Цитата · Личное сообщение · #7

Windows 2000 SP4 + IDA 5.5

Win7 + IDA 6.1 - Вылет по F5, F3 не реагирует, дамп под 250 MB

Win7 + IDA 5.5


Позже поставлю IDA 5.2


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 13 июля 2011 16:29 New!
Цитата · Личное сообщение · #8

Благодарю всех откликнувшихся. Можно подвести предварительные итоги:
1. Плагин стабильно работает на WinXP SP3 под IDA 5.7 и IDA 6.1 (нужен результат под IDA 5.2 и IDA 5.5, их у меня нет, т.к. давно уже снес).
2. На Win2000 имеются незначительные ошибки < 1% от декомпилированного кода. На Win7 вообще ничего не работает. Действий по этим вопросам предпринимать пока не буду, рекомендую не использовать указанные системы.
3. Компиляторы:
- VC6 - образец декомпиляции
- VC2008 - первоначально ситуация была аналогична этой По времени файла и по содержимому, такое ощущение что не до конца заполнился AllTypes.log , устранил, декомпиляция проходит, но кол-во недекомпилированных функций составляет 20%, на чем сейчас и работаю.
Хотелось бы получить информацию по декомпиляции именно этого тестового примера а не каких либо других на VC > 6 версии и < 2008 версии, на 2010 версии пока работать то же не будет.


Ранг: 87.8 (постоянный)
Статус: Участник

Создано: 13 июля 2011 16:44 · Поправил: gena-m New!
Цитата · Личное сообщение · #9

У меня на ХРюше СП2-IDA 5.5 плагин в выходном .h файле не оказалось enum vDNameStatus, остальное нормально, правда система сдохла и ничего от той работы не осталось, поэтому выслать не могу.

Ранг: 3.3 (гость)
Статус: Участник

Создано: 13 июля 2011 16:51 · Поправил: C/Kashmir New!
Цитата · Личное сообщение · #10

WinXP SP3 IDA 5.2/5.5 - стабильно, результат декомпиляции одинаковый.
Win2k3 SP2 IDA 5.2/5.5 - стабильно, результат тот же, кроме одного лога под ida 5.5


Ранг: 1014.5 (!!!!)
Статус: Участник

Создано: 13 июля 2011 17:05 · Поправил: reversecode New!
Цитата · Личное сообщение · #11

ida 52 xp sp2 http://rghost.ru/14483511
ida 55 xp sp2 http://rghost.ru/14483671
на обоих есть варнинги в логах
Code:
  1. ++ Decompile vDName::operator+ (area: 0x004031B0-0x00403244)
  2. Warn:  Var: Can't convert element to UDT m_pNode

но на ida 5.5 есть еще и
Code:
  1. ++ Decompile WinMain (area: 0x0040B7C0-0x0040B84F)
  2. Warn:  CppName: int printf - unknown type calling convention!

ошибок вроде нет
листинги .cpp на diff не сравнивал

2 Vamit, а повесь деком на другой хоткей? F6 к примеру, что бы с ильфаковским не мешалось


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 18 июля 2011 21:05 New!
Цитата · Личное сообщение · #12

CppSourcer 2.02 beta
Добавлено:
1. Собран с использованием IDA SDK 6.1
2. Окно About при вызове плагина.
3. Изменено управление декомпиляцией:
- F2 декомпиляция одиночной функции
- Ctrl+F2 декомпиляция всей программы
4. Вывод версии линковщика декомпилируемой программы в файл AllModules.log
5. Вывод версии декомпилятора в создаваемые cpp и h файлы.
6. Обработка модификации SEH пролога функции с ___security_cookie.
7. Обработка регистрового вызова виртуальных функций.

Скомпилируйте, плиз, тестовый примерчик под VC 2010...


{ Атач доступен только для участников форума } - CppSourcer2_02_beta.rar

| Сообщение посчитали полезным: _ruzmaz_, Airenikus, obfuskator, res, DimitarSerg, 4kusNick, sendersu


Ранг: 122.8 (ветеран)
Статус: Участник

Создано: 18 июля 2011 23:23 New!
Цитата · Личное сообщение · #13

Vamit пишет:
Скомпилируйте, плиз, тестовый примерчик под VC 2010...


Выложи проект из 2008 студии...

Ранг: 510.2 (!)
Статус: Модератор

Создано: 19 июля 2011 02:00 · Поправил: sendersu New!
Цитата · Личное сообщение · #14

Vamit пишет:
- F2 декомпиляция одиночной функции
- Ctrl+F2 декомпиляция всей программы


ето ж кнопки Ida (set breakpoint & break execution)
как переопределить их?

Vamit пишет:
Скомпилируйте, плиз, тестовый примерчик под VC 2010...

http://rghost.net/15027551


WinXP SP3 Eng Prof, IDA61 x32, игрался с тестовым примером + CppSourcer2_02_beta
VS2008sp1 тест. прож. не собирается (2 ошибки)
upd:
Vamit пишет:
Если ошибки эти - str = vDN_UNKNOWN + vDName("::") + str; в двух местах, то лог не нужен - обнаружил их при компиляции в VS 2008.



CppSourcer.log:
Info: Loading debug info...
++ Decompile WinMain (area: 0x0043E0E0-0x0043E1AF)
Error: Trace: Instruction not found!
++


2) стоя на _tmain, F2:
файл __tmainCRTStartup.rpt

Info: Decompile: Function __tmainCRTStartup (area: 0x004401B0-0x0044038A)
Error: Stack: Out of stack! (1/--112)
Error: Stack: Out of stack! (1/--112)

//===================== UNHANDLED EXCEPTION =====================

idag.exe caused a EXCEPTION_ACCESS_VIOLATION in module CppSourcer.plw at 001B:041816D6
EAX=0000001E EBX=0012F5B8 ECX=01080160 EDX=0000000F ESI=01080160
EDI=0619BD60 EBP=00000000 ESP=0012F590 EIP=041816D6 FLG=00010202
CS=001B DS=0023 SS=0023 ES=0023 FS=003B GS=0000

//========================== CALLSTACK ==========================


//===============================================================
декомпилил разные функи, в конце концов упала сама Ида...
(во всех случаях ошибка Error: Stack: Out of stack! (x/-y)

Ранг: 1.1 (гость)
Статус: Участник

Создано: 19 июля 2011 07:49 New!
Цитата · Личное сообщение · #15

WinXP SP3 IDA 5.2/5.5 - стабильно, результат декомпиляции одинаковый.

| Сообщение посчитали полезным: res, Vamit



Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 19 июля 2011 09:34 New!
Цитата · Личное сообщение · #16

ето ж кнопки Ida (set breakpoint & break execution)
как переопределить их?

Блин, в дебагер-то я и не заглянул.... Предложите свои пару кнопок на декомпиляцию.

sendersu пишет:
декомпилил разные функи, в конце концов упала сама Ида...
(во всех случаях ошибка Error: Stack: Out of stack! (x/-y)

Если речь идет про тестовый пример скомпиленный VC2010, то ничего удивительного, до него я ещё не дошел, для чего и просил скомпилить проект под него... буду смотреть...
Пока могу сказать, по аналогии с VC2008, что критически влияют на обработку разновидности или новые типы прологов функций по которым определяется тип стека, размер локальных переменных, обработчики исключений, что в итоге и приводит к указанному сообщению.

Ранг: 510.2 (!)
Статус: Модератор

Создано: 19 июля 2011 10:10 · Поправил: sendersu New!
Цитата · Личное сообщение · #17

Vamit пишет:
Если речь идет про тестовый пример скомпиленный VC2010, то ничего удивительного

повторюсь, но речь конечно же идет о VS2008sp1 о чем упопянул в посте

2010- ето другая часть поста


главный вопрос- Иде надо позволять грузить пдб-ку или нет?

наглядный пример

вс2008сп1, дебаг версия примера (с фиксом 2 ошибок - мож уже стоит их поправить в 1ом посте? или ето такая мини задачка для отсеивания ламо?)

Code:
  1. .text:0044E500 ; Attributes: noreturn bp-based frame
  2. .text:0044E500
  3. .text:0044E500 ; void __cdecl exit(int code)
  4. .text:0044E500 _exit           proc near               ; CODE XREF: j__exitj
  5. .text:0044E500
  6. .text:0044E500 code            = dword ptr  8
  7. .text:0044E500
  8. .text:0044E500                 mov     edi, edi
  9. .text:0044E502                 push    ebp
  10. .text:0044E503                 mov     ebp, esp
  11. .text:0044E505                 push    0
  12. .text:0044E507                 push    0
  13. .text:0044E509                 mov     eax, [ebp+8]
  14. .text:0044E50C                 push    eax
  15. .text:0044E50D                 call    doexit
  16. .text:0044E512                 add     esp, 0Ch
  17. .text:0044E515                 pop     ebp
  18. .text:0044E516                 retn
  19. .text:0044E516 _exit           endp
  20. .text:0044E516


F2 дает

Code:
  1. Info:  Loading debug info...
  2. Info:  DebugInfo: CodeView type (0x00071B88)
  3. Info:  RSDS processing...
  4. Info:  Decompile: Function exit (area: 0x0044E500-0x0044E517)
  5. Error: Stack: Out of stack! (2/-8)
  6. Error: Stack: Out of stack! (2/-8)


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 19 июля 2011 11:15 · Поправил: Vamit New!
Цитата · Личное сообщение · #18

главный вопрос- Иде надо позволять грузить пдб-ку или нет?
Пусть грузит, декомпилю хуже от этого не будет, но зато самому для проверки работать удобней...

с фиксом 2 ошибок - мож уже стоит их поправить в 1ом посте? или ето такая мини задачка для отсеивания ламо?
Пытался добавить вложение в старый пост, увы... или я это делать не умею, или это не предусмотрено правкой... Выкладываю здесь оригинальные исходники примера без ошибок с конфигурацией проекта под VC 2008.

Теперь о проверках:
1. VC2010, после добавления в анализ этой версии компилятора проект декомпилировался успешно без ошибок и аналогично проекту, скомпиленному под VC2008.
2. sendersu Мне непонятно почему у тебя проект под VC2008 дает ошибки, у меня он декомпилируется полностью успешно, но имеются вариации исходного кода относительно VC6, но по большему счету они не критичны и отображают отличия в формировании asm кода разными компиляторами. Код же созданный VC2010 полностью аналогичен коду созданному VC2008.
Но есть одно но - в приведенном листинге ИДА видно, что была попытка декомпиляции библиотечной АПИ функции _exit, которая не является функцией проекта, все результаты декомпилиции таких функций (а так же стабов всех типов) не гарантируются и при пакетной обработке файла декомпилятор их пропускает.
Есть и второе но - в readme о нем упомянуто, что не всегда декомпиляция одиночной функции (F2) может дать правильный результат, это зависит от многих факторов (в частности декомпиляция функции с вызовом вирт. функции для которой ещё не распознана таблица вирт. функций класса (т.е. не декомпилированы конструктор с декструктором) приведет к ошибке), а в случае пакетной обработки (Ctrl+F2) при декомпиляции этой же функции ошибки не будет.


{ Атач доступен только для участников форума } - OriginalSrcUnDecoratorVC2008.rar

Ранг: 510.2 (!)
Статус: Модератор

Создано: 19 июля 2011 12:34 · Поправил: sendersu New!
Цитата · Личное сообщение · #19

Vamit пишет:
OriginalSrcUnDecoratorVC2008.rar

нету файла UnDecoratorMsvc.cpp (найти можно в 1ом посте)


Vamit пишет:
Мне непонятно почему у тебя проект под VC2008 дает ошибки, у меня он декомпилируется полностью успешно

мне тоже
мож какие идеи есть?

upd: на другой машинке VS2008 завелось с пол оборота.....

Info: ---------- Statistic ----------
Info: Decompiled functions - 131
Info: Error in functions - 0
Info: Created .cpp files - 2
Info: Created .h files - 1


буду искать разницу, пока идей нету

насчет _exit - согласен, недочитал


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 22 июля 2011 11:18 · Поправил: Vamit New!
Цитата · Личное сообщение · #20

При декомпиляции этой функции встретил непонятную мне ситуацию с аргументами на этом участке кода:
Code:
  1. .text:1040166F                 cmp     eax, 7FFFFFFFh
  2. .text:10401674                 push    esi
  3. .text:10401675                 mov     esi, this
  4. .text:10401677                 jbe     short loc_1040167E
  5. .text:10401679                 mov     eax, 7FFFFFFFh
  6. .text:1040167E
  7. .text:1040167E loc_1040167E:                           ; CODE XREF: DIS::CchFormatAddr(unsigned __int64,char *,uint)+27j
  8. .text:1040167E                 push    1
  9. .text:10401680                 push    2
  10. .text:10401682                 push    eax
  11. .text:10401683                 mov     eax, [esp+0A8h+sz]
  12. .text:1040168A                 push    eax
  13. .text:1040168B                 lea     this, [esp+0ACh+ostr]
  14. .text:1040168F                 call    ds:__imp_??0ostrstream@std@@QAE@PADHH@Z ; std::ostrstream::ostrstream(char *,int,int)
  15. .text:10401695                 mov     [esp+9Ch+var_4], 0
  16. .text:104016A0                 mov     eax, dword ptr [esp+9Ch+addr+4]
  17. .text:104016A7                 mov     this, dword ptr [esp+9Ch+addr]
  18. .text:104016AE                 mov     edx, [esi]
  19. .text:104016B0                 push    eax
  20. .text:104016B1                 push    this
  21. .text:104016B2                 lea     eax, [esp+0A4h+ostr]
  22. .text:104016B6                 push    eax
  23. .text:104016B7                 mov     this, esi
  24. .text:104016B9                 call    dword ptr [edx+50h]
  25. .text:104016BC                 mov     this, ds:__imp_?ends@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z ; std::ends(std::basic_ostream<char,std::char_traits<char>> &)
  26. .text:104016C2                 push    this
  27. .text:104016C3                 lea     this, [esp+0A0h+ostr]
  28. .text:104016C7                 call    ds:__imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z ; std::basic_ostream<char,std::char_traits<char>>::operator<<(std::basic_ostream<char,std::char_traits<char>> & (*)(std::basic_ostream<char,std::char_traits<char>> &))
  29. .text:104016CD                 mov     edx, dword ptr [esp+9Ch+ostr.___u0]
  30. .text:104016D1                 mov     this, [edx+4]
  31. .text:104016D4                 lea     this, [esp+this+9Ch+ostr]
  32. .text:104016D8                 call    ds:__imp_?fail@ios_base@std@@QBE_NXZ ; std::ios_base::fail(void)
  33. .text:104016DE                 test    al, al
  34. .text:104016E0                 jz      short loc_1040171B
  35. .text:104016E2                 mov     [esp+9Ch+var_4], 0FFFFFFFFh
  36. .text:104016ED                 lea     this, [esp+9Ch+ostr.gap58]
  37. .text:104016F1                 call    ds:__imp_??1ostrstream@std@@UAE@XZ ; std::ostrstream::~ostrstream(void)
  38. .text:104016F7                 lea     this, [esp+9Ch+ostr.gap58]
  39. .text:104016FB                 call    ds:__imp_??1?$basic_ios@DU?$char_traits@D@std@@@std@@UAE@XZ ; std::basic_ios<char,std::char_traits<char>>::~basic_ios<char,std::char_traits<char>>(void)
  40. .text:10401701                 xor     eax, eax
  41. .text:10401703                 pop     esi
  42. .text:10401704                 mov     this, [esp+98h+var_C]
  43. .text:1040170B                 mov     large fs:0, this
  44. .text:10401712                 add     esp, 98h
  45. .text:10401718                 retn    10h

по адресам 1040167E - 1040168F осуществляется вызов конструктора класса ostrstream, который имеет следующую декларацию:
ostrstream(char *_Ptr, streamsize _Count, ios_base::openmode _Mode = ios_base::out);
Как видно у него три аргумента, а откуда появляется 4 аргумент (строка 1040167E)?
Причем это не аргумент последующей виртуальной функции (строка 104016B9), т.к. вот её декларация -
virtual void FormatAddr(std::basic_ostream<char, std::char_traits<char> >&, unsigned long long);

ХексРей 1.5 дает следующее представление кода
Code:
  1.   if ( cchMax > 0x7FFFFFFF )
  2.     v4 = 2147483647;
  3.   std::ostrstream::ostrstream(&ostr, sz, v4, 2, 1);

что так же противоречит декларации вызова конструктора.

Помогите разгадать загадку...

Ранг: 576.8 (!)
Статус: Модератор

Создано: 22 июля 2011 12:44 · Поправил: r_e New!
Цитата · Личное сообщение · #21

Vamit
Разгадка в инлайнах - Ошибочка
Разгадка [url=здесь]http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/3d73f571-48e5-46ce-b623-3211e030f808[/url]
Пользуйся cl /Faoutput.asm

| Сообщение посчитали полезным: Vamit


Ранг: 23.4 (новичок)
Статус: Участник

Создано: 22 июля 2011 12:47 New!
Цитата · Личное сообщение · #22

это скорее больше подскажет IOSTREAM.H
Эти ссылочки может помогут:
--> iostream.h Link <--

-->ostrstream Link <--

-->ostrstream,constructor Link <--

Или настройки компилятора были введены на оптимизацию, или так задумано, но больше к хидерам склоняюсь в этом случаи


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 22 июля 2011 13:57 New!
Цитата · Личное сообщение · #23

r_e пишет:
Разгадка [url=здесь]http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/3d73f571-48e5-46ce-b623-3211e030f808[/url]

Вот теперь это то , дополнительный скрытый параметр в конструкторе класса, производного от виртуального класса, добавляет компилятор, который говорит конструктору инициализировать ему (значение 0) или не нужно инициализировать (значение 1) базовый виртуальный класс.

res пишет:
это скорее больше подскажет IOSTREAM.H

А это ничего не подскажет, всё что там есть давно пройдено...


Ранг: 325.8 (мудрец)
Статус: Участник

Создано: 22 июля 2011 17:31 · Поправил: Vamit New!
Цитата · Личное сообщение · #24

Ещё один вопрос в продолжение реализации виртуальных классов, в той же функции (пост #20) в строках
104016CD - 104016D4 идет получение указателя на базовый виртуальный класс.
А дальше пошли мои догадки:
- В edx загружается адрес таблицы виртуальных классов. Где она находится и что из себя представляет?
- В строке 104016D1 из таблицы берется смещение размещения виртуального базового класса в производном. Почему индекс смещения 4?
- В строке 104016D4 получают абсолютный адрес базового виртуального класса и далее идет вызов метода класса.

И где вообще можно почитать про реализацию кода с виртуальными базовыми классами? Желательно с множественным виртуальным наследованием.
Интересует именно реализация кода, а как всё это строится на С++ я знаю...


Ранг: 1014.5 (!!!!)
Статус: Участник

Создано: 22 июля 2011 17:37 New!
Цитата · Личное сообщение · #25

http://www.blackhat.com/presentations/bh-dc-07/Sabanal_Yason/Paper/bh-dc-07-Sabanal_Yason-WP.pdf

| Сообщение посчитали полезным: Vamit, =TS=, Artem_N

 eXeL@B —› Софт, инструменты —› Декомпилятор С++

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS