如何查找程序使用哪种类型的系统调用

2023-12-19

我正在 x86_64 机器上工作。我的linux内核也是64位内核。由于实现系统调用有不同的方法(int 80、syscall、sysenter),我想知道我的机器正在使用什么类型的系统调用。我是linux新手。我写了一个演示程序。

#include <stdio.h>
int main()
{
  getpid();
  return 0;
}

getpid() 执行一个系统调用。任何人都可以给我一个方法来查找我的机器将使用哪种类型的系统调用来执行该程序..谢谢....


victory:~ # gcc getpid.c -o getpid -g
victory:~ # gdb getpid
<snip>
(gdb) break main
Breakpoint 1 at 0x400540: file getpid.c, line 4.
(gdb) run
Starting program: /root/getpid 

Breakpoint 1, main () at getpid.c:4
4     getpid();
(gdb) disassemble
Dump of assembler code for function main:
0x000000000040053c <main+0>:    push   %rbp
0x000000000040053d <main+1>:    mov    %rsp,%rbp
0x0000000000400540 <main+4>:    mov    $0x0,%eax
0x0000000000400545 <main+9>:    callq  0x400440 <getpid@plt>
0x000000000040054a <main+14>:   mov    $0x0,%eax
0x000000000040054f <main+19>:   leaveq 
0x0000000000400550 <main+20>:   retq   
End of assembler dump.

看起来我们对 getpid() 的调用实际上是一个库调用。让我们在那里设置一个断点并继续。

(gdb) break getpid
Breakpoint 2 at 0x7ffff7b29c00
(gdb) cont
Continuing.

Breakpoint 2, 0x00007ffff7b29c00 in getpid () from /lib64/libc.so.6
(gdb) disassemble
Dump of assembler code for function getpid:
0x00007ffff7b29c00 <getpid+0>:  mov    %fs:0x94,%edx
0x00007ffff7b29c08 <getpid+8>:  cmp    $0x0,%edx
0x00007ffff7b29c0b <getpid+11>: mov    %edx,%eax
0x00007ffff7b29c0d <getpid+13>: jle    0x7ffff7b29c11 <getpid+17>
0x00007ffff7b29c0f <getpid+15>: repz retq 
0x00007ffff7b29c11 <getpid+17>: jne    0x7ffff7b29c1f <getpid+31>
0x00007ffff7b29c13 <getpid+19>: mov    %fs:0x90,%eax
0x00007ffff7b29c1b <getpid+27>: test   %eax,%eax
0x00007ffff7b29c1d <getpid+29>: jne    0x7ffff7b29c0f <getpid+15>
0x00007ffff7b29c1f <getpid+31>: mov    $0x27,%eax
0x00007ffff7b29c24 <getpid+36>: syscall 
0x00007ffff7b29c26 <getpid+38>: test   %edx,%edx
0x00007ffff7b29c28 <getpid+40>: mov    %rax,%rsi
0x00007ffff7b29c2b <getpid+43>: jne    0x7ffff7b29c0f <getpid+15>
0x00007ffff7b29c2d <getpid+45>: mov    %esi,%fs:0x90
0x00007ffff7b29c35 <getpid+53>: mov    %esi,%eax
0x00007ffff7b29c37 <getpid+55>: retq   
End of assembler dump.

getpid() 库中隐藏的是系统调用汇编指令。这是一条 AMD64 指令,支持快速上下文切换到ring0以进行系统调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何查找程序使用哪种类型的系统调用 的相关文章

  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • 套接字发送调用被阻塞很长时间

    我每 10 秒在套接字上发送 2 个字节的应用程序数据 阻塞 但发送调用在下面的最后一个实例中被阻塞超过 40 秒 2012 06 13 12 02 46 653417 信息 发送前 2012 06 13 12 02 46 653457 信
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • Unix 中的访问时间是多少

    我想知道访问时间是多少 我在网上搜索但得到了相同的定义 读 被改变 我知道与touch我们可以改变它 谁能用一个例子来解释一下它是如何改变的 有没有办法在unix中获取创建日期 时间 stat结构 The stat 2 结构跟踪所有文件日期
  • 在 vimrc 中切换匹配

    我的 vimrc 文件中有以下几行 hi ExtraWhitespace cterm NONE ctermbg green ctermfg green guibg green guifg green match ExtraWhitespac
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • 我可以在 Ubuntu 上使用 Homebrew 吗?

    我只是尝试使用 Homebrew 和 Linuxbrew 在我的 Ubuntu 服务器上安装软件包 但都失败了 这就是我尝试安装它们的方法 sudo apt get install build essential curl git m4 r
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • PHP mail() 函数不发送邮件

    我有一个小问题 我正在使用一个工作脚本 在我的测试帐户 共享服务器上工作 使用 mail 函数通过 PHP 发送邮件 我刚刚得到了一个专用服务器 但我还无法让该功能发挥作用 在过去的 10 个小时左右的时间里 我阅读了有关 BIND 用于
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入

