Linux 内核:为什么调用 kstrtol 会崩溃?

2024-04-22

我正在学习内核编程,并且对 kstrtol 进行了简单的调用,我用它来将字符串转换为数字。然而,每次我编译这个模块并使用 insmod 将其放入内核时,我都会收到“BUG:无法处理 f862b026 处的内核分页请求”,然后是寄存器和堆栈转储。

我遵循这里的定义:https://www.kernel.org/doc/htmldocs/kernel-api/API-kstrtol.html https://www.kernel.org/doc/htmldocs/kernel-api/API-kstrtol.html。这似乎是一个非常简单的调用。我在这里做错了什么?

#include <linux/kernel.h>

static int __init convert(void)
{
    long myLong;
    char *myNumber = "342";
    myNumber[2] = '\0'; //Overwriting the '2', just so I know for sure I have a terminating '\0'

    if (kstrtol(myNumber, 10, &myLong) == 0)
    {
        printk("We have a number!\n");
    }
return 0;
}

static void __exit convert_exit(void)
{
    printk("Module unloaded\n");
}

module_init(convert);
module_exit(convert_exit); 

您无法修改字符串文字。首先将其复制到数组中。

编辑:用这个代替

char mystr[] = "abdc";

编辑2: 其根本原因是,指向字符串文字的 char 指针指向数据段,通常是只读的。如果你改变这个内存,你可能会崩溃。 相反,当您创建字符数组时,字符串文字会被复制到堆栈上的数组中,您可以在其中安全地修改它。

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

Linux 内核:为什么调用 kstrtol 会崩溃? 的相关文章

随机推荐

  • Cassandra - 有没有办法限制异步查询的数量?

    我想知道是否有办法限制 cassandra java 驱动程序同时执行的查询数量 目前 我执行了很多查询 如下所示 PreparedStatement stmt session prepare SELECT FROM users WHERE
  • log4j2 在自定义 Appender 中将 printObject 设置为 true

    HERE https logging apache org log4j 2 x manual extending html它说 如果 toString 方法 附加程序应将 printObject 指定为 true 呈现传递给 Appende
  • OpenLayers 中的复合(complex)功能

    我在玩了一下 OpenLayers 想知道是否有一种方法可以创建自定义 功能 我想要完成的是一个具有多个部分的功能 或者是否有一种方法可以将多个功能 绑定 在一起 我想要实现的目标是 我想在地图上的某个位置显示各种数量的数据 并且我想将其包
  • Chrome 扩展:提交后修改 facebook-chat 中的消息文本

    我正在尝试创建一个 Chrome 扩展程序 当用户在聊天框中按 Enter 键时 该扩展程序会修改提交的消息 文本区域的 HTML 代码
  • Rails 测试(MiniTest)中分配方法的目的是什么?

    用于自动生成的测试 test should create item do login user assert difference Item count do post create item creator item creator ti
  • 如何在for_each方法中使用自己类的函数?

    假设我有这个类 继承自 std Vector 这只是一个例子 include
  • Android Studio 14 原生开发 + CrystaX NDK

    我正在尝试将一个巨大的跨平台 C 11 iOS Android 应用程序项目迁移到 Android Studio 14 我使用 CrystaX NDK 进行 boost 和 C 14 他们网站的博客上有官方 Android Studio C
  • grep --include 命令在 OSX Zsh 中不起作用

    我正在关注最佳答案如何在 Linux 上查找包含特定文本的所有文件 https stackoverflow com questions 16956810 finding all files containing a text string
  • 从 JIRA 创建 Gitlab 分支

    我最近开始使用 Gitlab 并与 Jira 集成 Gitlab 和 Jira 服务器都是在我的公司环境内部自行托管的 我遇到了一个要求 我想直接从 JIRA 问题在 Gitlab 中为项目 问题创建一个分支 有可能做到吗 如果是的话怎么办
  • 有没有办法在 mex 文件中制作 try-catch 语句?

    我知道在 C 中没有内置的方法来执行 try catch 语句 但是 MATLAB 是否为 MEX 文件提供了任何类型的 try catch 功能 我尝试使用Longjmp and Setjmp以中描述的方式http www di unip
  • 如何使用 JWT 将优惠保存到 Google 钱包?

    实际上我想保存 Google 钱包 的报价 因为在我做了一些 RND 并遇到过之前我还没有研究过它本文档 https developers google com pay passes guides get started implement
  • 如何实现一套?

    我想用C实现一个Set 创建 SET 时可以使用链表吗 还是应该使用其他方法 您通常如何实现自己的集合 如果需要 笔记 如果我使用链表方法 我的 Set 操作可能会遇到以下复杂性 初始化 O 1 销毁 O n 插入 O n 删除 O n 并
  • 如何在 Xcode 4 中使用 .xcconfig 文件?

    我刚刚切换到 Xcode 4 但在使用 xcconfig 文件进行构建设置时遇到问题 我的目标已经在 Xcode 3 中分配了文件 并且已全部设置完毕 标题为 Config file 的列显示在 构建设置 的 级别 视图中 但我不知道如何编
  • 如何创建一个修改结构体的函数

    我正在制作一个程序 使用结构将学生成绩放入数组中作为期末练习 我需要创建一个函数来检查数组中是否还有任何位置 如果没有 则数组的大小需要加倍 然后需要将成绩添加到下一个可用位置 如果数组有空缺职位 则应将等级值添加到下一个可用职位 每当数组
  • 如何确定我的应用程序是在 x86 还是 x64 Windows 上运行?

    我想知道 在运行时 我是在 32 位还是 64 位 Windows 上运行 OSVERSIONINFOEX 结构告诉我主要版本和次要版本 但我猜我需要内部版本号 有人知道它们是什么吗 如果您的应用程序是针对 64 位编译的 那么答案很简单
  • 测试登录用户在 Laravel 4 中具有正确的 id

    我正在尝试弄清楚如何测试 Laravel 4 中的登录用户是否可以访问正确的用户帐户 目前这就是我的routes php 文件中的内容 Route get user id array before gt auth function logg
  • 方案功能[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我试图解释这个方案函数的作用 define y s lis cond null lis equal s car lis lis else
  • 如何将 FragmentTabHost 选项卡放在屏幕底部?

    我已经尝试过以下代码 它对齐选项卡小部件上方的框架布局 但它仍然不起作用
  • 在 Android 中以编程方式添加 FilterChips

    我正在尝试做出一个有多种选择的芯片选择 就我而言 我将有动态选择 因此我必须动态创建芯片 我成功地动态创建了它 但由于多重选择需要一个名为style style Widget MaterialComponents Chip Filter 我
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储