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

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

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

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Любителям VSCodium + Fasm
    Всем привет!

    Сегодня решил настроить свой VSCodium для работы с Fasm. Пока речь идет о плагине подсветки и форматировщике.

    Форматировщик

    В штатном репозитарии его нет. Пришлось искать и ставить "Assembly Formatter" из репы VSCode в виде vsix-файла. Но и это не все. Форматирует, имхо, ну очень коряво - просто отодвигает на табуляцию (делает отступ) все "что не метка", а комментарии располагает на позиции 30 или далее. Пришлось код форматировщика править "под себя". Может быть кому-то мой вариант форматирования покажtтся лучшим:

    • Форматировщик с моими правками, кроме меток, еще не отодвигает (делает отступ) еще кучу конструкций, заданных ключевыми словами - format, entry, include, section, import
    • Форматировщик с моими правками двигает все комментарии вправо - на позицию самого "дальнего" комментария, а можно вообще отключить форматирование комментариев

    В принципе, это уже можно править под себя. Делается все это просто. Сперва ставим этот форматировщик из vsix-файла (ссылка есть вверху по тексту). Потом находим файл от корня установки VSCodiun "data/extensions/notaflyinggoose.asmformat-1.0.0/extension.js" и заменяем моим, который я прикреплю к данному сообщению. Настройка ключевых слов, которые остаются при форматировании без отступа, а также настройка включения/отключения форматирования комментариев - делаются прямо в этом файле (строки 2 и 3). После правки файла - обязателен перезапуск VSCodium.

    Плагин подсветки

    Его мы берем из штатного репозитария. Называется он "ASM Code Lens". К нему тоже есть претензии! Для Fasm он как то слабо заточен. Группы подсветки на сей момент: comments, keywords, strings, mnemonics, numbers, labels. Можно было бы в вместо "keywords" с делать группу "opcodes", а из группы "mnemonics" сделать набор "keywords1...keywords5". Ну да ладно. Возможно потом займусь, если будет острая потребность. Править нужно файл "data/extensions/maziac.asm-code-lens-1.10.0/grammar/asm.json" - так же файл от корня установки VSCodiun. Лично я для себя в строке 83 пока просто добавил "library" и "invoke":

    "match": "(?i:(?<=\\s)(?:bank|bankset|limit|protect|write\\s+direct|str|struct|endstruct|ends|invoke|library)\\b)"

    После правки файла - обязателен перезапуск VSCodium.

    Ну, вощем, как-то так. Может быть кому поможет.

    Прикреплённый файлПрикреплённый файлextension.js (2,79 Кбайт, скачиваний: 4)
      Вот только import и library в fasm1 это имена макроинструкций и они могут меняться по желанию. Хотя слово import - это еще и флаг типа секции в формате PE/PE64.

      А вот про слова extrn или public - забыли.

      Цитата
      "match": "(?i:(?<=\\s)(?:bank|bankset|limit|protect|write\\s+direct|str|struct|endstruct|ends|invoke|library)\\b)"


      str - это инструкция процессора, а invoke - имя макроинструкции.
      Сообщение отредактировано: macomics -
        Цитата macomics @
        Вот только import и library в fasm1 это имена макроинструкций и они могут меняться по желанию.

        Ну я понимаю. Я написал, что в принципе не хватает норм разделений на группы раскрасок.

        ADD: И да - изначальная редакция форматировщика, да и мои правки - не предусматривают "иерархического кода", типа:

        ExpandedWrap disabled
          .IF (BYTE PTR [esi]) == bl
             .IF ($invoke(CheckSignature, $invoke(GetCurrentProcess), OFFSET szKernel32, OFFSET szIsDebuggerPresent, OFFSET IsDebuggerPresentSignature, 14))
                inc BYTE PTR [edi]
                inc ebp
             .ELSE
             ...

        ИМХО, это уже на ассемблер - не пользуйтесь форматировщиком, а лучше пишите сразу на Си :yes:
          Внимание! Achtung! Небезпека!

          Прошу помощи. Как-то подумалось, что моя реализация форматировщика в плане форматирования комментариев "сырая" до безобразия. Надо это исправить. Пока ищется первое вхождение ASCII символа ; и это считается началом комментария. Что, собственно, совсем не есть правильно. Ибо нужно учитывать контекст.

          Ну оч прошу дополнить варианты для обработки и последующих тестов:

          ExpandedWrap disabled
            hello1 db 'hello ; world!',0
            hello2 db "hello ; world!",0
            hello2 db "hello ';' world!",0
            mov al , ';'
            ???

          Я так понимаю, чтобы корректно определить начало комментария, нужно выяснить две вещи:

          1) Точка-с-запятой "не в строке"
          2) Точка-с-запятой "не ASCII символ" в команде

          Вощем, жду ваших мыслей :lol:
            Еще
            3) точка-с-запятой "не часть комментария"
            ExpandedWrap disabled
              ;;;;;;;;;;;;;;;
              ; комментарий ;
              ;;;;;;;;;;;;;;;
              Цитата macomics @
              3) точка-с-запятой "не часть комментария"

              Тут скорее нет, чем да. Ибо первое вхождение ; "не-в-строке" и "не-в-символе" - уже есть "начало комментария", а дальше пофик.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0308 ]   [ 16 queries used ]   [ Generated: 28.11.22, 06:08 GMT ]