DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Как прикрутить FASM к RadAsm. Пытаемся подружить 2 клёвых инструмента!

Posted by devprog на Февраль 24, 2009

Привет. Прошу прощение за долгое отсутствие новых материалов на блоге. Всё это гадская работа виновата. Итак, приступим к настройке!

• Скачиваем с офф.сайта вот этот архив:  пакет RadASMон содержит файлы поддержки языков ассемблеров, таких как MASM, FASM, TASM, NASM… Нам, из этого архива, нужны только файлы и папки, в названиях которых, наш пытливый мозг может обнаружить вхождения подстроки “fasm”. Эти файлы и папки нужно записать в корень директория с установленным RadAsm! Например, RadAsm у нас установлен в: D:\Utilites\RadAsm\ – значит туда и кидаем следующие файлы:

1. Папка FASM полностью в D:\Utilites\RadAsm\

2. Файл fasm.ini тоже кидаем в D:\Utilites\RadAsm\

3. Файл fasm.ct из папки Addins кидаем в D:\Utilites\RadAsm\Addins\

 

• Скачиваем сам компилятор, если не скачали с сайта http://www.flatassembler.net/download.php и открываем архив. Из него нам нужны вот эти файл и папка:

1. Файл FASM.EXE пишем в D:\Utilites\RadAsm\

2. Папку INCLUDE засунем в D:\Utilites\RadAsm\

Этим мы переписали сам компилятор ассемблера и директорию с инклудниками в папку с RadAsm.

 

• Качаем GoRC.exe. GORC – это компилялка ресурсов. Архив распаковываем ровно в ту папку, куда записывали всё до этого, всмысле вот сюда: D:\Utilites\RadAsm\

 

• Открываем RadAsm.exe | Настройки | Programming Languages | Добавляем fasm.ini | Жмём Add | OK

 

• Создаём новый проект, выбираем из списка компилятор fasm! Выбираем шаблон win32dlg.tpl. Теперь удаляем в процедуре DlgProc директиву enter, а директиву return меняем на ret! Тем самым, должны получить следующий код процедуры DlgProc:

proc DlgProc,hWnd,uMsg,wParam,lParam
push edi esi ebx
; удалили enter
mov eax,[uMsg]
cmp eax,WM_COMMAND
je jCOMMAND
cmp eax,WM_INITDIALOG
je jINITDIALOG
cmp eax,WM_CLOSE
je jCLOSE
xor eax,eax
jmp finish

jINITDIALOG:
mov eax,[hWnd]
mov [gWnd],eax

mov eax,1
jmp finish

jCOMMAND:
mov eax,[wParam]
cmp eax,1000
je a1000
xor eax,eax
jmp finish

a1000:
invoke SendMessage,[hWnd],WM_CLOSE,0,0
mov eax,1
jmp finish

jCLOSE:
invoke EndDialog,[hWnd],0
mov eax,1

finish:
pop ebx esi edi
ret
endp

 

• Ассемблируем проект! Всё должно получиться, и вы увидите простую форму с одной кнопкой. Если вам что нибудь не ясно – спрашивайте, не стесняйтесь. Я всегда рад общению. Настройка RadAsm+FASM успешно завершена.

 

Понравилась заметка? Хочешь продолжать читать мой блог? Тогда, подпишись на мою RSS-ленту новостей! Теперь ты не пропустишь возможность почитать новенькие заметки, на Блоге для Программистов!

Advertisements

