On Linux i386, the int $0x80 syscall ABI makes it easy to perform syscalls without having a valid userspace stack. The vdso/vsyscall interface, on the other hand, requires access to a stack. How do other Linux ports fare in this regard, especially x86_64? Do they have ways to make syscalls without a stack? Is there a reference on the available syscall methods for each arch?
Making syscalls on Linux without a stack
1.1k Views Asked by R.. GitHub STOP HELPING ICE At
1
There are 1 best solutions below
Related Questions in C
- Passing arguments to main in C using Eclipse
- kernel module does not print packet info
- error C2016 (C requires that a struct or union has at least one member) and structs typedefs
- Drawing with ncurses, sockets and fork
- How to catch delay-import dll errors (missing dll or symbol) in MinGW(-w64)?
- Configured TTL for A record(s) backing CNAME records
- Allocating memory for pointers inside structures in functions
- Finding articulation point of undirected graph by DFS
- C first fgets() is being skipped while the second runs
- C std library don't appear to be linked in object file
- gcc static library compilation
- How to do a case-insensitive string comparison?
- C programming: Create and write 2D array of files as function
- How to read a file then store to array and then print?
- Function timeouts in C and thread
Related Questions in LINUX
- How do I recursively find and replace only in files named index.php on Linux webserver?
- passing text with \n as one argument in shell
- kernel module does not print packet info
- How to send ESC/POS commands to thermal printer in Linux
- (x64 Nasm) Writeline function on Linux
- How do I set the Hive user to something different than the Spark user from within a Spark program?
- Default priority of thread with SCHED_FIFO
- Calling a python function with options from shell script
- How to split a directory into parts without compressing or archiving?
- Cross compile simple standard C program on Linux for Mac
- How to offload NAPI poll function to workqueue
- python netifaces - How to get currently used network interface
- Unexpected output from function
- mingw-64 conflicting declarations when cross-compiling
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
Related Questions in ASSEMBLY
- (x64 Nasm) Writeline function on Linux
- Is the compiler Xcode uses to produce Assembly code a bad compiler?
- Why do we need AX instead of MOV DS, data directly with a segment?
- Bootloader in Assembly with Linux kernel
- How should the byte sequence 0x40 0x55 be interpreted by an x86-64 emulator?
- C++ code into assembly
- Drawing circles of increasing radius
- Assembly print on screen using pop ecx
- Equivalent to asm volatile in Gfortran?
- Show 640x480 BMP image with inline ASM c++
- Keep track of numbers entered in by a user in assembly
- 8086 Assembly Arrays with I/O
- DB ASM variable in Inline ASM C++
- What does Jump to means in callgrind?
- How to convert binary into decimal in assembly x8086?
Related Questions in SYSTEM-CALLS
- Error when calling gcc with system() or popen() in Windows
- setenv, and getenv documentation
- How is a Linux kernel task's stack pointer determined for each thread?
- getrandom syscall in C not found
- How to uninitialize the entropy of /dev/urandom in C?
- Linux : /proc/<PID>/exe return path to executable '/bin/bash' for process located at '/home/<USER>/new/v'
- How to trace system calls in FreeBSD from source code?
- Two addresses in kernel Call Trace
- ret_from_syscall source code and when it is called
- Getting 'ímplicit declaration of function' error while adding a system call in Linux
- Passing custom flags to "open" in a device driver
- How to add rules in Linux kernel Makefile
- Solving mprotect() syscall failure
- Catching SIGINT signal to terminate a custom shell
- use exec with a command typed from keyboard
Related Questions in ABI
- Efficient and safe passing of data over C-style plugin interface
- Cxx11 ABI for a single function call?
- How to call Fortran routine with unit number argument from C
- x86_64 ABI: disassembly issue
- How to safely deploy an application built with an upgraded compiler
- Is it safe to package C++11 software on current Linux distributions?
- What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code?
- env->NewStringUTF(s) get crash and different ABI version returning different string value
- g++ generating the "complete object allocating constructor"
- Android 32-bit service on aarch64
- C++ / Fortran inter language ABI issues with older versions of GCC
- Making syscalls on Linux without a stack
- What is the format of the x86_64 va_list structure?
- Automatic conversion of stucture to pointer in function call
- Does changing f(mystruct *a) to f(const mystruct *a) breaks API/ABI in C?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
In general: no idea. Even on i386, if there is a 6th argument, it must be passed on the stack (e.g. for
mmap).For x86_64 specifically: put the syscall number in
%rax(beware: the syscall numbers are allocated completely differently to the 32-bit ones), up to 6 arguments in%rdi,%rsi,%rdx,%r10,%r8and%r9(which is almost, but not quite, the same as the usual ABI for parameter passing in registers - note use of%r10instead of%rcx), and use thesyscallinstruction. The result is returned in%rax, and%rcxand%r11are clobbered.x86_64 ABI information can be found at http://www.x86-64.org/documentation/abi.pdf; the Linux ABI is documented in the appendix. (And if looking around elsewhere for x86_64 ABI info, be aware that 64-bit Windows uses its own different ABI.)
I don't believe there is any requirement on the user stack frame for
syscallto work properly. In the case of being interrupted by a signal, a sane stack is obviously required for the handler; but the following experiment, which uses an alternate signal stack and deliberately trashes%rsparound thesyscall, works fine for me: