![]() |
eXeL@B —› Вопросы новичков —› FASM или MASM? |
<< . 1 . 2 . 3 . |
Посл.ответ | Сообщение |
|
Создано: 17 октября 2007 16:42 · Личное сообщение · #1 посоветуйте, пожалуйста, какой Ассемблер использовать... скажите, на чем пишите вы... я никак не могу сделать выбор: МАСМ32 или ФАСМ.... пишу под Win32 ![]() испробовал уже и МАСМ и ФАСМ... Читал статью Криса Касперски, там он назвал ФАСМ "игрушечным", поскольку он не поддерживает генерацию отладочной информации... и вообще, видно ему ФАСМ не нравится... мне ФАСМ нравится тем, что мало весит, имеет свою простую среду... позволяем писать под разные ОСЬки... но... на ВАСМе большинство примеров, вроде, с помощью МАСМ32... большинство пишет на МАСМе... RadASM и WinASM, AsmEdit написаны на МАСМ... много информации по МАСМу... вообще он очень популярный... по ФАСму мало документаций... вроде серьезных проектов не написанно на нем... когда прогу, написанную на ФАСМе, мой PEiD пишет "Nothing found", а вот когда на МАСМе - "MASM32/TASM32" - обидно ![]() он, вроде, стает все более и более популярным все-таки скажите, кто и что думает об этих двух Ассемберах=) ![]() |
|
Создано: 22 октября 2007 14:17 · Поправил: tnt17 · Личное сообщение · #2 |
|
Создано: 22 октября 2007 17:37 · Поправил: Necromancer13 · Личное сообщение · #3 |
|
Создано: 22 октября 2007 20:07 · Личное сообщение · #4 большой недостаток ФАСМа - нету assume... на МАСМе исходник выглядит таким маленьким, а на ФАСМе... я вообще запутался с программой и хз что делать... вот исходник: format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' struct SEH PrevLink dd ? CurrentHandler dd ? SafeOffset dd ? PrevEsp dd ? PrevEbp dd ? ends IDD_DLG1 = 1 MAXSIZE = 512 ButtonID = 3 section '.data' data readable writeable hInstance dd ? CommandLine dd ? ofn OPENFILENAME FilterString db 'EXE-files (*.exe), DLL-files (*.dll)',0,'*.exe;*.dll',0 db 'All Files (*.*)',0,'*.*',0,0 buffer rb MAXSIZE hFileRead dd ? hMapFile dd ? pMemory dd ? seh SEH section '.code' code readable writeable executable start: invoke GetModuleHandle,0 mov [hInstance],eax invoke GetCommandLine mov [CommandLine],eax invoke DialogBoxParam,[hInstance],IDD_DLG1,HWND_DESKTOP,DlgProc,0 invoke ExitProcess,eax proc DlgProc hWnd,uMsg,wParam,lParam cmp [uMsg],WM_INITDIALOG jz .initdialog cmp [uMsg],WM_CLOSE jz .wmclose cmp [uMsg],WM_COMMAND jz .wmcommand mov eax,FALSE ret .initdialog: mov [ofn.lStructSize],sizeof.OPENFILENAME push [hWnd] pop [ofn.hwndOwner] push [hInstance] pop [ofn.hInstance] mov [ofn.lpstrFilter],FilterString mov [ofn.lpstrFile],buffer mov [ofn.nMaxFile],MAXSIZE jmp _finish .wmclose: cmp [hMapFile],0 je @f call CloseMapFile @@: invoke EndDialog,[hWnd],0 jmp _finish .wmcommand: mov eax,[wParam] mov edx,eax shr edx,16 cmp dx,BN_CLICKED jne _finish cmp ax,ButtonID jne _finish mov [ofn.Flags],OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY invoke GetOpenFileName,ofn cmp eax,TRUE jne _finish invoke CreateFile,buffer,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING ,FILE_ATTRIBUTE_NORMAL,0 test eax,eax je _erroropen mov [hFileRead],eax invoke CreateFileMapping,[hFileRead],0,PAGE_READONLY,0,0,0 test eax,eax je _errormap mov [hMapFile],eax ;======================================= ;======================================= call CheckFile FinalExit: test ecx,ecx jne @next push [seh.PrevLink] pop dword[fs:0] invoke UnmapViewOfFile,[pMemory] jmp @f ValidText db 'It''s a valid PE file!',0 AppName db 'PE View',0 @@: invoke MessageBox,HWND_DESKTOP,ValidText,AppName,MB_ICONINFORMATION jmp _finish @next: push [seh.PrevLink] pop dword[fs:0] invoke UnmapViewOfFile,[pMemory] jmp @f InvalidText db 'It''s not a valid PE file!',0 @@: invoke MessageBox,HWND_DESKTOP,InvalidText,AppName,MB_ICONERROR jmp _finish ;======================================= ;======================================= _finish: mov eax,TRUE ret errop db 'Can not open file for reading',0 errmp db 'Can not map file',0 _erroropen: invoke MessageBox,HWND_DESKTOP,errop,AppName,MB_ICONERROR jmp _finish _errormap: invoke MessageBox,HWND_DESKTOP,errmp,AppName,MB_ICONERROR jmp _finish endp proc CloseMapFile invoke CloseHandle,[hMapFile] mov [hMapFile],0 invoke CloseHandle,[hFileRead] ret endp proc CheckFile invoke MapViewOfFile,[hMapFile],FILE_MAP_READ,0,0,0 test eax,eax je _mappingerror mov [pMemory],eax push dword[fs:0] pop [seh.PrevLink] mov [seh.CurrentHandler],SEHHandler mov [seh.SafeOffset],FinalExit mov eax,seh mov [fs:0],eax mov [seh.PrevEsp],esp mov [seh.PrevEbp],ebp mov edi,[pMemory] cmp word[edi],'MZ' jne .notmz add edi,dword[edi+3Ch] cmp dword[edi],00004550h je _valid xor ecx,ecx inc ecx ret .notmz: jmp @f NotMZ db 'MZ-signature is not found!',0 @@: invoke MessageBox,HWND_DESKTOP,NotMZ,AppName,MB_ICONERROR xor ecx,ecx inc ecx ret _mappingerror: jmp @f MappingError db 'Can not map file into memory!',0 @@: invoke MessageBox,HWND_DESKTOP,MappingError,AppName,MB_ICONERROR xor ecx,ecx inc ecx ret _valid: xor ecx,ecx ret endp proc SEHHandler pExcept,pFrame,pContext,pDispatch push edx mov edx,[pFrame] mov eax,[pContext] push dword[seh.SafeOffset] add dword[pContent],0B8h pop dword[pContent] sub dword[pContent],0B8h add dword[pContent],0C4h push dword[seh.PrevEsp] pop dword[pContent] sub dword[pContent],0C4h add dword[pContent],0B4h push dword[seh.PrevEbp] pop dword[pContent] sub dword[pContent],0B4h xor ecx,ecx inc ecx xor eax,eax pop edx ret endp section '.idata' import data readable writeable library user32,'user32.dll', kernel32,'kernel32.dll', comdlg32,'comdlg32.dll' include '%fasminc%\api\user32.inc' include '%fasminc%\api\kernel32.inc' include '%fasminc%\api\comdlg32.inc' section '.rsrc' resource from 'PEView.res' data readable ![]() |
|
Создано: 22 октября 2007 20:14 · Личное сообщение · #5 |
|
Создано: 22 октября 2007 20:47 · Поправил: tnt17 · Личное сообщение · #6 |
|
Создано: 22 октября 2007 20:55 · Личное сообщение · #7 |
|
Создано: 25 октября 2007 19:34 · Личное сообщение · #8 Necromancer13 пишет: или может кто-нить с вас писал что-то интересное?.. Я пробовал писать более-менее серьёзный проект на FASM'e. Теперь вот решил перегнать его на MASM или даже C++. Дописать до нормального состояния так и не удалось. Конечно, не стоит винить компилятор, но всё же я решил оставить FASM для мелочей и заплат, вот почему: 1. Нет отладочной информации, а она экономит кучу времени в серьёзном проекте. 2. Сложности с переходом на новые версии. Поменял версию (если не путаю с 1.62 на 1.67) и угробил целый день на перепах исходников из-за улученных макросов и более структурного подхода, а потом ещё более и ещё... 3. Бывает нужно написать (или заюзать) универсальную либу (быстро и надёжно), тут не нужны трюки и индивидуальная оптимизация до байта. ФАСМ для таких задач не очень подходит. Так что в больших проектах я за стандартность, а не за FASM. А для всяких хитрых штук вроде внедрения кода при снятии протов лучше FASM'a не найти. ----- Всем привет, я вернулся ![]() |
|
Создано: 25 октября 2007 19:44 · Личное сообщение · #9 Necromancer13 пишет: и там есть assume - с ним намного легче, можно все это сделать.. На самом деле assume практически не нужна. И под MASM и под FASM можно писать без лишних ЯВУ-наворотов если они не нужны, примерно так: fSetSEH: ; Процедура установки SEH
Единственное что нужно, так это определить структуру: struct _Seh
----- Всем привет, я вернулся ![]() |
|
Создано: 26 октября 2007 13:14 · Личное сообщение · #10 |
|
Создано: 03 ноября 2007 10:10 · Личное сообщение · #11 |
|
Создано: 04 ноября 2007 02:27 · Личное сообщение · #12 Necromancer13 пишет: а МАСМ - только Дос и Вин32 вроде... Я бы сказал шире: компилятор ассемблера от MS создан для ОСей MS (16,32,64 бита...). Что касается других ОСей - сам их не использую, но насколько мне известно, под nix'ы FASM пока тоже не получил массовой поддержки. Там есть свои компиляторы асма, к которым народ уже прикипел. Естественно, если соберусь писать свою ОСь, то даже задумываться не буду - FASM рулит... Вот только вряд ли меня потянет на такие приключения =). И вообще, я не спорю, иметь под рукой настолько гибкий компиль как FASM - очень полезно. Только гибкость "стержня" не всегда +. ----- Всем привет, я вернулся ![]() |
|
Создано: 04 ноября 2007 08:52 · Личное сообщение · #13 |
|
Создано: 05 ноября 2007 23:24 · Личное сообщение · #14 Честно говоря, согласен с Bitfry по поводу его мнения о мультиосности FASM, - да, это большой плюс, но скорее нужно это только серьезным системным программистам, пишушим ОС. А вообще, на мой взгляд, главное преимущество FASM, - он не требует установки, которая нужна MASM. Это, пожалуй, главное практическое преимущество этого ассемблера. Ну а в целом, нет смысла переходить на него ИМХО. Потому как есть огромный арсенал исходников, написанных под MASM, да и MASM написан мелкомягкими для своего же, мелкомягкого софта. ![]() ----- Программист SkyNet ![]() |
|
Создано: 05 ноября 2007 23:38 · Личное сообщение · #15 |
|
Создано: 07 ноября 2007 21:39 · Личное сообщение · #16 |
|
Создано: 08 ноября 2007 15:56 · Личное сообщение · #17 |
|
Создано: 08 ноября 2007 19:07 · Личное сообщение · #18 |
|
Создано: 08 ноября 2007 21:54 · Личное сообщение · #19 |
|
Создано: 09 ноября 2007 01:04 · Личное сообщение · #20 Мы вообще про что говорим? Про сборку MASM32 от Hutch'a? Или про компилятор от MS? asd пишет: Самараспаковывающийся архив там, а не инсталятор. Не совсем. MASM32 ещё батнички выполняет при установке (компилит свои либы, чтобы в архиве место не занимали). Но поскольку эта процедура не нуждается в повторении, никто не мешает копировать уже проставленный MASM32. А на будущее, ещё не известно, будет ли вообще кто-то заниматься проектом MASM64 (полноценной сборкой с нормальными инклудами). Если нет - то я уйду в VS... и буду больше писать на FASM'e =) ----- Всем привет, я вернулся ![]() |
|
Создано: 09 ноября 2007 05:12 · Личное сообщение · #21 [quote] Если нет - то я уйду в VS... и буду больше писать на FASM'e =) [/quote] а что это VS?.. а FASMа классно, что кросплатформенный, под разные ОСи писать можно... а у МАСМа то, что он стандартный, его синтаксис считается стандартным и большинство учебников для МАСМа... RadASM, ASMEdit, WinASM, ResEd..... написанные на МАСМе... ![]() ![]() ![]() ![]() |
|
Создано: 11 ноября 2007 18:02 · Личное сообщение · #22 |
<< . 1 . 2 . 3 . |
![]() |
eXeL@B —› Вопросы новичков —› FASM или MASM? |