Какой тип ассемблера мне нужен?
Я изучаю ассемблер, и мне действительно нравятся концепции простых инструкций PUSH и POP. Я действительно люблю вещи низкого уровня. Я следовал этому руководству, и это часть кода, из которого вы можете сделать простой.exe-файл:
MOV AH,02 ; Function to output a char
MOV DL,"!" ; Character to output
INT 21h ; Call the interrupt to output "!"
MOV AH,04Ch ; Select exit function
MOV AL,00 ; Return 0
INT 21h ; Call the interrupt to exit
Парень говорит, что вы можете собрать этот код с A86, но когда я зашел на их сайт, казалось, что он вымер, и версия программы доходила только до Windows XP? Есть ли ассемблер A86 для 64-битной Windows? Какой тип ассемблера использует эти ЧРЕЗВЫЧАЙНО простые инструкции? (Я не очень люблю MASM или FASM)
Спасибо!
PS У меня были программы обратного инжиниринга с Olly DBG, поэтому я больше изучал ассемблер и, следовательно, изучал PUSH, POP, MOV и INT.
1 ответ
Ну, учебник, который вы используете - это 16-битный код DOS, и он не будет работать на современных ОС. Изучите 32-битную сборку и вам станет лучше.
x86 Ассемблеры.
MASM - Ok, you don't like it
FASM - Now your being too picky.
NASM
YASM
RoASM
JWasm
GoASM
и несколько других. Если вам не нравится FASM, то вам, вероятно, не понравятся и другие.
Просто example.asm
программа, использующая простые инструкции x86, может выглядеть так:
example PROGRAM Format=PE,Entry=WinMain:
IMPORT MessageBoxA, Lib=user32.dll ; Declare used Windows functions.
IMPORT ExitProcess, Lib=kernel32.dll
WinMain: PUSH 0 ; Show MB_OK button in MessageBox.
PUSH ="I'm the box caption." ; Text in MessageBox title.
PUSH ="I'm the example program!" ; Text to show within MessageBox.
PUSH 0 ; MessageBox belongs to the desktop.
CALL MessageBoxA ; Invoke Windows function.
PUSH 0 ; Errorlevel to terminate with.
CALL ExitProcess ; Invoke Windows function.
ENDPROGRAM
Его можно преобразовать в example.exe
от €ASM с командойeuroasm example.asm
Если вы откажетесь от своего простого мазохизма программирования на ассемблере и научитесь использовать макросы, как рекомендует @Gunner, они инкапсулируют скучный повторяющийся материал и позволят вам сосредоточиться на самой сборке. Пример, в котором используется макрос WinAPI, будет намного короче:
example PROGRAM Format=PE,Entry=WinMain:
INCLUDE winapi.htm
WinMain: WinAPI MessageBox,Lib=user32.dll,0,="I'm the example program!",="I'm the box caption.",0
TerminateProgram 0
ENDPROGRAM