Сейчас на форуме: vsv1, _MBK_ (+3 невидимых)

 eXeL@B —› Вопросы новичков —› FASM или MASM?
<< . 1 . 2 . 3 .
Посл.ответ Сообщение

Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 17 октября 2007 16:42
· Личное сообщение · #1

посоветуйте, пожалуйста, какой Ассемблер использовать...
скажите, на чем пишите вы...

я никак не могу сделать выбор: МАСМ32 или ФАСМ....
пишу под Win32

испробовал уже и МАСМ и ФАСМ...

Читал статью Криса Касперски, там он назвал ФАСМ "игрушечным", поскольку он не поддерживает генерацию отладочной информации... и вообще, видно ему ФАСМ не нравится...

мне ФАСМ нравится тем, что мало весит, имеет свою простую среду...
позволяем писать под разные ОСЬки...

но... на ВАСМе большинство примеров, вроде, с помощью МАСМ32...

большинство пишет на МАСМе...

RadASM и WinASM, AsmEdit написаны на МАСМ...

много информации по МАСМу... вообще он очень популярный...

по ФАСму мало документаций...
вроде серьезных проектов не написанно на нем...
когда прогу, написанную на ФАСМе, мой PEiD пишет "Nothing found", а вот когда на МАСМе - "MASM32/TASM32" - обидно

он, вроде, стает все более и более популярным

все-таки скажите, кто и что думает об этих двух Ассемберах=)




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 22 октября 2007 14:17 · Поправил: tnt17
· Личное сообщение · #2

Necromancer13
На васме есть пост Asterix-а, там он создает PE файл полностью в ручную, советую найти и посмотреть.
https://wasm.ru/forum/viewtopic.php?pid=160056#p160056

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 22 октября 2007 17:37 · Поправил: Necromancer13
· Личное сообщение · #3

спасибо=)



Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 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





Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 22 октября 2007 20:14
· Личное сообщение · #5

код на МАСМе меньше почти в два-три раза!
и там есть assume - с ним намного легче, можно все это сделать...
но..... масм только под Вин32((




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 22 октября 2007 20:47 · Поправил: tnt17
· Личное сообщение · #6

Necromancer13
смотри в стандартных макросах файл MASM.INC
в итоге, там идет преобразование к фасм синтаксису: virtual at ...

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 22 октября 2007 20:55
· Личное сообщение · #7

м... знакомый мне тоже говорил, что virtual at круче...
наверно рано мне такие проги писать как проверка файла на валидность, если я не знаю, что это virtual at...



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 25 октября 2007 19:34
· Личное сообщение · #8

Necromancer13 пишет:
или может кто-нить с вас писал что-то интересное?..


Я пробовал писать более-менее серьёзный проект на FASM'e.
Теперь вот решил перегнать его на MASM или даже C++.
Дописать до нормального состояния так и не удалось.
Конечно, не стоит винить компилятор, но всё же я решил оставить FASM для мелочей и заплат, вот почему:
1. Нет отладочной информации, а она экономит кучу времени в серьёзном проекте.
2. Сложности с переходом на новые версии.
Поменял версию (если не путаю с 1.62 на 1.67) и угробил целый день на перепах исходников из-за улученных макросов и более структурного подхода, а потом ещё более и ещё...
3. Бывает нужно написать (или заюзать) универсальную либу (быстро и надёжно), тут не нужны трюки и индивидуальная оптимизация до байта. ФАСМ для таких задач не очень подходит.
Так что в больших проектах я за стандартность, а не за FASM.
А для всяких хитрых штук вроде внедрения кода при снятии протов лучше FASM'a не найти.

-----
Всем привет, я вернулся




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 25 октября 2007 19:44
· Личное сообщение · #9

Necromancer13 пишет:
и там есть assume - с ним намного легче, можно все это сделать..

На самом деле assume практически не нужна.
И под MASM и под FASM можно писать без лишних ЯВУ-наворотов если они не нужны, примерно так:
fSetSEH: ; Процедура установки SEH

;>EAX - SafeOffset,
;>EBX - указатель на экземпляр структуры SEH

push dword [FS:0] ; сохраняем адрес предыдущего SEH-обработчика
pop [EBX+_Seh.PrevLink]
mov [EBX+_Seh.CurrentHandler], fSEH ; записываем адрес нашего SEH-обработчика
mov [EBX+_Seh.SafeOffset], EAX ; адрес приземления
mov [fs:0], EBX ; устанавливаем SEH

mov [EBX+_Seh.PrevEsp],ESP ; сохроняем состояние стека
add [EBX+_Seh.PrevEsp],4 ; + CallBack
mov [EBX+_Seh.PrevEbp],EBP
ret
;endp

Единственное что нужно, так это определить структуру:

struct _Seh
PrevLink dd ? ; the address of the previous seh structure
CurrentHandler dd ? ; the address of the new exception handler
SafeOffset dd ? ; the offset where it's safe to continue execution
PrevEsp dd ? ; the old value in esp
PrevEbp dd ? ; The old value in ebp
ends


-----
Всем привет, я вернулся





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 26 октября 2007 13:14
· Личное сообщение · #10

=) Bitfry, знакомый кодес ))

