将
cpuid
的结果存储在未分配的内存空间buff
和numb
中后,我想为它们各自附加一个newline
字符。所以,我让未分配的空间比必要的长 1 个字节。
整个代码是:
section .bss
buff resb 13
numb resb 5
section .text
global _start
_start:
mov eax, 0
cpuid
mov dword [numb], eax
mov dword [buff+0], ebx
mov dword [buff+4], edx
mov dword [buff+8], ecx
mov byte [numb+4], newl
mov byte [buff+12], newl
mov rax, 1
mov rdi, 1
mov rsi, buff
mov rdx, 13
syscall
mov rax, 1
mov rdi, 1
mov rsi, numb
mov rdx, 5
syscall
mov rax, 60
mov rdi, 0
syscall
section .data:
newl: db 0x0A
我尝试追加一个换行符遵循与前几行相同的语法:
mov byte [numb+4], newl
mov byte [buff+12], newl
但是链接器产生这个错误:
$ nasm -f elf64 test_cpuid.s
$ ld -o test_cpuid test_cpuid.o
test_cpuid.o: in function `_start':
test_cpuid.s:(.text+0x2a): relocation truncated to fit: R_X86_64_8 against `.data:'
test_cpuid.s:(.text+0x32): relocation truncated to fit: R_X86_64_8 against `.data:'
如何解决这个问题?也许我使用了错误的语法?