c - C 系统调用的 Linux 64 汇编等效项是什么?
问题描述
(问题已编辑,感谢@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
libc 函数不是内核系统调用。这就是为什么它的手册页system(3)
不是system(2)
.
它是在 fork(2) + execve(2) 和waitpid(2)
系统调用之上实现的。事实上,这是system(3)
手册页说的第一件事!去阅读它,就像您应该阅读 Linux 手册页以了解您想了解的任何实际系统调用或库函数一样。
在调用它的程序上使用strace
,或者使用 GDB 单步执行它,或者阅读 glibc 源代码。
推荐阅读
- reactjs - React axios API 调用说“您需要启用 JavaScript 才能运行此应用程序”。
- python - 使用 curl 将 fly 上传到 FastAPI 端点 - 307 临时重定向
- azure - Azure ACR 任务 API?在 docker 容器中运行一个应用程序,该应用程序需要构建图像并将其推送到 ACR
- javascript - 如何在 DATABALES YAJRA laravel 8 中进行删除
- java - AWS Elastic Beanstalk NGINX 配置不起作用
- c++ - 如果 C++ 类是从 QAbstractItemModel 派生的,为什么从 QML 访问 C++ 函数会失败
- javascript - javascript - 将 json 字符串解析为不带引号的对象
- javascript - GraphQl 突变:addUser 不创建用户
- html - 如何使用 CSS 为另一个元素制作动画,而不必一直按住点击
- php - 在yii2中如何为列赋予别名