Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.192.81] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
Сегодня решил настроить свой VSCodium для работы с Fasm. Пока речь идет о плагине подсветки и форматировщике. Форматировщик В штатном репозитарии его нет. Пришлось искать и ставить "Assembly Formatter" из репы VSCode в виде vsix-файла. Но и это не все. Форматирует, имхо, ну очень коряво - просто отодвигает на табуляцию (делает отступ) все "что не метка", а комментарии располагает на позиции 30 или далее. Пришлось код форматировщика править "под себя". Может быть кому-то мой вариант форматирования покажtтся лучшим: В принципе, это уже можно править под себя. Делается все это просто. Сперва ставим этот форматировщик из 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 Кбайт, скачиваний: 6) |
Сообщ.
#2
,
|
|
|
Вот только 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 - имя макроинструкции. |
Сообщ.
#3
,
|
|
|
Цитата macomics @ Вот только import и library в fasm1 это имена макроинструкций и они могут меняться по желанию. Ну я понимаю. Я написал, что в принципе не хватает норм разделений на группы раскрасок. ADD: И да - изначальная редакция форматировщика, да и мои правки - не предусматривают "иерархического кода", типа: .IF (BYTE PTR [esi]) == bl .IF ($invoke(CheckSignature, $invoke(GetCurrentProcess), OFFSET szKernel32, OFFSET szIsDebuggerPresent, OFFSET IsDebuggerPresentSignature, 14)) inc BYTE PTR [edi] inc ebp .ELSE ... ИМХО, это уже на ассемблер - не пользуйтесь форматировщиком, а лучше пишите сразу на Си |
Сообщ.
#4
,
|
|
|
Внимание! Achtung! Небезпека!
Прошу помощи. Как-то подумалось, что моя реализация форматировщика в плане форматирования комментариев "сырая" до безобразия. Надо это исправить. Пока ищется первое вхождение ASCII символа ; и это считается началом комментария. Что, собственно, совсем не есть правильно. Ибо нужно учитывать контекст. Ну оч прошу дополнить варианты для обработки и последующих тестов: hello1 db 'hello ; world!',0 hello2 db "hello ; world!",0 hello2 db "hello ';' world!",0 mov al , ';' ??? Я так понимаю, чтобы корректно определить начало комментария, нужно выяснить две вещи: 1) Точка-с-запятой "не в строке" 2) Точка-с-запятой "не ASCII символ" в команде Вощем, жду ваших мыслей |
Сообщ.
#5
,
|
|
|
Еще
3) точка-с-запятой "не часть комментария" ;;;;;;;;;;;;;;; ; комментарий ; ;;;;;;;;;;;;;;; |
Сообщ.
#6
,
|
|
|
Цитата macomics @ 3) точка-с-запятой "не часть комментария" Тут скорее нет, чем да. Ибо первое вхождение ; "не-в-строке" и "не-в-символе" - уже есть "начало комментария", а дальше пофик. |