随机推荐

  • FileReader.readAsBinaryString 返回二进制还是基于 ASCII 的字符集?

    简而言之 我想将图像的二进制数据发送到我的处理程序 该处理程序将作为字节数组保存在数据库中 使用读取文件输入的值在我的 Javascript 中 我会得到如下输出 GIF89a 2c 3f Sma c T At X c 8 fj I Q q
  • 如何在 React.js 中修改现有的 PDF?

    我的反应状态数组中几乎没有值通过 props 传递给当前组件 但我不想像下面的代码中当前显示的那样显示 而是想使用文件系统中的 PDF 模板 因此 我的预期结果是能够在给定 x y 坐标的原始 PDF 副本上从状态 文本或图像 绘制给定数据
  • 多行之间的 SQLite SUM()

    我需要一些有关 Android 应用程序中的 SUM 功能的帮助 我有一张如下所示的表 我有需要SUM最后两条记录注释和最后一条带注释记录之间的数量 我需要对第 31 32 行和 33 行的数量求和 它将返回 90 我已经尝试过 SELEC
  • 为什么我不能将匿名类型作为参数传递给函数?

    我试图做类似下面的事情 但它不起作用 为什么 NET 不让我这样做 private void MyFunction var items whatever 从 Visual C 3 0 开始 在方法作用域中声明的变量可以具有隐式类型 var
  • tfs 服务器上身份验证失败

    我有一个非常奇怪的问题git bash在窗户上 当我在 Visual Studio 中工作时 使用存储在 tfs 服务器中的 git 存储库没有问题 我只是分支 承诺并推动 但是当我尝试在我的系统中执行相同的操作 获取 拉动 推送 时git
  • Ionic PWA 部署

    我正在尝试将 Ionic 2 项目的渐进式 Web 应用程序版本部署到 Heroku 但它似乎不起作用 我正在尝试使用 Ionic build browser prod 然后部署 www 文件夹 但我没有收到 Heroku 的任何响应 似乎
  • ClickOnce 认为 Windows 更新 KB5029649 之后有可用更新,即使没有可用更新

    你好 StackOverflow 社区 我在使用 ClickOnce 部署的 VB NET 应用程序时遇到了一个不寻常的问题 尽管没有发布任何最新更新 我们的一些用户仍会被提示更新应用程序 当他们继续进行时 它的行为就像是全新安装一样 会清
  • 在 FormInput 组件下方反应本机元素行

    我正在使用 React Native Elements 中的 FormInput 元素 它似乎在每个 FormInput 组件下方生成一条线 一个比另一个更微弱 表格如下
  • 在纯 NumPy 中重写 for 循环以减少执行时间

    I 最近询问有关尝试优化科学应用程序的 Python 循环的问题 https stackoverflow com questions 2586749 what is the most platform and python version
  • 现场(“点击”)和表演

    我有一个网格 有一列包含 a 带有一些附加信息的锚标记 a
  • 如何在内存中创建文件供用户下载,而不是通过服务器?

    有没有办法在客户端创建一个文本文件并提示用户下载它而无需与服务器进行任何交互 我知道我不能直接写入他们的机器 安全性和所有 但我可以创建文件并提示他们保存它吗 适用于 HTML5 浏览器的简单解决方案 function download f
  • PowerMock 何时新替代方案

    我不想再使用 powermock 了 因为junit5开始模拟静态类 所以我试图摆脱 powermock 方法 如您所知 您可以使用whenNew关键字创建类的实例 Junit5中对于whenNew有什么替代方案吗 这是我的代码的一部分 w
  • 在 PowerShell 中创建临时目录?

    PowerShell 5 引入了New TemporaryFile cmdlet https learn microsoft com en us powershell module microsoft powershell utility
  • 多态性的真正意义(用途)是什么

    我是面向对象编程的新手 虽然我明白什么是多态 但我无法得到它的真正用途 我可以有不同名称的函数 为什么我应该尝试在我的应用程序中实现多态性 经典答案 想象一个基类Shape 它暴露了一个GetArea方法 想象一个Square类和一个Rec
  • 安装 Android Wear 示例应用时失败 [INSTALL_FAILED_OLDER_SDK]

    我按照以下说明进行操作这个链接 http developer android com training wearables apps creating html在 Android Studio 中创建一个简单的移动 可穿戴应用程序 但是 在
  • 斐波那契数的迭代算法

    我对斐波那契数的迭代算法感兴趣 所以我在 wiki 上找到了这个公式 它看起来很简单 所以我在 Python 中尝试了它 它没有编译问题 公式看起来正确 不是确定为什么它给出错误的输出 我没有正确实施它吗 def fib n if n 0
  • 如何在pythonplot_surface中设置Z轴的比例等于X轴和Y轴

    我尝试使用 matplotlib 中的plot surface 来绘制 3D 曲面 我的代码是 fig plt figure ax fig gca projection 3d ax set aspect equal ax plot surf
  • 如何在 TensorFlow 中构建一个带有循环的简单 RNN?

    我刚刚开始使用 TensorFlow 正在尝试实现一个非常简单的 RNN RNN 有x作为输入 y作为输出 仅由一个层组成 该层需要x并将之前的输出作为输入 这是我想到的事情的图片 问题是 我看不到任何通过 TensorFlow API 构
  • 尝试在 Eclipse 中安装 apache tomcat 时出现“HTTP Status 404 - /”(localhost:8080)

    我已经在 Windows Vista 上安装了 eclipse 并且添加了新的 Apache Tomcat 服务器 Apache Tomcat 7 0 27 在 eclipse 中启动 Apache 后 我在 url 中输入以下地址 本地主
  • 如何查找程序使用哪种类型的系统调用

    我正在 x86 64 机器上工作 我的linux内核也是64位内核 由于实现系统调用有不同的方法 int 80 syscall sysenter 我想知道我的机器正在使用什么类型的系统调用 我是linux新手 我写了一个演示程序 inclu