在 nasm 64 位中使用 printf 时出现分段错误
Segmentation fault when using printf in nasm 64bit
我正在尝试在 nasm 64 位 linux 中调用 printf。但是当我 运行 它时它会输出分段错误。我对齐堆栈,在字符串末尾添加一个 0 转义字符。但它仍然输出段错误。
代码:
section .data
_DATA1 db "aa", 0
section .text
global main
extern printf
main:
sub rsp, 16
lea r13, [_DATA1]
mov rdi, r13
call printf
add rsp, 16
mov rax, 0
ret
assemble 和 link 以及
nasm -f elf64 a.asm
gcc -no-pie a.o
我哪里做错了?
好的,我知道了。
原来我需要在 main
之后添加:
push rbp
mov rbp, rsp
因此代码如下所示:
section .data
_DATA1 db "aa", 0
section .text
global main
extern printf
main:
push rbp
mov rbp, rsp
sub rsp, 16
lea r13, [_DATA1]
mov rdi, r13
call printf
add rsp, 16
mov rax, 0
mov rsp, rbp
pop rbp
ret
我意识到这也是 gcc 所做的
我正在尝试在 nasm 64 位 linux 中调用 printf。但是当我 运行 它时它会输出分段错误。我对齐堆栈,在字符串末尾添加一个 0 转义字符。但它仍然输出段错误。
代码:
section .data
_DATA1 db "aa", 0
section .text
global main
extern printf
main:
sub rsp, 16
lea r13, [_DATA1]
mov rdi, r13
call printf
add rsp, 16
mov rax, 0
ret
assemble 和 link 以及
nasm -f elf64 a.asm
gcc -no-pie a.o
我哪里做错了?
好的,我知道了。
原来我需要在 main
之后添加:
push rbp
mov rbp, rsp
因此代码如下所示:
section .data
_DATA1 db "aa", 0
section .text
global main
extern printf
main:
push rbp
mov rbp, rsp
sub rsp, 16
lea r13, [_DATA1]
mov rdi, r13
call printf
add rsp, 16
mov rax, 0
mov rsp, rbp
pop rbp
ret
我意识到这也是 gcc 所做的