Разработка с Far Manager

Тема в разделе "WASM.BEGINNERS", создана пользователем Aoizora, 3 июл 2019.

  1. Aoizora

    Aoizora Active Member

    Публикаций:
    0
    Регистрация:
    29 янв 2017
    Сообщения:
    351
    Впервые за долгое время начал пользоваться Far Manager и мне кажется, что у него большой потенциал для использования в разработке. Хочу использовать его для удобного решения обычных задач. Как, например, при помощи него работать с FASM и HIEW, компилируя что-то, редактируя, изучая результат в HIEW и снова редактируя? HIEW запускается в оболочке Far, но при перезапуске надо снова искать бинарник в дереве каталогов, потому что пути сбились. Можно ли использовать фар для работы с несколькими инструментами (компилятор, дизассемблер, консольный питон), чтобы не приходилось вспоминать, в каком окне что у меня открыто?
     
  2. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Aoizora,
    Это для работы с Far'ом

    F9CommandsFile AssociationsEnter Ins

    01.png

    A file mask or several file mask: → *.asm

    01.png

    Execute command (used for Enter):путь_к_fasm\FASMW.EXE ! («восклицательный знак» будет заменен на имя asm-файла без расширения)

    01.png

    Кликаешь по файлу с asm-расширением и запускается fasm для компиляции, выходишь из fasm и ты снова в той папке, где находится asm-файл


    F9CommandsFile AssociationsIns
    A file mask or several file mask: → *.exe
    Edit command (used for F4):
    путь_к_хьюву\hiew32.exe !.! («!.!» будет заменен на имя файла с расширением)
    Находишь exe-файл и нажимаешь F4, запускается hiew для редактирования твоего файла, выходишь из хьюва снова в ту же папку, где расположен экзешник.
    Как вариант

    Делаем в IDE FASM’a кнопку «Debug»
    и дружим его с OllyDbg
    (или, как хочет Aoizora с hiew'ом)


    статья была взята здесь

    Любое написание кода, особенно на ассемблере, не обходится без его отладки. Иначе, как искать ошибки и вообще тестировать своё творение? Как встроить в IDE FASM'a отладчик OllyDbg, так чтоб скомпилированная программа одним кликом запускалась в «Ольке»?
    1. Скомпилировать
    2. открыть файл с программой
    3. загрузить его в отладчик
    Куда проще ― кликнуть одну кнопку и код автоматически компилируется и автоматически загрузится в отладчик. Можно не парится с этой интеграцией и использовать BAT-файлы или скрипт на VBS, но, для этого нужно постоянно создавать, править файлы и т. д. и т. п...
    Всё, что нам нужно для того, чтобы встроить в IDE FASM’a отладчик OllyDbg ― это добавить в FASMW кнопку «Debug». И привязать к этой кнопке обработчик.
    Как OllyDbg принимает параметры при запуске? Например, вот так программа test.exe загрузится для отладки: C:\тут_путь_к_отладчику\OLLYDBG.EXE C:\путь_к_программе\test.exe Можно сделать BAT-файл или запускать этот «код» в командной строке. После запуска OLLYDBG.EXE получает в качестве параметров строку C:\путь_к_программе\test.exe и загружает для отладки файл test.exe, если он существует.
    Программно запустить OLLYDBG.EXE с параметрами можно функцией ShellExecute. На FASM’e это выглядит так:
    Код (ASM):
    1. ...
    2. invoke  ShellExecute,0,0,debugger,param,0,1
    3. ...
    4. debugger db "C:\тут_путь_к_отладчику\OLLYDBG.EXE",0
    5. param    db "C:\путь_к_программе\test.exe",0
    Нечто подобное нужно встроить в FASMW.
    Открываем сорцы фасма, нам нужен файл FASMW.ASM, файл находится в директории \SOURCE\IDE\FASMW. Открываем его. Ищем строку:
    Код (ASM):
    1. menuitem "&Run",0,MFR_POPUP
    Этот код отвечает за кнопки выпадающего меню «Run» в FASMW. Чуть ниже найденной строки можно заметить закомментированную строку
    Код (ASM):
    1. ;menuitem "&Debug" _ "F8",IDM_DEBUG
    Судя по всему, Tomasz Grysztar (автор FASM’a) предусмотрел, что нам может понадобится кнопочка «Debug» :) Раскомментируем эту строку, убрав знак «;». Теперь, если скомпилировать отредактированный исходник и запустить получившийся FASMW.EXE — тогда в выпадающем меню «Run» появится пункт подменю «Debug». Данная кнопка не выполняет не каких действий, пока это просто «пустышка». Нужно привязать к этой кнопке действие (обработчик). В качестве действия будет — запуск OLLYDBG c нужными параметрами. Запускать будем, как было сказано выше, с помощью функции ShellExecute. Правим дальше. Ищем кусок кода:
    Код (ASM):
    1. cmp     eax,IDM_COMPILE
    2. je      compile
    и после него вставляем:
    Код (ASM):
    1. cmp     eax,IDM_DEBUG
    2. je      debug
    Таким образом программа будет реагировать на нажатия на подменю «Debug» и прыгать на метку debug. Пишем обработчик. Ищем всё в том же исходнике FASMW.ASM такой код:
    Код (ASM):
    1. compile:
    2. and     [command_flags],0
    3. invoke  SendMessage,[hwnd],FM_COMPILE,0,TRUE
    4. jmp     finish
    и после него вставляем свой обработчик:
    Код (ASM):
    1. debug:
    2. and     [command_flags],0
    3. invoke  SendMessage,[hwnd],FM_COMPILE,0,FALSE
    4. or      eax,eax
    5. jnz     finish
    6. invoke  ShellExecute,0,0,debugger,path_buffer,0,1
    7. jmp     finish
    Часть этого кода взята из обработчика Run, он находится чуть выше. Вместо запуска скомпилированной программы, как это происходит в обработчике Run, мы вставили функцию ShellExecute и таким образом запускаем отладчик а в качестве параметров передаем путь к «свежесобранной» программе (path_buffer).
    В пределах секции «section ".data" data readable writeable» вписываем:
    Код (ASM):
    1. debugger rb 100h
    Я, например, это сделал тут:
    Код (ASM):
    1. param_buffer rd 10h
    2. user_colors rd 10h
    3. name_buffer rb 100h
    4. search_string rb 1000h
    5. replace_string rb 1000h
    6. string_buffer rb 2000h
    7. help_path rb 1000h
    8. ini_path rb 1000h
    9. path_buffer rb 4000h
    10. debugger rb 100h
    Данный буфер — «debugger rb 100h» нужен для записи пути к отладчику. Чтоб при смене путей к дебаггеру не нужно было каждый раз править и пересобирать исходник, путь к отладчику считывается из конфигурационного файла FASMW.INI Ищем в FASMW.ASM строки:
    Код (ASM):
    1. _section_help db "Help",0
    2. _key_help_path db "Path",0
    После них добавляем:
    Код (ASM):
    1. _section_debug db "debugger",0
    2. _key_debug_path db "Path",0
    Далее ищем строку:
    Код (ASM):
    1. invoke  GetPrivateProfileString,_section_help,_key_help_path,\
    2. help_path,help_path,1000h,ini_path
    Сразу после неё вставляем:
    Код (ASM):
    1. invoke  GetPrivateProfileString,_section_debug,_key_debug_path,\
    2. debugger,debugger,100h,ini_path
    Каждый раз при запуске FASMW будет читать свои файл конфигураций FASMW.INI, брать оттуда путь к отладчику и помещать его в тот самый буфер «debugger rb 100h»
    Всё это нужно для функции ShellExecute которую мы вписали выше.
    Код (ASM):
    1. ShellExecute, 0,0,debugger,path_buffer,0,1
    В буфере debugger — путь к отладчику. В path_buffer — путь к программе. Он же параметр для запуска отладчика.
    Компилируем подправленный FASMW.ASM.
    Последний штрих — открываем файл конфигураций FASM’a FASMW.INI (он всегда лежит в одной папке с FASM.EXE) и в самый конец или начало вписываем строки:
    Код (Text):
    1. [debugger]
    2. Path=C:\путь_к_отладчику\OLLYDBG.EXE
    Сохраняем,закрываем.
    Всё, теперь наш новый FASMW.EXE при запуске будет брать путь к отладчику из FASMW.INI.
    Тестируем новую программу. Берем любой исходник,открываем в новом FASMW.EXE, в меню «Run» жмем на подменю «Debug». Код должен скомпилироваться, а программа загрузится в отладчик. Один клик и никаких лишних движений [​IMG]
     

    Вложения:

    • 01.png
      01.png
      Размер файла:
      27,6 КБ
      Просмотров:
      461
    Последнее редактирование: 13 авг 2019