Вопросы по Notepad++

Тема в разделе "WASM.BEGINNERS", создана пользователем Mikl___, 4 мар 2023.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Здравствуйте, все!
    Решил перейти от компиляции. линковки и редактирования asm-файлов в Far на Notepad++. Установил NppExec. Создал скрипт
    Код (Text):
    1. cls
    2. set masm64=d:\masm39
    3. cd "$(CURRENT_DIRECTORY)"
    4. $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME)
    5. if $(EXITCODE) !=0 goto exit
    6. $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    7. if $(EXITCODE) !=0 goto exit
    8. cmd /c $(NAME_PART).exe
    9. :exit
    Создание и запуск ехе-файла проходит на ура, но дальше начинаются вопросы.
    1. Как перед компиляцией удалять старый exe и ненужный obj? В bat-файле это решалось так
      Код (Text):
      1. if exist %filename%.exe del %filename%.exe
      2. if exist %filename%.obj del %filename%.obj
      В NppExec exist и del/delete не понимают
    2. При компиляции и линковке неизбежны ошибки и информацию о них я получал в файл errors.txt
      Код (Text):
      1. %masm64_path%bin\ml64 /Cp /c /I"%masm64_path%Include" %filename%.asm >> errors.txt
      NppExec ни >>, ни > не понимает.
    3. Чтобы не плодить кучу разных bat-файлов для создания GUI, CONSOLE, DLL, SYS я первой строкой в asm-файле писал
      Код (ASM):
      1. ; GUI #
      а в bat-файле шел разбор
      Код (Text):
      1.  
      2. for /f "eol=# tokens=2-3" %%A in (%filename%.asm) do (
      3. set kind_of_file=%%A
      4. if %%B == # exit /b )
      5. goto %kind_of_file%
      где происходит переход на метку в bat-файле :CONSOLE, :GUI, : DLL и далее происходит сборка exe-/dll-/sys-файла по своим правилам. Как подобное организовать в Notepad++?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Часть проблем решил, скрипт для NppExec
    Код (Text):
    1. cls // очищаем консоль NppExec
    2. set masm64=d:\masm39
    3. cd "$(CURRENT_DIRECTORY)"
    4. cmd /c if exist errors.txt del errors.txt // удалил программный мусор от предыдущего
    5. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj // удачного или неудачного
    6. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe // проекта
    7. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
    8. if $(EXITCODE) !=0 goto exit // если есть ошибки -- выведу их в консоль NppExec
    9. cmd /c $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO  /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe >> errors.txt
    10. if $(EXITCODE) !=0 goto exit // если есть ошибки -- выведу их в консоль NppExec
    11. cmd /c $(NAME_PART).exe // запускаю получившийся экзешник
    12. del errors.txt // в случае запуска удаляю ненужные файлы
    13. del $(NAME_PART).obj
    14. exit // если ошибок нет -- выходим
    15. :exit // если ошибки есть, тогда выводим ошибки в консоль NppExec
    16. con_loadfrom errors.txt
    1. Как предусмотреть в одном скрипте создание exe(GUI/CONSOLE), dll, sys?
    2. Как в скрипте делать вывод длинных строк? В bat-файле я экранировал переход на другую строку символом "^"
    3. Как в notepad++ подсветить, допустим красным, строки с ошибками компиляции?
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia


    Я бы посоветовал перейти на nmake или make и написание .mak скриптов. Все прочие примочки по сравнению с nmake - пустая трата времени.
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Допустим, при компиляции обнаружены ошибки. Список ошибок в файле errors.txt. Как в notepad++ подсветить, допустим красным, строки с ошибками в файле tut_03a.asm?
    Assembling: tut_03a.asm
    tut_03a.asm(9) : error A2006:undefined symbol : ebt
    tut_03a.asm(16) : error A2008:syntax error : in instruction
    tut_03a.asm(19) : error A2006:undefined symbol : rsx

    Пропуск первой строки, во второй и остальных строках в скобках номера строк с ошибками. Только увы, я синтаксиса NppExec не знаю (но пытаюсь разобраться). Может быть появится HESH, будет у кого спросить
     
  5. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Mikl___, у меня такой для 64 бит гуи ехе:

    Код (Text):
    1. SET PATH=D:\Masm32\bin
    2. cd $(CURRENT_DIRECTORY)
    3. $(PATH)\ML64 /c "$(FULL_CURRENT_PATH)"
    4. $(PATH)\LINK "$(CURRENT_DIRECTORY)\$(NAME_PART).obj" /SUBSYSTEM:WINDOWS /ENTRY:main
    5. cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).obj"
    А такой для 32 бит

    Код (Text):
    1. SET PATH=D:\Masm32\bin
    2.  
    3. cd $(CURRENT_DIRECTORY)
    4. $(PATH)\ML /nologo -c -coff "$(FULL_CURRENT_PATH)"
    5.  
    6. $(PATH)\LINK /nologo "$(CURRENT_DIRECTORY)\$(NAME_PART).obj" /SUBSYSTEM:WINDOWS
    7. cmd /c del "$(CURRENT_DIRECTORY)\$(NAME_PART).obj"
    --- Сообщение объединено, 5 мар 2023 ---
    да вроде никак, оно пишется вниз в консоль (в плане , окошко вывода) и все.
    тут все грустно весьма в нотепаде с масмом, но иного варианта нет. Radasm/Winasm, если они еще живы. В студии то еще хуже.
     
    Mikl___ нравится это.
  6. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    340
    здеся что-то подобное 15 лет тому назад делали :)
    https://sourceforge.net/p/npp-plugins/discussion/672146/thread/db04bd47/
     
    Mikl___ нравится это.
  7. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    101
    Как-то видел тему - Python плагин под notepad++. Может поможет ?
     
    Mikl___ нравится это.
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    1. первая строка в моих asm-файлах
      Код (ASM):
      1. ; GUI #
      мне нужно получить слово GUI/CONSOLE/SYS/DLL и перейти на метку :GUI/ :CONSOLE/ :SYS/ : DLL и компилировать/линковать. В скрипте NotePadExec пишу
      Код (Text):
      1. cls
      2. set masm64=путь_к_ml64.exe_и_link.exe
      3. cd "$(CURRENT_DIRECTORY)"
      4. cmd /c for /f "eol=# tokens=2" %A in ($(FILE_NAME)) do exit /b && goto %A
      5. :CONSOLE //пока "пустышка"
      6. exit
      7. :GUI //компиляция и линковка с /SUBSYSTEM:WINDOWS
      если вместо goto подставить @echo, тогда на экран выводится "GUI" но на goto не реагирует, происходит выход по EXIT
      Вариант
      Код (Text):
      1. cmd /c for /f "eol=# tokens=2" %A in ($(FILE_NAME)) do set kind_of_file = %A && exit /b
      2. goto $(kind_of_file)
      также не работает
    2. Как подсветить в asm-файле строки с ошибками, если в результате компиляции сформировался файл errors.txt вида
      Код (Text):
      1.  Assembling: tut_03a.asm
      2. tut_03a.asm(14) : error A2008:syntax error : in instruction
      3. tut_03a.asm(9) : error A2006:undefined symbol :
    3. Как сворачивать процедуры/структуры?
     
  10. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    138
    По поводу 2 пункта:
    Если errors.txt имеет вид:

    Код (Text):
    1.  Assembling: tut_03a.asm
    2. tut_03a.asm(14) : error A2008:syntax error : in instruction
    3. tut_03a.asm(9) : error A2006:undefined symbol :
    4.  
    То, можно вывести номер строк в файле tut_03a.asm следующим разбором:

    Код (Text):
    1. cd "$(CURRENT_DIRECTORY)"
    2. cmd /c for /f "tokens=1,2 delims=() skip=1" %i in (errors.txt) do if %i equ $(FILE_NAME) echo %j
    3.  
    он выведет на консоль числа 14 и 9, потом их нужно как-то передать в скрипт NppExec, потому что написав в цикле выше команду SET, NppExec не будет знать о этой переменной, так как она выполнялась в cmd. Можно попробовать вывести номер строк в файле, а уже оттуда прочитать их в NppExec:

    Код (Text):
    1. cd "$(CURRENT_DIRECTORY)"
    2. cmd /c for /f "tokens=1,2 delims=() skip=1" %i in (errors.txt) do if %i equ $(FILE_NAME) echo %j >> temp.txt
    3. ...
    4. потом читаем в NppExec из temp.txt
    5. ...
    6.  
    После этого, зная номера строк, подсветить их можно с помощью
    Код (Text):
    1. sci_sendmsg SCI_MARKERDELETE n n1
    , где n - номер строки, а n1 - номер маркера (подробнее тут)
     
    Mikl___ нравится это.
  11. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    138
    Для передачи из консоли в NppExec скрипт достаточно:
    Включить перенос консольного вывода в переменную $(OUTPUT) командой
    Код (Text):
    1. NPE_CONSOLE local v+
    Теперь ее можно вывести или назначить другой переменной:
    Код (Text):
    1. echo $(OUTPUT)
    2. set n = $(OUTPUT)
     
    Mikl___ нравится это.
  12. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Как сворачивать процедуры/структуры для asm в Notepad++?
     
  13. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Привет, всем! Может кто-нибудь подсказать как запустить hiew32 + asm-файл из-под Notepad++?
    Через "Запуск (F5)" понятно как
    06.jpg
    А как тоже самое можно сделать через NppExec?
     
  14. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    340
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Разобрался :boast:

    Запуск hiew32 + exe-файл

    Код (Text):
    1. cls
    2. cd "$(CURRENT_DIRECTORY)"
    3. set masm64=c:\первая_папка_на_диске\вторая_папка_на_диске\...
    4. npp_run  $(MASM64)\bin\hiew32.exe $(NAME_PART).exe

    Запуск x64dbg + exe-файл

    Код (Text):
    1. cls
    2. set masm64=c:\первая_папка_на_диске\вторая_папка_на_диске\...
    3. npp_run $(masm64)\x64\x64dbg "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"

    Запуск ResourceHacker + exe-файл

    Код (Text):
    1. cls
    2. set masm64=c:\первая_папка_на_диске\вторая_папка_на_диске\...
    3. cd "$(CURRENT_DIRECTORY)"
    4. npp_run $(masm64)\ResourceHacker\ResHacker $(NAME_PART).exe

    Компиляция, линковка, запуск

    Огромное спасибо mantissa :thank_you2:
    Код (Text):
    1. cls
    2. set masm64=c:\первая_папка_на_диске\вторая_папка_на_диске\...
    3. cd "$(CURRENT_DIRECTORY)"
    4. NPE_CONSOLE local v+ // Включаем вывод из командой строки в $(OUTPUT)
    5. cmd /c if exist errors.txt del errors.txt
    6. cmd /c if exist $(NAME_PART).obj del $(NAME_PART).obj
    7. cmd /c if exist $(NAME_PART).exe del $(NAME_PART).exe
    8. cmd /c for /f "eol=# tokens=2" %A in ($(FILE_NAME)) do @echo %A & exit
    9. goto $(OUTPUT)
    10. :DLL
    11. // компиляция DLL-ки
    12. exit
    13. :CONSOLE
    14. // компиляция консольного приложения
    15. exit
    16. :GUI // компиляция GUI-приложения
    17. cmd /c $(masm64)\bin\ml64 /Cp /c /I"$(masm64)\Include" $(FILE_NAME) >> errors.txt
    18. if $(EXITCODE) !=0 goto exit
    19. $(masm64)\bin\link /SUBSYSTEM:windows /LIBPATH:"$(masm64)\Lib" /entry:WinMain $(NAME_PART).obj /LARGEADDRESSAWARE:NO /BASE:0x400000 /STUB:$(masm64)\bin\stubby.exe
    20. if $(EXITCODE) !=0 goto exit
    21. cmd /c $(NAME_PART).exe
    22. cmd /c del errors.txt
    23. cmd /c del $(NAME_PART).obj
    24. exit
    25. :exit
    26. con_loadfrom errors.txt

    Подсветка строк с ошибками в NppExec-консоли

    Notepad++ меню «Плагины» NppExec «Console Output Filters» вкладка «HighLight», включить 1-ый пункт и вписать:
    HighLight mask: "%FILE%(%LINE%) : error *" Red: "FF" Green: "00" BLue: "00"

    теперь, если щелкнуть по строке с ошибками в NppExec-консоли, тогда перенесет на строку с ошибкой в asm-файле
     
    mantissa нравится это.
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Здравствуйте, все!
    Вопрос о подсветке синтаксиса в Notepad++. Стандартная поставка → Меню пункт «Синтаксисы» → «A» → «Assembly». Вроде расцветка устраивает, но как добавить свертку по процедуре (proc-endp), структуре/объединению (struct/union-ends), блоку комментариев (comment символ-символ), целиком по секции (.data, .data?, .code). Пока нашел непонятный functionList→asm.xml, окраска ключевых слов в stylers.model.xml, сами ключевые слова в langs.model.xml
     
  17. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    352
    Mikl___, спасибо. Интересная идея. Тоже хочу попробовать (куда крестьяне - туда и Марфа Крива :) )

    P.S. А коротенькая сказочка про дяденьку Римуса о том, как он дурным примером спровоцировал браца Кролика поставить себе Notepad++ и плагин NppExec - будет? :)
     
    Последнее редактирование модератором: 26 мар 2023
  18. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    GRAFik, потерпи немного, всё опишу...
     
    GRAFik нравится это.
  19. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    138
    Прокачал скрипт для открытия нужного инструмента после компиляции не автоматом, а по запросу. После компиляции и отчистки не нужного прыгаем на метку DEBUG

    Код (Text):
    1. cmd /c del $(NAME_PART)_err.txt
    2. cmd /c del $(NAME_PART).obj
    3. cls
    4. goto DEBUG
    А там запрашиваем пользователя ввести в инпут 1 2 или 3, и в зависимости что введено открывается нужная программа, а если что-то другое или вообще ничего или окно ввода просто закрыть то завершаемся.
    Код (Text):
    1. :DEBUG
    2. echo "Для открытия x64dbg введите 1"
    3. echo "Для открытия hview введите 2"
    4. echo "Для открытия ResourceHacker введите 3"
    5. inputbox Enter...
    6. echo $(INPUT)
    7. if $(INPUT) == 1 then
    8.    goto X64DBG
    9. else if $(INPUT) == 2 then
    10.    goto HVIEW
    11. else if $(INPUT) == 3 then
    12.    goto RSCHACK
    13. else
    14.    cls
    15. endif
    16. exit
    17.  
    18. :X64DBG
    19. cls
    20. echo open dbg...
    21. exit
    22.  
    23. :RSCHACK
    24. cls
    25. echo rschacker
    26. exit
    27.  
    28. :HVIEW
    29. cls
    30. echo hview
    31. exit
    Итого:
    После компиляции:
    upload_2023-3-19_23-10-26.png
    Например хотим ResourceHacker - вводим 3 и получаем:
    upload_2023-3-19_23-11-43.png
    Только вместо простого echo уже подставим
     
    Mikl___ нравится это.
  20. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    340
    у вас там очепятка
    hview -> hiew
     
    mantissa нравится это.