Как прикрутить FASM к RadAsm. Пытаемся подружить 2 клёвых инструмента!
Опубликовал devprog на Февраль 24, 2009
Привет. Прошу прощение за долгое отсутствие новых материалов на блоге. Всё это гадская работа виновата. Итак, приступим к настройке!
• Скачиваем с офф.сайта вот этот архив: http://www.radasm.com/RadASM2000/Assembly.zip – он содержит файлы поддержки языков ассемблеров, таких как 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.
• Качаем http://www.jorgon.freeserve.co.uk/Gorcjorg.zip. 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 finishjINITDIALOG:
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-ленту новостей! Теперь ты не пропустишь возможность почитать новенькие заметки, на Блоге для Программистов!

Инокентий сказал
сделал всё как написано, 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.
devprog сказал
Хмм, ещё раз сделал всё то, о чём писал – всё работает ) кинь весь исходник своего *.asm файла, да и проверь заново все шаги последовательно.
>> missing end directive.
по видимому забыл поставить endp
Ivan_32 сказал
Кстати можно отредактировать файл 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 0×10CF0800
EXSTYLE 0×00000000
BEGIN
PUSHBUTTON «Exit»,IDC_BTN1,130,84,50,13,NOT 0×00820000|0×50010000,0×00000000
END
[*ENDTXT*]
Gavrilin сказал
Пора переименовать блог, присвоив название связанное с доменами :) может хватит про них?
Ivan_32 сказал
До сих пор не получается пути усатановить, что только не пробовал – толку ноль.
А у вас получилось?
Ivan_32 сказал
Решил проблему:
Папка INCLUDE должна быть в корне RadASM-а.
И тогда можно использовать вот такой путь:
include «..\..\..\INCLUDE\Win32a.inc»
При условии что проекты находятся в папках 3 уровня вложенности.
..\ – на директорию выше.
antiride сказал
Спасибочки автору. Возможно, в будущем я и действительно реализую аналогичную затею. :)