комментариев 9 to “Как прикрутить FASM к RadAsm. Пытаемся подружить 2 клёвых инструмента!”

  1. Инокентий said

    сделал всё как написано, RadASM выдаёт ошибку:

    1.asm [20]: ;назвал так для примера
    proc DlgProc,hWnd,uMsg,wParam,lParam
    E:\fasmw\INCLUDE\macro/proc32.inc [53] proc [2]:
    \{ define@proc name,<params \} }
    E:\fasmw\INCLUDE\macro/proc32.inc [82] define@proc [1]:
    if used name
    error: missing end directive.

  2. devprog said

    Хмм, ещё раз сделал всё то, о чём писал — всё работает ) кинь весь исходник своего *.asm файла, да и проверь заново все шаги последовательно.
    >> missing end directive.
    по видимому забыл поставить endp

  3. Ivan_32 said

    Кстати можно отредактировать файл Win32Dlg.tpl что сразу убирался этот Enter и Return.
    Посколько я так и не сделал себе абсолютный путь для инклудов, то я еще и прописал в нем полный путь к инклудам — C:\INCLUDE\

    Win32 App
    TestIt
    Win32 dialog app
    [*BEGINPRO*]
    [*BEGINDEF*]
    [MakeDef]
    Menu=1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0
    1=4,O,GORC /r,1
    2=5,O,FASM,2,5
    3=0,
    4=0,0,,5
    5=
    6=
    7=0,0,»$E\OllyDbg»,5
    11=4,O,GORC /r,1
    12=5,O,FASM,2,5
    13=0,
    14=0,0,,5
    15=
    16=
    17=0,0,»$E\OllyDbg»,5
    [MakeFiles]
    0=TestIt.rap
    1=TestIt.rc
    2=TestIt.asm
    3=TestIt.obj
    4=TestIt.res
    5=TestIt.exe
    6=TestIt.def
    7=TestIt.dll
    8=TestIt.txt
    9=TestIt.lib
    10=TestIt.mak
    [Resource]
    [StringTable]
    [Accel]
    [VerInf]
    [Group]
    Group=Added files,Assembly,Resources,Misc,Modules
    1=2
    2=2
    3=3
    4=3
    [*ENDDEF*]
    [*BEGINTXT*]
    TestIt.Asm
    format PE GUI 4.0
    entry MyEntry

    include ‘C:\INCLUDE\Win32ax.inc’

    section ‘.data’ data readable writeable

    gIst dd 0
    gWnd dd 0

    section ‘.code’ code readable executable

    MyEntry:
    invoke GetModuleHandle,eax
    mov [gIst],eax
    invoke DialogBoxParam,eax,1,0,DlgProc,0
    ExitApp:
    invoke ExitProcess,0

    proc DlgProc,hWnd,uMsg,wParam,lParam
    push edi esi ebx

    mov eax,[uMsg]
    cmp eax,WM_COMMAND
    je jCOMMAND
    cmp eax,WM_INITDIALOG
    je jINITDIALOG
    cmp eax,WM_CLOSE
    je jCLOSE
    xor eax,eax
    jmp finish

    jINITDIALOG:
    mov eax,[hWnd]
    mov [gWnd],eax

    mov eax,1
    jmp finish

    jCOMMAND:
    mov eax,[wParam]
    cmp eax,1000
    je a1000
    xor eax,eax
    jmp finish

    a1000:
    invoke SendMessage,[hWnd],WM_CLOSE,0,0
    mov eax,1
    jmp finish

    jCLOSE:
    invoke EndDialog,[hWnd],0
    mov eax,1

    finish:
    pop ebx esi edi
    ret
    endp

    section ‘.idata’ import data readable writeable

    library kernel32, ‘KERNEL32.DLL’,\
    user32, ‘USER32.DLL’

    include ‘C:\INCLUDE\APIA\Kernel32.inc’
    include ‘C:\INCLUDE\APIA\User32.inc’

    section ‘.rsrc’ resource from ‘TestIt.res’ data readable
    [*ENDTXT*]
    [*BEGINTXT*]
    TestIt.Inc
    [*ENDTXT*]
    [*BEGINTXT*]
    TestIt.Rc
    #include
    [*ENDTXT*]
    [*BEGINBIN*]
    TestIt.dlg
    6500000001000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    00000000000000004D532053616E732053657269660000000000000000000000
    000000000000000008000000F5FFFFFF00000000E80300000000000000000000
    000000000000000097050ABF0000000022030C0001000000EB4D410024030C00
    000000000008CF10000000000A0000000A0000002C010000C80000004944445F
    444C470000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000001000000494444
    5F444C4731000000000000000000000000000000000000000000000000000000
    00000000002A030F000000000022F4D57722030C000000000000000150000000
    00C30000008A0000004C000000160000004578697400544E0000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    0000040000000400000000000000E80300004944435F42544E31000000000000
    0000000000000000000000000000000000000000000000000000
    [*ENDBIN*]
    [*ENDPRO*]
    [*BEGINTXT*]
    Res\TestItDlg.Rc
    #define IDD_DLG1 1
    #define IDC_BTN1 1000
    IDD_DLG1 DIALOGEX 6,6,194,106
    CAPTION «IDD_DLG»
    FONT 8,»MS Sans Serif»
    STYLE 0x10CF0800
    EXSTYLE 0x00000000
    BEGIN
    PUSHBUTTON «Exit»,IDC_BTN1,130,84,50,13,NOT 0x00820000|0x50010000,0x00000000
    END
    [*ENDTXT*]

  4. Gavrilin said

    Пора переименовать блог, присвоив название связанное с доменами :) может хватит про них?

  5. Ivan_32 said

    До сих пор не получается пути усатановить, что только не пробовал — толку ноль.
    А у вас получилось?

  6. Ivan_32 said

    Решил проблему:
    Папка INCLUDE должна быть в корне RadASM-а.
    И тогда можно использовать вот такой путь:
    include «..\..\..\INCLUDE\Win32a.inc»
    При условии что проекты находятся в папках 3 уровня вложенности.
    ..\ — на директорию выше.

  7. antiride said

    Спасибочки автору. Возможно, в будущем я и действительно реализую аналогичную затею. :)

  8. matrix said

    Все сделал как выше. После компиляции Fasm выдает include ‘%fasminc%\Win32a.inc’
    error: file not found.

    Make error(s) occured.Fasm не может найти инклудники.Все перепробывал но не помогает.Как правильно
    установить путь к этим долбанным инклудникам.

  9. Linkey said

    Все вроде сделал правильно! при компиляции выскакивает error «Error during process creation» не знаю почему, ща попробую с масм может че нить выдет если знаете что это может быть напишите. Спасибо!

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

 
%d такие блоггеры, как: