我正在学习汇编,我非常喜欢裸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。
答案 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