【问题标题】:What is the Linux 64 Assembly Equivalent for C's system call?C 系统调用的 Linux 64 汇编等效项是什么?
【发布时间】:2020-08-17 22:17:20
【问题描述】:

(问题已编辑,感谢@fuz)

什么是 C 系统调用的 Linux 64 等效程序集?

我想编写与在 C 中调用 CLI 功能基本相同的程序集,例如 system("ls -l")

我要复现的代码与下面的C:功能基本相同:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   system("ls -l");

    exit(0);
}

【问题讨论】:

  • system 函数不是系统调用。它是一个传统上以forkexecvewait 实现的库。
  • 谢谢!我会相应地编辑我的问题!
  • 现在您已经删除了关于使用原始系统调用执行此操作的部分问题,显而易见的答案是简单地使用 RDI 中的指针 call system。您不必重新实现 libc 函数,只需调用它们即可,假设您将程序与 libc 链接。

标签: c linux assembly x86-64 system-calls


【解决方案1】:

system libc 函数不是内核系统调用。这就是为什么它的手册页是 system(3) 而不是 system(2)

它是在 fork(2) + execve(2) 和 waitpid(2) 系统调用之上实现的。事实上,这是system(3) 手册页所说的第一件事!去阅读它,就像您应该阅读 Linux 手册页以了解您想了解的任何实际系统调用或库函数一样。

在调用它的程序上使用strace,或者使用 GDB 单步执行它,或者阅读 glibc 源代码。

【讨论】:

  • 谢谢,我已经修改了我的问题!
猜你喜欢
  • 2016-01-16
  • 2019-09-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2021-05-01
  • 2012-01-20
  • 1970-01-01
相关资源
最近更新 更多