Linux中通过perf为未列出的函数添加动态跟踪点

2023-12-30

我正在尝试跟踪功能zap_pte_range来自 mm/memory.c 使用perf。但功能并未在其中列出perf probe -F。那么有没有办法动态追踪这个函数呢? IE。显式添加跟踪点并重新编译内核?

perf probe -a zap_pte_range

gives:

[kernel.kallsyms] 构建 id 33b15ec444475ee7806331034772f61666fa6719 未找到,继续不带符号

无法在内核中找到符号 zap_pte_range

错误:添加事件失败。


不存在这样的跟踪点。所以显然你不能用简单的方法追踪它。看来这个函数是由编译器内联的(请记住,由于某些优化原因,该函数也可以被省略)。这就是为什么没有它的符号/proc/kallsyms.

您可以选择最适合您的追踪功能。例如。在我的 Debian 4.9 内核中我可以追踪unmap_page_range() https://elixir.bootlin.com/linux/v4.9.138/source/mm/memory.c#L1276,它最终“调用”您需要的函数。也许从逻辑上讲它会满足您的目标。

另一种方法是一点点黑客攻击。你可以做类似的事情objdump -dS memory.o | vim -(你应该有二进制文件)并调查你需要的代码在哪里。鉴于该链zap_pud_range()->zap_pmd_range()->zap_pte_range()可能是内联的,你必须调查上述内容unmap_page_range()。也许你最终会获得一些代码地址kprobes https://www.kernel.org/doc/Documentation/kprobes.txt.

如果你想明确地追踪zap_pte_range()例如通过jprobes(关于参数)或克雷特探针(关于返回值),可以尝试指定noinline https://stackoverflow.com/questions/1474030/how-can-i-tell-gcc-not-to-inline-a-function- 所需函数的属性,重新编译 Linux 内核并根据需要进行跟踪。

我想我没有更有用的方法给你了。

更多信息:相关帖子 https://stackoverflow.com/questions/20196636/does-kallsyms-have-all-the-symbol-of-kernel-functions, Jprobes 示例 https://gist.github.com/dzeban/a19c711d6b6b1d72e594, Ftrace:跟踪你的内核函数! https://jvns.ca/blog/2017/03/19/getting-started-with-ftrace/, 关于 ftrace 和 systemtap 的帖子 https://stackoverflow.com/questions/52764544/how-to-trace-just-system-call-events-with-ftrace-without-showing-any-other-funct/52775914#52775914, man nm https://linux.die.net/man/1/nm

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