-----
invoke OpenFire




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 03 ноября 2007 10:10
· Личное сообщение · #11

Bitfry, но ФАСМ пользоляет писать под разные ОС!
а МАСМ - только Дос и Вин32 вроде...
возможно на МАСМе еще под какие-то ОС писать как-то?



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 04 ноября 2007 02:27
· Личное сообщение · #12

Necromancer13 пишет:
а МАСМ - только Дос и Вин32 вроде...

Я бы сказал шире: компилятор ассемблера от MS создан для ОСей MS (16,32,64 бита...).

Что касается других ОСей - сам их не использую, но насколько мне известно, под nix'ы FASM пока тоже не получил массовой поддержки. Там есть свои компиляторы асма, к которым народ уже прикипел.

Естественно, если соберусь писать свою ОСь, то даже задумываться не буду - FASM рулит... Вот только вряд ли меня потянет на такие приключения =).

И вообще, я не спорю, иметь под рукой настолько гибкий компиль как FASM - очень полезно. Только гибкость "стержня" не всегда +.

-----
Всем привет, я вернулся




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 04 ноября 2007 08:52
· Личное сообщение · #13

Ой что творится Народ асм учит, в то время, как я его почти забыл От себя посоветую масм, ибо хорошо потом куски в сишные проги вставять, если понадобится, менять почти ничего не надо. Хотя тоже сомнительный +, т.к. чем болье я узнаю си, те меньше там становится асм вставок. сейчас уже почти нет.




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 05 ноября 2007 23:24
· Личное сообщение · #14

Честно говоря, согласен с Bitfry по поводу его мнения о мультиосности FASM, - да, это большой плюс, но скорее нужно это только серьезным системным программистам, пишушим ОС. А вообще, на мой взгляд, главное преимущество FASM, - он не требует установки, которая нужна MASM. Это, пожалуй, главное практическое преимущество этого ассемблера.
Ну а в целом, нет смысла переходить на него ИМХО. Потому как есть огромный арсенал исходников, написанных под MASM, да и MASM написан мелкомягкими для своего же, мелкомягкого софта.

-----
Программист SkyNet




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 05 ноября 2007 23:38
· Личное сообщение · #15

Вот только вряд ли меня потянет на такие приключения =).
вот повезло.... а меня потянуло ='(



Ранг: 8.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 07 ноября 2007 21:39
· Личное сообщение · #16

Не знаю кому как но мне MASM больше по душе! (статьи все о нём)



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 08 ноября 2007 15:56
· Личное сообщение · #17

FrenFolio пишет:
А вообще, на мой взгляд, главное преимущество FASM, - он не требует установки, которая нужна MASM.

Никогда за масмом такого не замечал.



Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 08 ноября 2007 19:07
· Личное сообщение · #18

[quote]Никогда за масмом такого не замечал.[/quote]
это как так?? обычно скачивается инсталляционный файлик, который его инсталлит...



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 08 ноября 2007 21:54
· Личное сообщение · #19

Самараспаковывающийся архив там, а не инсталятор.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 09 ноября 2007 01:04
· Личное сообщение · #20

Мы вообще про что говорим? Про сборку MASM32 от Hutch'a? Или про компилятор от MS?
asd пишет:
Самараспаковывающийся архив там, а не инсталятор.

Не совсем. MASM32 ещё батнички выполняет при установке (компилит свои либы, чтобы в архиве место не занимали).
Но поскольку эта процедура не нуждается в повторении, никто не мешает копировать уже проставленный MASM32.

А на будущее, ещё не известно, будет ли вообще кто-то заниматься проектом MASM64 (полноценной сборкой с нормальными инклудами).
Если нет - то я уйду в VS... и буду больше писать на FASM'e =)

-----
Всем привет, я вернулся




Ранг: 9.8 (гость)
Активность: 0.020
Статус: Участник

Создано: 09 ноября 2007 05:12
· Личное сообщение · #21

[quote]
Если нет - то я уйду в VS... и буду больше писать на FASM'e =)
[/quote]
а что это VS?..

а FASMа классно, что кросплатформенный, под разные ОСи писать можно...

а у МАСМа то, что он стандартный, его синтаксис считается стандартным и большинство учебников для МАСМа...
RadASM, ASMEdit, WinASM, ResEd..... написанные на МАСМе...





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 11 ноября 2007 18:02
· Личное сообщение · #22

Necromancer13 пишет:
а что это VS?

Visual Studio

-----
EnJoy!



<< . 1 . 2 . 3 .
 eXeL@B —› Вопросы новичков —› FASM или MASM?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати