x86_64 сборка, где-то хранится вывод записи syscall? - PullRequest
0 голосов
/ 21 октября 2019

Когда я выполняю системную запись в подпрограмме, будет ли где-то храниться вывод? Разве выходные данные подпрограммы не всегда сохраняются в% rax?

test:
    pushq %rbp
    movq %rsp, %rbp

    movq %rdi, %rsi
    movq $format_str, %rdi

    subq $8, %rsp

    pushq %rdi
    call sycall_subroutine

    movq %rax, %rdi
    call printf #segmentation fault

    movq %rbp, %rsp
    popq %rbp
    ret

sycall_subroutine:
    pushq %rbp
    movq %rsp, %rbp

    movq $1, %rax
    movq $1, %rdi
    movq 48(%rbp), %rsi 
    movq $1, %rdx 
    syscall

    mov $60, %rax 
    xor %rdi, %rdi
    syscall

    movq %rbp, %rsp
    popq %rbp
    ret

Этот код печатает один символ. Если я удаляю системный вызов close, я получаю ошибку сегментации. Итак, как мне сохранить результат записи системного вызова, чтобы я мог что-то сделать с ним позже?

...