Linux中通过perf为未列出的函数添加动态跟踪点 的相关文章

  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 使用 System.Text.Json 即时格式化 JSON 流

    我有一个未缩进的 Json 字符串 例如 hash 123 id 456 我想缩进字符串并将其序列化为 JSON 文件 天真地 我可以使用缩进字符串Newtonsoft如下 using Newtonsoft Json Linq JToken
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 从路径中获取文件夹名称

    我有一些路c server folderName1 another name something another folder 我如何从那里提取最后一个文件夹名称 我尝试了几件事 但没有成功 我只是不想寻找最后的 然后就去休息了 Thank
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 当操作繁忙时,表单不执行任何操作(冻结)

    我有一个使用 C 的 WinForms 应用程序 我尝试从文件中读取一些数据并将其插入数据表中 当此操作很忙时 我的表单冻结并且无法移动它 有谁知道我该如何解决这个问题 这可能是因为您在 UI 线程上执行了操作 将文件和数据库操作移至另一个
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐

  • 这段用于标准化数据的代码是如何工作的?

    我有一个提供的standardize这是一个机器学习课程的函数 该函数没有详细记录 而且我对 MATLAB 还很陌生 所以我只是尝试分解该函数 任何对语法或标准化一般思想的解释都会有很大帮助 我们使用此函数来标准化大型矩阵中提供的一组训练数
  • Retrofit获取转换错误对象

    我正在使用改造 1 9 我有一个自定义的 RetrofitErrorHandler 扩展了 ErrorHandler 我正在重写 handleError RetrofitError Cause 并使用 Cause getKind 来查找 C
  • 用于极端差异日期的最佳 jQuery 日期插件(公元前 1000 年以上 - 今天)

    我现在正在开发一个项目 需要在日期选择器上具有很大的灵活性 用户可以插入几千年前的日期 以及一直到今天的日期 典型的日期选择器非常适合选择相距几年之内的日期 但在选择差异巨大的日期时效果不佳 有人见过可以更轻松地处理此要求的插件吗 也许这里
  • Django - 如何在管理页面字段上显示科学记数法?

    我的管理页面中有一个字段 我想以科学记数法显示 现在它显示出这样丑陋的东西 如何将其显示为 4 08E 13 现在我在模型中使用标准的 Decimal 字段 任何意见是极大的赞赏 我使用的是 Django 1 2 你必须使用 e获取科学计数
  • 让 ASP.NET Cookieless Session 和 JQuery AJAX 完美结合

    我有一个使用 JQuery AJAX 的网站 有了这个 JQuery 代码 post ajax getsomedata aspx id id function data dosomething data 当我运行这个时无cookie 假 i
  • 如何从“stdin”创建非阻塞连续读取?

    我有一个进程 它是这样创建的 p subprocess Popen args myapp stdin subprocess PIPE stdout subprocess PIPE universal newlines True 后来我想写信
  • Solr ExtractingRequestHandler 提取链接中的“rect”

    我正在利用 solr ExtractingRequestHandler 来提取和索引 HTML 内容 我的问题涉及它生成的提取链接部分 返回的提取内容已在 HTML 源中不存在的位置插入 矩形 我的 solrconfig 单元配置如下
  • 使用java在目录中的文本文件中递归搜索? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要在目录和子目录的所有文件中搜索文本 有什么聪明的主意吗 Use the org apache commons io FileUt
  • 是否可以仅使用 CSS3 来转换文本对齐方式?

    是否可以使用 css3 转换文本对齐方式 例如 我想从左到右设置文本对齐的动画 但是 在文本对齐上添加过渡属性并不能解决问题 http codepen io anon full lGDwB http codepen io anon full
  • 如何转换 RGB -> YUV -> RGB(双向)

    我想要一对转换算法 一个从 RGB 到 YUV 另一个从 YUV 到 RGB 它们彼此相反 也就是说 往返转换应保持该值不变 如果愿意 可以将 YUV 替换为 Y UV YUV YCbCr YPbPr 这样的事情存在吗 如果是这样 那是什么
  • 验证本地计算机上的用户凭据

    我有一个 Windows 服务 作为本地系统用户运行 除了检查用户是否属于 WSMA 组之外 还需要根据用户名和密码验证用户 我当前的代码是这样的 var pc new PrincipalContext ContextType Machin
  • SVG 和 RevealJS 中的鼠标位置

    我正在使用 RevealJS 创建演示文稿 并希望合并一些使用 D3 创建的交互式 SVG 可视化效果 我以前曾多次毫无困难地完成此操作 但这次遇到了一些困难 经过一番调试后 我将问题追溯到以下内容 由于某种原因 当整个内容包含在 Reve
  • StreamReader 和可移植类库

    我正在使用可移植类库编写一个 ConfigManager 类 PCL支持StreamReader and StreamWriter我想要使 用的类 但这些类的 PCL 版本不支持在构造期间传入字符串 PCL 也不支持reader Close
  • 如何在 Angular 7 中禁用目标 cdkDropList 中的元素移位/移动

    我有 2 个列表 左侧的首都城市和右侧的国家 地区 我希望能够将首都移至国家列表中 并允许用户将首都移至该国家 地区 问题是国家 地区列表元素开始移动 移动 以允许插入大写字母 但我只想放在顶部 如果匹配 请提供一条消息并从两个列表中删除城
  • JSF 2.1 重定向保留错误消息

    我有以下命令按钮操作方法处理程序 public String reject Do something addMessage null rejectAmountInvalid FacesMessage SEVERITY ERROR redir
  • *(int*)NULL = 1 导致线程崩溃;有问题吗?

    我在多线程 C 应用程序中发现了这个 作者评论说它用于在自定义断言函数中造成线程崩溃 GCC 对此没有问题 但 clang 发出以下警告 note consider using builtin trap or qualifying poin
  • 按多个字段对对象列表进行排序[重复]

    这个问题在这里已经有答案了 我有一个 Java 对象列表 我想根据多个字段对其进行排序 public class graduationCeremony String campus String faculty String building
  • 声纳跑步者 404 本地主机

    我正在尝试让 Sonar 在 OS X 机器上本地工作以进行一些概念验证工作 我已经下载了以下内容 声纳库 4 5 6 声纳跑步者 2 4 Sonarqube 配置为 sonar web host localhost sonar web c
  • 如何使用外键从2个表中获取所有数据

    这是将单个表分成两部分的结果 Table users user id pk ai email password last login Table data user id fk to users user id data 1 data 2
  • Linux中通过perf为未列出的函数添加动态跟踪点

    我正在尝试跟踪功能zap pte range来自 mm memory c 使用perf 但功能并未在其中列出perf probe F 那么有没有办法动态追踪这个函数呢 IE 显式添加跟踪点并重新编译内核 perf probe a zap p