Впервые за долгое время начал пользоваться Far Manager и мне кажется, что у него большой потенциал для использования в разработке. Хочу использовать его для удобного решения обычных задач. Как, например, при помощи него работать с FASM и HIEW, компилируя что-то, редактируя, изучая результат в HIEW и снова редактируя? HIEW запускается в оболочке Far, но при перезапуске надо снова искать бинарник в дереве каталогов, потому что пути сбились. Можно ли использовать фар для работы с несколькими инструментами (компилятор, дизассемблер, консольный питон), чтобы не приходилось вспоминать, в каком окне что у меня открыто?
Aoizora, Это для работы с Far'ом F9 → Commands → File Associations → Enter → Ins A file mask or several file mask: → *.asm Execute command (used for Enter): → путь_к_fasm\FASMW.EXE ! («восклицательный знак» будет заменен на имя asm-файла без расширения) Кликаешь по файлу с asm-расширением и запускается fasm для компиляции, выходишь из fasm и ты снова в той папке, где находится asm-файл F9 → Commands → File Associations → Ins 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, так чтоб скомпилированная программа одним кликом запускалась в «Ольке»? Скомпилировать открыть файл с программой загрузить его в отладчик Куда проще ― кликнуть одну кнопку и код автоматически компилируется и автоматически загрузится в отладчик. Можно не парится с этой интеграцией и использовать 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): ... invoke ShellExecute,0,0,debugger,param,0,1 ... debugger db "C:\тут_путь_к_отладчику\OLLYDBG.EXE",0 param db "C:\путь_к_программе\test.exe",0 Нечто подобное нужно встроить в FASMW. Открываем сорцы фасма, нам нужен файл FASMW.ASM, файл находится в директории \SOURCE\IDE\FASMW. Открываем его. Ищем строку: Код (ASM): menuitem "&Run",0,MFR_POPUP Этот код отвечает за кнопки выпадающего меню «Run» в FASMW. Чуть ниже найденной строки можно заметить закомментированную строку Код (ASM): ;menuitem "&Debug" _ "F8",IDM_DEBUG Судя по всему, Tomasz Grysztar (автор FASM’a) предусмотрел, что нам может понадобится кнопочка «Debug» Раскомментируем эту строку, убрав знак «;». Теперь, если скомпилировать отредактированный исходник и запустить получившийся FASMW.EXE — тогда в выпадающем меню «Run» появится пункт подменю «Debug». Данная кнопка не выполняет не каких действий, пока это просто «пустышка». Нужно привязать к этой кнопке действие (обработчик). В качестве действия будет — запуск OLLYDBG c нужными параметрами. Запускать будем, как было сказано выше, с помощью функции ShellExecute. Правим дальше. Ищем кусок кода: Код (ASM): cmp eax,IDM_COMPILE je compile и после него вставляем: Код (ASM): cmp eax,IDM_DEBUG je debug Таким образом программа будет реагировать на нажатия на подменю «Debug» и прыгать на метку debug. Пишем обработчик. Ищем всё в том же исходнике FASMW.ASM такой код: Код (ASM): compile: and [command_flags],0 invoke SendMessage,[hwnd],FM_COMPILE,0,TRUE jmp finish и после него вставляем свой обработчик: Код (ASM): debug: and [command_flags],0 invoke SendMessage,[hwnd],FM_COMPILE,0,FALSE or eax,eax jnz finish invoke ShellExecute,0,0,debugger,path_buffer,0,1 jmp finish Часть этого кода взята из обработчика Run, он находится чуть выше. Вместо запуска скомпилированной программы, как это происходит в обработчике Run, мы вставили функцию ShellExecute и таким образом запускаем отладчик а в качестве параметров передаем путь к «свежесобранной» программе (path_buffer). В пределах секции «section ".data" data readable writeable» вписываем: Код (ASM): debugger rb 100h Я, например, это сделал тут: Код (ASM): param_buffer rd 10h user_colors rd 10h name_buffer rb 100h search_string rb 1000h replace_string rb 1000h string_buffer rb 2000h help_path rb 1000h ini_path rb 1000h path_buffer rb 4000h debugger rb 100h Данный буфер — «debugger rb 100h» нужен для записи пути к отладчику. Чтоб при смене путей к дебаггеру не нужно было каждый раз править и пересобирать исходник, путь к отладчику считывается из конфигурационного файла FASMW.INI Ищем в FASMW.ASM строки: Код (ASM): _section_help db "Help",0 _key_help_path db "Path",0 После них добавляем: Код (ASM): _section_debug db "debugger",0 _key_debug_path db "Path",0 Далее ищем строку: Код (ASM): invoke GetPrivateProfileString,_section_help,_key_help_path,\ help_path,help_path,1000h,ini_path Сразу после неё вставляем: Код (ASM): invoke GetPrivateProfileString,_section_debug,_key_debug_path,\ debugger,debugger,100h,ini_path Каждый раз при запуске FASMW будет читать свои файл конфигураций FASMW.INI, брать оттуда путь к отладчику и помещать его в тот самый буфер «debugger rb 100h» Всё это нужно для функции ShellExecute которую мы вписали выше. Код (ASM): ShellExecute, 0,0,debugger,path_buffer,0,1 В буфере debugger — путь к отладчику. В path_buffer — путь к программе. Он же параметр для запуска отладчика. Компилируем подправленный FASMW.ASM. Последний штрих — открываем файл конфигураций FASM’a FASMW.INI (он всегда лежит в одной папке с FASM.EXE) и в самый конец или начало вписываем строки: Код (Text): [debugger] Path=C:\путь_к_отладчику\OLLYDBG.EXE Сохраняем,закрываем. Всё, теперь наш новый FASMW.EXE при запуске будет брать путь к отладчику из FASMW.INI. Тестируем новую программу. Берем любой исходник,открываем в новом FASMW.EXE, в меню «Run» жмем на подменю «Debug». Код должен скомпилироваться, а программа загрузится в отладчик. Один клик и никаких лишних движений