在x86-64 NASM中为外部函数传递参数 [重复] 。

问题描述 投票:0回答:1

在x86-32中,你可以 push 参数到堆栈,在x86-64中,它还使用一些特定的寄存器,并且只在它之后使用堆栈。说到这里,我不明白为什么我得到的是 Segmentation fault 当试图打印一个整数(ka 是未使用的)。)

    global _main
    extern _printf
    section .data
format:  db "%d"
b:  dw 10
blen: equ $-b
lenlen: equ $-blen
k:  dw 6
    section .bss
a:  resw 1
    section .text
_main:
    sub rsp, 8
    mov rax, 0
    mov rdi, format
    mov rsi, b
    call _printf
    mov rax, 0x2000001
    mov rdi, 0
    syscall
macos assembly x86-64 masm
1个回答
0
投票

在这种情况下,printf需要2个参数,一个指向格式字符串的指针(rdi)和值(rsi)。


这可能需要。

format  db      "%d",0         ;the 0 is needed
;       ...
        lea     rdi, format
© www.soinside.com 2019 - 2024. All rights reserved.