我需要什么类型的汇编程序?

时间:2012-08-24 00:33:36

标签: assembly windows-7 x86 x86-64

我正在学习汇编,我非常喜欢裸PUSH和POP指令的概念。我真的很喜欢低级别的东西。我一直在关注this教程,这是你可以用一个简单的.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)

谢谢!

P.S。我一直在使用Olly DBG进行逆向工程,这就是为什么我一直在学习更多关于装配的知识,因此学习PUSH,POP,MOV和INT。

2 个答案:

答案 0 :(得分:2)

嗯,您使用的教程是16位DOS代码,这在现代操作系统上无效。学习32位装配,你会感觉更好。

x86汇编程序。

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

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

答案 1 :(得分: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

€ASM可以使用命令example.exe将其转换为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