c - Write System Call Argument Registers -
i have piece of assembly code write system call (is correct?) via
call write@plt before doing so, values of rax, address rsp, edi, rsi , rdx set/modified.
how know registers used arguments write or system function calls in general?
my guess write it's rsp, edi , rsi since in c takes 3 arguments:
ssize_t write(int fd, const void *buf, size_t nbytes);
when call write@plt don't directly invoke write(2) system call, tiny wrapper around (a tiny c function syscall , sets errno on failure).
so write function using standard c calling convention, defined in abi (application binary interface). linux x86-64 read sysv abi interface x86-64
read vdso(7) find out bit more how syscalls done. others might use sysenter machine instruction, etc... details given in abi spec (stricto sensu, real syscall not using stack , passes arguments & results thru registers). read linux assembly howto (more focused on 32 bits x86).
also, c standard libraries linux free software, gnu glibc or perhaps musl-libc, etc... study source code understand exacty how write implemented.
Comments
Post a Comment