На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Как транслировать команды ассемблера в машинный код и наоборот? , Нужно в программу ввести функцию перевода...
    Нужно в программу ввести функцию перевода из асм кода (с мнемокодами) в бинарную запись и наоборот. Может кто подсказать куда двигаться?
      Видимо в сторону www.intel.com, если нужно в x86
        Вообще то это разные задачи. Если с ассемблированием все просто, то обратная операция посложнее. Аттачу очень простой дизассемблер, он нагляден и показывает основной принцип распознавания опкодов. Хотя есть и другой подход, в котором сначала распознается группа, а уж затем уточняется формат опкода, что более компактно, но менее производительно.
        Прикреплённый файлПрикреплённый файлDISASM.ZIP (41.22 Кбайт, скачиваний: 1011)
          Цитата AndNot @
          Если с ассемблированием все просто, то обратная операция посложнее

          Мне почему-то показалось наоборот :)
            Да ну? И в чем здесь могут быть проблемы?
              а ассемблирование это просто процесс подстановки опкодов вместо мнемогодов, так?
                kalexi, почти так. Все опкоды делятся на 16-ть групп (от 0 до 15). Номер группы узнаешь по старшим четырем битам. Так вот, все команды в группе имеют одинаковый формат. Например сравни кодирование команд ADD и OR, принадлежащих к 0-й группе. Просто выпиши на листок их фомат, в двоичном виде и сразу заметишь общий принцип и собственно различия. Кстати, в дизасме, что я привел, команды уже разделены по группам, вот по ним и ориентируйся. Только еще нужно учитывать различные префиксы, байт sib, если присутствует. Ну и конечно адресацию (биты mod, r/m, reg), но для нее тоже можно таблицы составить, или взять из манов интела, там они уже есть.
                  kalexi
                  Дока про дизассемблер (точнее по его написанию)
                  http://www.wasm.ru/comment.php?docid=16
                    Цитата AndNot @
                    Да ну? И в чем здесь могут быть проблемы?

                    С разгребанием чего-там-юзер-накорябал :) В частности, парсинг вещей типа mov rax,[rbx+rcx*(a+b)-c] и подобных. Короче, вычисление констант на этапе препроцессинга.
                    В исходнике может быть все что угодно, а в бинарнике - строго определенные байты. Которые от 0 до 255 :)
                    В пользу этой мысли также говорит то, что дизасм (включая 64 бита и всякую фигню типа SSE) я нашкрябал, а вот асм... :(

                    ps черт, архив великоват получается, хотел приклеить свою поделку
                      Vic3Dexe, разгребание текста - это уже не к ассемблеру относится. А архив можно и на части разбить ;) Интересно будет взглянуть.
                        Цитата AndNot @
                        разгребание текста - это уже не к ассемблеру относится

                        Ну а ассемблер без этого смысла не имеет, как мне кажется :) Кроме того, в 64-битном режиме настает жопа RIP-relative адресация. Это вообще кошмар, даже просто для написания. Постоянно надо помнить, что дисплесмент 32-битный, и прямое обращение к переменным возможно только в пределах +/- 4 гиг от места выполнения команды.

                        По дизасму - писан дельфой 6, в принципе и младшие его должны открывать, ничего особенного там нет. Поскольку для вывода используется RichEdit, на больших файлах (>2..3 M) начинаются тормоза. Победить это возможно только заменой RichEdit на что-то более вменяемое, но руки не доходят. В процессе написания пришлось идти на всякие ухищрения для скорости, поэтому при дизассемблинге создаются разные врЕменные файлы, не пугаться :)
                        .txt файлы в корне жЫзненны - там шаблоны выходных строк для разных адресаций.

                        Прилагается архив номер раз
                        Прикреплённый файлПрикреплённый файлdisasm.part1.rar (195.31 Кбайт, скачиваний: 1418)
                          ..и архив номер два

                          Добавлено
                          Да, за кривизну/неэффективность кода ногами не бить - сам знаю :) Просто писалось для себя, ибо в срочном порядке нужен был 64-битный дизасм, а на его эффективность и красивость было положить :D
                          Прикреплённый файлПрикреплённый файлdisasm.part2.rar (72.17 Кбайт, скачиваний: 615)
                            А есть переводчики? Мне нужно перевести машинный код в C++, может подскажите что-то по єтому поводу?
                              Есть. Например, в дизассемблере IDA есть примочка Hex-Rays, наверное самая продвинутая в этой области. Только вот результат не очень - слишком много неизвестных составляющих в коде, где и человек то ногу сломит, а тупая программа тем более. Потому, все эти "переводчики" интересны с познавательской точки зрения, но бесполезны с практической. Если кода немного, то проще вручную перевести.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0342 ]   [ 16 queries used ]   [ Generated: 26.04.24, 18:36 GMT ]