.data 部分中的两个元素
Two elements in section .data
我一直在尝试从 asm 中的 libc 执行 puts 函数,我一直在努力解决这个问题:如果传递给 puts 的参数是 null 那么它应该将“(null)\n”写入标准输出,否则它应该写字符串 + \n.
起初我试图在我的 .data 部分中声明两个元素,如下所示:
int puts(char *s);
section .data
nl db 10
null_msg db "(null)", 10
section .text
global _ft_puts
_ft_puts:
mov rax, rdi
cmp rdi, 0
jz nul
xor r9, r9
jmp len
len:
cmp byte[rdi + r9], 0
jz write
inc r9
jmp len
write:
mov rax, 0x2000004
mov rsi, rdi
mov rdi, 1
mov rdx, r9
syscall
mov rax, 0x2000004
lea rsi, [rel nl]
mov rdi, 1
mov rdx, 1
syscall
jmp return
nul:
mov rax, 0x2000004
mov rdi, 1
lea rsi, [rel null_msg]
mov rdx, 7
syscall
jmp return
return:
mov rax, 1
ret
它没有打印任何错误,但只打印了 null_msg。无论如何,我通过使用 null_msg 中的 \n 找到了解决方法,但我仍然很好奇。我正在使用 2015 年 3 月 10 日编译的 NASM 版本 2.11.08
我一直在尝试从 asm 中的 libc 执行 puts 函数,我一直在努力解决这个问题:如果传递给 puts 的参数是 null 那么它应该将“(null)\n”写入标准输出,否则它应该写字符串 + \n.
起初我试图在我的 .data 部分中声明两个元素,如下所示:
int puts(char *s);
section .data
nl db 10
null_msg db "(null)", 10
section .text
global _ft_puts
_ft_puts:
mov rax, rdi
cmp rdi, 0
jz nul
xor r9, r9
jmp len
len:
cmp byte[rdi + r9], 0
jz write
inc r9
jmp len
write:
mov rax, 0x2000004
mov rsi, rdi
mov rdi, 1
mov rdx, r9
syscall
mov rax, 0x2000004
lea rsi, [rel nl]
mov rdi, 1
mov rdx, 1
syscall
jmp return
nul:
mov rax, 0x2000004
mov rdi, 1
lea rsi, [rel null_msg]
mov rdx, 7
syscall
jmp return
return:
mov rax, 1
ret
它没有打印任何错误,但只打印了 null_msg。无论如何,我通过使用 null_msg 中的 \n 找到了解决方法,但我仍然很好奇。我正在使用 2015 年 3 月 10 日编译的 NASM 版本 2.11.08