Пишу свой декомпилятор, как быть с функциями к которым у меня нет заголовков?

Тема в разделе "WASM.RESEARCH", создана пользователем Shooshpanchik, 24 июн 2026.

  1. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    932
    f13nd,

    Так это и есть модель, декомпиляция!
    Без нее у вас только частичная разметка, всякие вероятно строки и тп, что в итоге дает мусор.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Получившийся выхлоп работает, я тестировал. По префиксам должно быть понятно, что это переработанный в фасмосинтаксис листинг иды. Для анализа декомпилер она не использует. Ну типа декомпилером если кто и был, то я. Обращаясь к изначальному тезису "статик реасм принципиально возможен" - нет никакого противоречия.
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    932
    f13nd,

    Нет, тут подмена. Данные и код расположены последовательно в image[base, limit] делает образ работоспособным. Это просто разметка, нельзя перемещать/изменять, вычищать и тп. Эвристика+проверка P~image => разметка. Это не реасм.
     
  4. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Работоспособным код делает пересчет смещений и абсолютных адресов. Для этого ассемблер при реассемблировании и нужен. Если в получившемся коде они правильно обработаны, хоть заперемещайся - будет работать.
     
  5. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    932
    f13nd,

    Дурят нашего брата?

     

    Вложения:

  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Я устал объяснять, что ллм делает выводы из того материала, который ты ему предоставляешь. Дуришь себя ты. Сначала справлялся сам, теперь делегировал это калькулятору.

    Про покрытия в процентах овцы быком интересно рассуждать ноябрьскими вечерами у камина. Ты ставишь ллм вопрос об общем решении, оно говорит "пожалуй общего решения нет", ты бежишь строчить на форум о том, что "решения нет". Делегируй тогда и интерпретацию ответов ллм, она лучше справится.
     
  7. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    932
    f13nd,

    Нет же, ваш 7-мегабайтный выхлоп разбирать в блокноте невозможно, это делает бям по указанным ей методам. Ты вручную правил диз, выполняя декомпиляцию. Большая часть данных статик не покрывается. Что хочешь доказать я не понял, у тебя семпл гибридно выжатый диз(автономный?)+ручнойдекопм.
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Я начал сомневаться, что ты 10 лет ядро нт копал. Практических знаний не вижу.

    1 Где кончается одна инструкция и начинается следующая выясняет дизасеммблер (длин). Азбука.
    2 На то, где начинаются данные, указывают референсы. Где они кончаются по большому счету плевать. Даже тупая ида большинство абсолютных адресов интерпретирует правильно. Без солвера. Число между нижним и верхним адресом одного из сегментов. Ложные срабатывания машинным способом отсеиваются например релоками, тупо сменой базы модуля. Между двумя полями данных максимум паддинг, на глаз цепочку нулей выделить сможешь?
    3 Куда ведут переходы знать не надо. Это забота дизассемблера и самый базовый его функционал. Тебе надо чтобы указатели были интерпретированы как указатели, а смещения как смещения.
    4 Вообще плевать. Интерпретировать корректно надо только указатели и смещения. Для реасма важно только чтобы данные транслировались обратно в точности какими были.

    Выделение кода в типичной незащищенной программе - тривиальная задача. Компиляторы компонуют код и данные по разным логическим сегментам (есть архитектуры, где immediate не влазит в поле инструкции, но даже в этом случае они собираются в отдельную кучку). Есть запрещенные состояния системы команд: даже тупейшим скриптом, который проверяет fallthrough-цепочку на инструкцию возврата это решается (но даже это не надо). Для разбора я никогда декомпилер не использую, это бред. Если предполагается рипнуть код, после разбора дополнительно использую ряд простых мер для контроля. Не всегда это можно полностью автоматизировать, но к "разобравшись в логике программы" и декомпиляции это никакого отношения не имеет.
     
  9. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    932
    f13nd,

    Тоесть мне нужно печатать про все очевидные вещи, типо 1-дизу для начала нужны входы(EP), чтобы строить граф(покрытие) и что он пойдёт по данным; 2-ссылка не имет типа, а она нужна для 1; ссылка должна быть определена, отлична от данных...

    Я начал сомневаться что ты последние лет десять вообще на форумах читал.. Хотя про большую красную кнопку вызывающую решателя верно ;)

    Ты сейчас не разобравшись свел реасм к релокации. Тоесть ничего с образом не делается, а правятся ссылки, при этом их RVA обязательно инвариант. В таком случае можно выделить код, данные с любым допуском по ошибкам(разметка), так как их смещения = целевым.

    Я не рассматриваю такие спекуляции, а только общее. В норм дизасме все процедуры определены, данные разделены, нет *void. Это можно собрать и назвать компиляцией. А ваши практические реасмы" и декомпили" переименовать в патч, собственно чем они и являются.
     
    Последнее редактирование: 8 ноя 2026 в 00:05
  10. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Ты ничего глобального с рипнутым образом и не сделаешь. Это не восстановление до исходника: структур/классов/интерфейсов у тебя тупо нет, чтобы вертеть их как вздумается. Риппинг дает возможность заимствовать код в свои программы и ограниченно его модифицировать. Вобщем-то термин "реассемблирование" = "пересборка" про это.
     
  11. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    932
    f13nd,

    Твой семпл можно прогнать через бям, он сожмет до модели получив алгоритмы если возможно(7-8М бесплатно не хватит наверно), а затем сгенерит исход на необходимом яп, асме например. Это декомпиляция и если выходной яп асм + требование src~dst будет реасмом. Только так физически отсутствующий *type/code=void превратится в тип и рядом лежащие данные в самостоятельный обьект, а не единый блок памяти.

    Те термины не понимают даже на кл мешая все в кучу. Можно сказать все что не выделяет логику(манипуляции ссылками, флоу/taint, дизасмы, эвристики и тд) это не декомпиляция. Даже если выхлоп подобен исходам.
     
  12. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Ну типа да, прикольно. Но делалось это в 2019 году, когда над бямами смеялись. А оно работало и для своих задач годилось, правда ни разу не понадобилось.
     
  13. Application

    Application Moderator Команда форума

    Публикаций:
    1
    Регистрация:
    8 дек 2007
    Сообщения:
    1.078
    Лучше вместо декомпилятора сделать компилятор. Чтобы при компиляция справа от кода отображалось сколько раз этот код был выполнен, или время. Можно даже какой-то фильм.
     
  14. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.246
    Чтобы вылез клоун, можно ничего не делать. Пишешь просто на форуме и все.
     
    Application нравится это.
  15. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    573
    В следующий раз - без всякой этой аллегории. Сразу пишите ФИО, ник на форуме, место работы, кол-во полных лет ... А то мы всё намёками, намёками... Вы кого-то боитесь ? :)
     
  16. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.456
    Спецы бранятся - только тешатся...