【linux – 如何查找程序使用的系统调用类型】教程文章相关的互联网学习教程文章

为什么我们不能通过Linux中的system()系统调用来更改目录?【代码】

system ("cd ..");这不会产生任何错误,但也没有任何意义.为什么?解决方法:system()函数使fork()创建一个进程,该进程是初始进程的副本. 当前目录取决于进程的环境(它存储在进程的环境变量中).因此,当拥有自己的环境的子进程生成一个cd时,它只影响子进程,而不是父进程. >父进程:在/ home / x / y中>子进程(在fork之后):in / home / x / y 在子进程中执行cd ..将其本地环境设置为/ home / x但是父进程仍然在/ home / x / y中 父进程...

linux – 为什么RCX不用于将参数传递给系统调用,而是用R10替换?【代码】

参见英文答案 > Linux x64: why does r10 come before r8 and r9 in syscalls? 2个根据System V X86-64 ABI,应用程序中的函数调用使用以下寄存器序列来传递整数参数:rdi, rsi, rdx, rcx, r8, r9但是系统调用参数(除了系统调用号)在另一个寄存器序列中传递:rdi, rsi, rdx, r10, r8, r9为什么内核使用r10代替rcx作为第四个参数?它是否与某个事实相关,即r10是不保留rcx的?解决方法:X86-64系统...

如何知道Linux系统调用是否可重启?

根据man signal(7),如果在安装信号处理程序时使用SA_RESTART标志,则内核可以透明地重启某些系统调用:If a blocked call to one of the following interfaces is interruptedby a signal handler, then the call will be automatically restartedafter the signalhandler returns if the SA_RESTART flag was used; otherwise the call will fail with the error EINTR:然后它提到了一些可以(并且不能)重新启动的系统调用,但是在...

linux系统调用【图】

概述 本文学习基于armv7和armv8体系的linux系统调用机制,linux内核版本为3.10.79。通过分析系统调用机制和源代码来展示系统调用过程。什么是系统调用 linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用很相似,仅仅是系统调用由操作系统核心提供,执行于核心态。而普通的函数调用由函数库或用户自己提供。执行于用户态。 通常系统调用过程如下: 用户程序------>C库(即API):软中断 ----...

linux – Assembly中系统调用的返回值是什么?

当我尝试研究内核的系统调用的返回值时,我找到了描述它们的表,以及我需要将它放在不同的寄存器中以使它们工作.但是,我没有找到任何文档说明我从系统调用获得的返回值是什么.我只是在不同的地方找到我收到的东西将在EAX寄存器中. TutorialsPoint:The result is usually returned in the EAX register.汇编语言循序渐进:Jeff Duntemann编写的Linux书籍在他的程序中多次说明:Look at sys_read’s return value in EAXCopy sys_read...

在GNU C内联汇编中编写Linux int 80h系统调用包装器【代码】

参见英文答案 > How to invoke a system call via sysenter in inline assembly? 2个我正在尝试使用内联汇编…我读了这页http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx,但我无法理解传递给我的函数的参数. 我正在写一个C写的例子..这是我的函数头:write2(char *str, int len){ }这是我的汇编代码:global write2 write2:push ebpmov ebp, espmov eax, 4 ;sys_writemov ebx...

如何在Linux上重新实现(或包装)系统调用功能?【代码】

假设我想完全接管open()系统调用,可能包装实际的系统调用并执行一些日志记录. One way to do this is to use LD_PRELOAD加载一个(用户自制的)共享对象库,它接管open()入口点. 然后,用户自定义的open()例程通过dlsym()获取指向glibc函数open()的指针并调用它. 然而,上面提出的解决方案是动态解决方案.假设我想静态链接我自己的open()包装器.我该怎么办?我猜机制是一样的,但我也猜测用户定义的open()和libc open()之间会有一个符号冲...

【Linux系统编程】Linux系统调用【图】

00. 目录 文章目录00. 目录01. 系统调用概述02. 系统调用实现03. 系统调用和库函数的区别04. 附录 01. 系统调用概述 系统调用顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。 从逻辑上来说,系统调用可被看成是...

linux – 如何在内联汇编中通过sysenter调用系统调用?【代码】

我们如何在x86 Linux中直接使用sysenter / syscall实现系统调用?有人可以提供帮助吗?如果您还可以显示amd64平台的代码,那就更好了. 我知道在x86中,我们可以使用__asm__( " movl $1, %eax \n" " movl $0, %ebx \n" " call *%gs:0x10 \n" );间接路由到sysenter. 但是我们如何使用sysenter / syscall直接编码来发出系统调用呢? 我找到了一些材料http://damocles.blogbus.com/tag/sysen...

使用AT&T语法将整数打印为字符串,使用Linux系统调用而不是printf【代码】

我写了一个汇编程序来显示AT&之后的数字的阶乘. t syntax.But它不工作.我的代码.text .globl _start_start: movq $5,%rcx movq $5,%raxRepeat: #function to calculate factorialdecq %rcxcmp $0,%rcxje printimul %rcx,%raxcmp $1,%rcxjne Repeat # Now result of factorial stored in rax print:xorq %rsi, %rsi# function to print integer result digit by digit by pushing in #stackloop:movq $0, %rdxm...

是否有命令在bash中列出Linux上的所有系统调用名称和数字?

我知道系统调用1意味着写, 但是有一个命令在bash中列出Linux上所有已实现的系统调用名称和数字吗?解决方法:手册页指向头文件sys / syscall.h.它具有所有已定义的常量,位于/usr/include/sys/syscall.h. (这是我正在使用的OS X上的位置,但我认为对于大多数Linux发行版来说也是如此.)

linux – ARM inline asm:退出系统调用,从内存中读取值【代码】

问题 我想在Linux Android设备上使用内联汇编在ARM中执行退出系统调用,我希望从内存中的某个位置读取退出值. 例 如果不给出这个额外的参数,调用的宏看起来像:#define ASM_EXIT() __asm__("mov %r0, #1\n\t" "mov %r7, #1\n\t" "swi #0")这很好用.要接受一个参数,我将其调整为:#define ASM_EXIT(var) __asm__("mov %r0, %0\n\t" ...

为什么x86-64 Linux系统调用会修改RCX,这个值意味着什么?【代码】

我正在尝试使用sys_brk syscall在linux中分配一些内存.这是我尝试过的:BYTES_TO_ALLOCATE equ 0x08section .textglobal _start_start:mov rax, 12mov rdi, BYTES_TO_ALLOCATEsyscallmov rax, 60syscall根据linux调用约定,我希望返回值在rax寄存器中(指向已分配内存的指针).我在gdb中运行它,在进行sys_brk系统调用之后,我注意到以下寄存器内容 在系统调用之前rax 0xc 12 rbx 0x0 0 rcx ...

Linux中的系统调用机制存在疑问

我们使用’int’或新的’syscall / sysenter’指令从ring3转到ring0.这是否意味着需要为内核修改的页表和其他内容是由’int’指令自动完成的,或者’int 0x80’的中断处理程序将执行所需的操作并跳转到相应的系统调用. 此外,当从系统调用返回时,我们再次需要转到用户空间.为此,我们需要知道用户空间中的指令地址以继续用户应用程序.存储的地址在哪里. ‘ret’指令是否会自动将响铃从ring3更改为ring0或此环更换机制在何处/如何进行?...

linux write和sendfile系统调用之间的差异

我编程webserver(C),它应该发送大文件.我的问题是:两个系统调用的主要区别是:write和sendfile. sendfile是否依赖于套接字系统缓冲区的大小?我注意到写入经常写的少于我要求的. 例如,如果对一个文件有很多请求:我应该打开它,复制到内存中并使用write,或者我可以为每个客户端执行sendfile吗? 提前感谢所有答案.解决方法:请阅读sendfile(2). sendfile()在一个文件描述符和另一个文件描述符之间复制数因为这种复制是在内核中完成的...