【发布时间】:2020-12-23 04:59:55
【问题描述】:
我在带有 x64 程序集的 linux 上使用 nasm。
我已经编写了一些有效的 hello world 类型的程序,并开始想知道是否可以打印单个字符而不必有数据部分。我认为这样的事情会起作用,但它不起作用,我不明白为什么。
section .text
global _start
_start:
mov rdx, 1 ;length - 1 character
mov rcx, 0x41 ;character 'A'
mov rbx, 1 ;stdout
mov rax, 4 ;write syscall
int 0x80 ;kernel interrupt
mov rax, 1 ;exit syscall
int 0x80 ;kernel interrupt
【问题讨论】:
-
不,你当然不需要
.data部分;或任何静态数据。但是write需要一个指针,而不是一个值。你可以push 'A'/mov rsi, rsp。但当然,您需要使用 64 位syscallABI 而不是 32 位int 0x80ABI 才能使用 64 位指针。 -
优秀。谢谢!在这种情况下,堆栈似乎是处理指针的一种更简单的方法。