0

我正在学习汇编,我真的很喜欢裸 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?是否有适用于 Windows 64 位的 A86 汇编程序?什么类型的汇编器使用这些极其简单的指令?(我不太喜欢 MASM 或 FASM)

谢谢!

PS 我一直在使用 Olly DBG 进行逆向工程程序,这就是为什么我一直在学习更多关于汇编的知识,因此也学习了 PUSH、POP、MOV 和 INT。

4

2 回答 2

2

好吧,您正在使用的教程是 16 位 DOS 代码,并且不适用于现代操作系统。学习 32 位汇编,你会过得更好。

x86 汇编程序。

MASM - Ok, you don't like it
FASM - Now your being too picky.
NASM 
YASM
RoASM
JWasm
GoASM

和其他一些人。如果您不喜欢 FASM,那么您可能也不会喜欢其他人。

于 2012-08-24T02:12:17.393 回答
0

一个使用普通 x86 指令的简单example.asm程序可能如下所示:

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
于 2020-06-25T19:15:30.377 回答