Какой тип ассемблера мне нужен?

Я изучаю ассемблер, и мне действительно нравятся концепции простых инструкций 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
Другие вопросы по тегам