汇编“Hello World"介绍帖
本帖最后由 孤星1119 于 2021-10-2 09:01 编辑我来啦!首先给大家介绍"Hello World"在Win32 汇编怎么写。
具体用的是FASM (flat assembler),虽然流行的也包括NASM,请注意区别并不在于CPU指令部分。
譬如, FASM可能会用:
entry start
section '.code' code executable readable
start:
......
......
但是NASM可能会用:
global _start
section .text
_start:
......
......
代码还是一样的。
不管是Windows还是Linux,最基本的可执行文件结构主要由Data Segment/Section(数据段)和Code Segment/Section(代码段)组成,但是Windows还多一样才能发挥功能,就是Import Table(就是示例中下方的Kernel32.dll那些).
format PE console
entry start
include 'win32a.inc'
section '.data' readable writable
_message db 'Hello World!',13,10,0
_msglen = $ - _message1
_dummy dd ?
section '.code' code readable writable executable
start:
invokeGetStdHandle, -11
invokeWriteConsole, eax, _message, dword , _dummy, 0
invokeExitProcess,0
section '.idata' import readable writable
library kernel32, 'KERNEL32.DLL'
import kernel32,\
GetStdHandle, 'GetStdHandle', \
ReadConsole, 'ReadConsoleA', \
WriteConsole, 'WriteConsoleA', \
ExitProcess,'ExitProcess'
参考资料
Win32 API:
https://docs.microsoft.com/en-us/windows/console/writeconsole
https://docs.microsoft.com/en-us ... eadsapi-exitprocess
另外,提醒一下,Windows的换行符是13+10(\r\n),而Linux只是10(\n)或0xA,这就是“Hello World"后面的换行符在两个操作系统都不一样的缘故。虽然如此,0x0(null)在尾端表示终止符。
最近玩Linux编程比较多,因此重点将会放在Linux的ELF64(虽然也有ELF32).
这是Linux x64的"Hello World"示例,比Windows的简单得多吧?
两者概念一样,都有一个File Descriptor,如果用作显示屏,就有StdIn和StdOut.
format ELF64 executable 3
segment readable executable
entry $
mov rdx,_msglen
lea rsi,
mov rdi,1 ; STDOUT
mov rax,1 ; sys_write
syscall
xor rdi,rdi
mov rax,60 ; sys_exit
syscall
segment readable writeable
_message db "Hello World!",10,0
_msglen = $ - _message
参考资料
Syscall: https://chromium.googlesource.co ... nstants/syscalls.md
Syscall x64 : 从0到3
每个不同的CPU(ARM,ARM64, x86, x64)都有不同的特定参数排列。
如arg0...arg5,r开头的内部寄存器属于64位(rax),e开头的内部寄存器属于32位(eax),没有e或r开头的属于16位(ax),l结尾的属于8位(al)。
大家也可以在Linux终端窗口输入”man 2 <syscall function>"如图所示:
man是manual的意思吧?
当然也有网页版本:
https://www.kernel.org/doc/man-pages/
好了,大概是这么多。我的中文电脑术语有限,还望指正。谢谢大家耐心跟贴,希望你也能获益一点,Assembly(汇编)其实很吸引人的。
不懂啊,孤星 谢谢孤星的仔细讲解,很专业,还有“参考资料”,真是用心了,稍微有点头绪了。先收藏了,哪天空的时候在研究一下~ simonzhd 发表于 2021-10-2 09:26
谢谢孤星的仔细讲解,很专业,还有“参考资料”,真是用心了,稍微有点头绪了。先收藏了,哪天空的时候在研 ...
十分感谢站长加精,而且你还收藏了,真的是宠坏我了,不过也鼓励了我应该分享知识,不仅一昧顾着积累知识为了荣誉。 james007 发表于 2021-10-2 09:10
不懂啊,孤星
C其实和汇编相当接近,你慢慢来就会培养兴趣了。 我另外制作的此介绍贴的HTML版本,欢迎打开看一看。
页:
[1]