无法在 x86 ubuntu linux 上添加自定义系统调用

2023-12-26

我对此很陌生,刚刚了解内核,我正在尝试添加对内核 4.20.4 的自定义调用。这是我所做的步骤。

  1. 首先我创建文件(kernel/printmsg.c)包含代码。
#include <linux/kernel.h>
#include <linux/syscalls.h>

SYSCALL_DEFINE1(printmsg, int, i)
{
    printk(KERN_DEBUG, "TESTING %d", i);
    return 1;
}
  1. 接下来,我将此文件添加到kernel/Makefile
obj-y = fork.o exec_domain.o panic.o \
        // A few more lines
obj-y += printmsg.o // I added this line
  1. 最后,我将系统调用添加到系统调用表中arch/x86/entry/syscalls/syscall_64.tbl(我在 64 位 Ubuntu 上构建它)通过附加以下行:

548 64 printmsg sys_printmsg

现在,我继续运行make。但是,它有这个错误:

arch/x86/entry/syscall_64.o:(.rodata+0x1120): undefined reference to `sys_printmsg'
Makefile:1034: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1

我为此挠头很长时间,但似乎无法意识到出了什么问题。

希望任何设法找到问题的人都可以帮助一个可怜的灵魂。提前致谢!


好吧,经过几个小时的反复试验,我终于找到了问题所在。从 Linux 内核 v4.17 开始,x86_64 系统调用可能以“__x64_sys”开头。

所以,不要使用548 64 printmsg sys_printmsg,我把它改成了548 64 printmsg __x64_sys_printmsg。然后一切正常。

希望这对可能遇到此问题的每个人都有帮助。

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

无法在 x86 ubuntu linux 上添加自定义系统调用 的相关文章

  • 软件堆栈和操作系统有什么区别?为什么Android不是操作系统而是软件堆栈?

    Android 是一个软件堆栈 但不是一个操作系统 正如developer android com所述 什么是安卓 Android 是一个适用于移动设备的软件堆栈 包括操作系统 中间件和关键应用程序 这 Android SDK 提供了开始开
  • 如何告诉 mex 链接到 /usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的 libstdc++.so.6?

    现在 MATLAB 2012a 中的 mex 仅正式支持 gcc 4 4 6 但我想使用 gcc 4 7 风险自负 现在如果我直接用 mex 编译一些东西 它会抱怨 usr lib gcc i686 linux gnu 4 7 cc1plu
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何从 C++ 程序中重新启动 Linux?

    我有一个 Qt 4 GUI 我需要在下拉菜单中提供一个选项 允许用户选择重新启动计算机 我意识到这对于以其他方式重新启动计算机的能力来说似乎是多余的 但选择需要保留在那里 我尝试使用 system 来调用以下内容 suid root she
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu

随机推荐

  • Zend Framework:尝试通过 /controller/action url 访问其他视图时,仅索引视图呈现 404 错误

    我是 Zend 框架的新手 我正在运行 Apache 2 2 并将 httpd conf 文件中的 DocumentRoot 设置为使用 Zend Tool 创建的公共目录 在公共目录中我有一个 htaccess 文件 RewriteEng
  • 使用 Android 低级 api 解码 H264 流

    我在 android 中使用 MediaCodec 低级 Api 来解码从 IP 摄像机接收到的 h264 原始流 来自 IP 摄像机的原始流 通过 TCP IP 连接接收 要解码流 我的代码是 Override protected voi
  • PHP - 仅包含一个元素的扁平化数组

    如何仅使用一项来展平数组 我想避免使用 数组 0 名称 数组看起来像这样 array size 1 0 gt array size 2 project id gt string 28 project name gt string Test
  • Ocaml 有 Bignum 模块吗?

    我做了一些搜索 显然标准库中曾经有一个 Bignum 模块 根据this http alan petitepomme net cwn 2004 05 11 html 5但此时我在标准库中看不到任何内容 核心 OCaml 发行版中没有 big
  • 使用 jQuery 将 JSON 数组转换为 HTML 项目符号列表

    如何转换以 JSON 格式表示的字符串数组 并使用 jQuery 将其转换为 HTML 项目符号列表 var ul ul appendTo body var json items item 1 item 2 item 3 json item
  • 变量定义中带有 findViewById 的 NullPointerException

    我已经阅读了有关空点异常的非常流行的帖子 但我仍然对为什么会收到错误感到困惑 我试图确保一些 EditText 已填写 我在onCreate方法中试过了 还是不行 任何帮助 将不胜感激 如果这是一个愚蠢的问题 我深表歉意 public cl
  • 通过 Jenkins CI 在 Docker 容器中运行 Selenium 测试的最简单方法

    我想执行我的自动化测试 用以下语言编写Nightwatch Cucumber通过 Docker 容器中的 Jenkins CI 我有一个想要用于它的 Docker 映像 这就是我想做的更详细的事情 开始测试 Jenkins CI 作业 在同
  • 加密和解密 iOS/Node.js 安全查询

    我目前在两个平台上使用 AES128 以及我的代码answer https stackoverflow com a 27893935 2977578 注意 我对代码进行了一些更改 以偏离使用 IV 因为我认为这对于我的应用程序来说有点过分了
  • Pandas:将每小时值重新采样为带有偏移量的每月值

    我想聚合一个pandas Series每小时DatetimeIndex到每月值 同时考虑到午夜的偏移 Example 考虑以下跨度约为 1 5 个月的 统一 时间序列 import pandas as pd hours pd Series
  • Google Maps API 永远不会满足

    如果我将 URL 引荐来源网址身份验证与地理编码 API 结合使用 它会显示 There was an error while trying to fix the Venues geolocation information API key
  • python telebot 得到了意想不到的响应

    我一直在使用我的 Telegram 机器人使用 python 的远程机器人库从我的台式计算机向我发送不同的通知 很长一段时间一切都正常工作 但有一天它停止工作了 这是代码 Python 2 7 import telebot import s
  • 在 Safari 中检测 iOS 上的初始设备方向

    我知道怎么做检测设备方向变化 https developer apple com library safari documentation SafariDOMAdditions Reference DeviceOrientationEven
  • OSGI捆绑异常,maven依赖问题

    我对 OSGI Felix 和 Maven 还很陌生 刚刚开始使用 我正在通过 jenkins 部署 java 构建 并且遇到以下依赖问题 下面是包含依赖项的pom文件内容 我不确定它是否正确 但它仍然抱怨它 它正在寻找 javax jws
  • Qt Creator 无法在 Mac 上启动调试

    最近 我怀疑某些系统 自制程序更新 Qt 的调试器停止工作 它永远挂在Setting up inferior 内部日志 dStart parameters QGIS mode 1 dABI x86 darwin generic mach o
  • SQL 如果没有返回行则执行此操作

    我有一个 select 语句 我想说如果这个 select 语句不返回任何行 则在每个单元格中放置一个 我该怎么做呢 select a b c from t if rowcount 0 select as a as b as c 但请确保你
  • 如何在Python中使用BeautifulSoup从标签中提取innerHTML

    我正在尝试使用以下代码从标签中提取innerHTML theurl http na op gg summoner userName Darshan thepage urlopen theurl soup BeautifulSoup thep
  • google oauth2 刷新令牌何时过期?

    google oauth2 刷新令牌何时过期 我所说的过期的意思是由于已经过了一定的时间跨度而过期 不是因为用户已撤销访问权限或因为用户已请求新的刷新令牌 我做了一些研究 但没有一个引用官方谷歌文档 我也找不到有效的谷歌文档 其他一些问题说
  • Mongo 更新子文档

    我在使用 MongoDB 时似乎遇到了障碍 并且想知道是否有解决方案 而无需修改我的数据库结构 现在我的数据库结构如下 Company id 1 properties property id 1 tags tag id 1 tag valu
  • 使用 PHP/AJAX 从 HTML 表单发送电子邮件

    我想将用户从 HTML 表单填写的信息发送到我的电子邮件地址 根据我的理解 由于电子邮件工作方式的性质 仅使用客户端编码无法完成此操作 因此建议使用 PHP 与 AJAX 结合 来处理服务器端代码 我跟着导游here https stack
  • 无法在 x86 ubuntu linux 上添加自定义系统调用

    我对此很陌生 刚刚了解内核 我正在尝试添加对内核 4 20 4 的自定义调用 这是我所做的步骤 首先我创建文件 kernel printmsg c 包含代码 include