- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在阅读一篇解释如何在不通过 glibc 的情况下调用裸系统调用的文章。要调用 chmod
和 exit
,请使用:
#include <linux/unistd.h>
_syscall2(int,chmod,char*,f,int,m)
_syscall1(int,exit,int,r)
我的 gcc
提示他们。它们的用途是什么,它们是如何工作的?
$ gcc --version
gcc (Ubuntu 7.4.0-1ubuntu1~18.04) 7.4.0
$ gcc e.c
e.c:2:15: error: unknown type name ‘setresuid’; did you mean ‘__NR_setresuid’?
_syscall3(int,setresuid,int,r,int,e,int,s)
^~~~~~~~~
__NR_setresuid
e.c:2:29: error: unknown type name ‘r’
_syscall3(int,setresuid,int,r,int,e,int,s)
^
e.c:2:35: error: unknown type name ‘e’
_syscall3(int,setresuid,int,r,int,e,int,s)
^
e.c:2:41: error: unknown type name ‘s’
_syscall3(int,setresuid,int,r,int,e,int,s)
^
最佳答案
您的文章可能已过时。
如果您使用 C 编写代码,则没有理由避免使用 syscalls(2) (注意复数)如文件所示。还要注意 vdso(7) .您可以使用其他一些 C standard library比 glibc
(例如 musl-libc 、 dietlibc 等...)您可能(但不推荐)静态链接它。
您可能会使用 syscall(2) (注意单数)代替。我认为没有理由这样做,例如使用 read(2)或 mmap(2)没有系统调用
。
Assembly HowTo可能是一本有趣的读物(注意,它可能过于以 32 位为中心,当今大多数 Linux PC 都是 64 位 x86-64)。
另见 osdev.org
顺便说一句,一些旧的 Unixes(例如 Solaris)有一个 libsys
提供 just 系统调用,并且它们的 libc
链接到它。我也想要一个 libsys
!但在当前的 Linux 系统上,这并不重要,因为几乎每个进程(运行一些 dynamically linked ELF 可执行文件)都是 mmap(2) -ing,在ld-linux.so(8)之后,您的 libc.so.6
的几个段和部分;有关详细信息,请阅读 Drepper 的 How to write a shared library (因为它还详细解释了共享库的实际工作原理)。也可以使用 pmap(1)在某些正在运行 的进程上(例如 shell 中的 pmap $$
)。
glibc
不知道一些罕见的系统调用(例如 userfaultfd(2) 今天 2Q2019)。他们是个异常(exception),因为大多数 system calls由您的 libc 包装(包装通常只处理失败时的 errno(3) 设置)。注意 strace(1) .
你还应该阅读 Operating Systems: Three Easy Pieces (这是一本可免费下载的书,解释了系统调用的作用和原因)
关于c - Linux 裸系统调用,而不是 glibc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56414083/
我对 Lift Cookbook for AJAX Forms 感到困惑,我遇到了以下对象声明: object EchoForm extends { 这很令人困惑,所以我尝试了一下,它编译得很好。我的
我正尝试按照指示在裸 CSS 模态窗口内实现视频 here到目前为止效果很好。我遇到的唯一问题是视频在模态窗口打开之前自动启动(我必须保留视频“自动启动”选项)。模态窗口关闭时视频也不会停止。 是否有
同样,裸 char16_t 是有符号的还是无符号的?是否定义了实现? 最佳答案 来自标准(C++11 前草案 n3290,或 C++11 后草案 n3337)§3.9.1 基本类型: Types ch
我使用 C# 编程已经...有一段时间了。我最近编写了一个例程,我突然想到这是我第一次(我记得)我故意使用裸代码块(即没有前面的控制流语句)。代码看起来像这样: //... var output =
我最近开始使用 nativescript,但我遇到了一个似乎无法解决的问题。 我想要完成的是只打开一个基本的 WebView 并设置一个外部 url 来加载,例如 stackoverflow.com。
我通过以下方式创建了一个共享仓库: git init --bare my_project.git 在某个时候,另一个用户用他的更改更新了这个 repo(使用 git push )。 我如何检查共享存储
我刚刚浏览完 Google 搜索结果,其中包含所有关于 git 无法克隆空存储库是多么愚蠢的电子邮件咆哮。一些善良的灵魂甚至提交了一个补丁。在升级 git 之前,克隆空的、裸 git 存储库的最简单、
我喜欢编写一些 wordpress 模板,并搜索了一些可用的裸模板,我可以从这些模板开始。 因为我是 wordpress 的新手,你能推荐最好的裸模板作为我可以使用的基础吗? 干杯 最佳答案 在我看来
我正试图找到一个最新的答案,以使用 Godaddy 和 Heroku SSL 设置裸域。我的目标是让所有页面都登陆安全页面 https://www.example.com https://www.ex
这个问题在这里已经有了答案: What's the -practical- difference between a Bare and non-Bare repository? (11 个答案) 关
我运行一个 git 服务器,它只包含裸远程。比如说,我有一个名为 DIG.git 的裸 Remote ,我通常使用它进行克隆: git clone 55.66.77.88:git/DIG.git 我想
是否有一个用于裸 git repo 目录的 GUI(任何地方都没有工作树)我可以: 检查日志 查看任何提交的整个工作树结构 关于我为什么需要这个: 我的 git 是这样初始化的: git --git-
我有一台服务器托管我的几个项目的“裸”GIT 存储库。 我想知道如何将 GIT 移动到另一台服务器? 最佳答案 只需将父目录复制到新机器,并让 check out 的副本使用 git remote s
我有一个域 example.com 和 www.example.com。我正在为 DNS 使用 Heroku 和 Zerigo。现在我有一个从根域到 www.example.com 的转发从我的 Ho
我的服务器已经在 TCP 端口 80 和 443 上运行 IIS。我想通过 Internet 为我的所有团队成员提供一个集中的“推/pull ”Git 存储库。 所以我应该使用 HTTP 或 HTTP
裸露的 SUM 和包裹在 CALCULATE 中的 sum 有什么区别? Measure1 = SUM( tab[col1]) ) Measure2 = CALCULATE ( SUM( tab[co
我是一名优秀的程序员,十分优秀!