Code Debug and Inject

Linux内核调试工具之Kprobes简单使用 Linux内核调试工具之Kprobes简单使用上次看了下Kprobes的相关概念:Linux内核调试工具之Kprobes相关概念,这里看看它的简单使用 配置Kprobes内核需要打开以下配置: CONFIG_KPROBES = y #保证能加载和卸载基于Kprobes的模块 CONFIG_MODULES = y CONFIG_MODULE_UNLOAD = y #kprobes例子:内核源码/samples/kprobes/kprobe_example.c。Linux内核调试工具之Kprobes简单使用。 阅读详情

分类: LINUX

欢迎转载,转载请保留文档完整性!

From:http://blog.chinaunix.net/uid-20662820-id-3799149.html

 

Code Debug and Inject

Author: Tony tingw.liu@gmail.com

Date:2013年7月11日星期四

 

1.   Debug

Linux下较新的内核调试是Kprobe,应用层框架是Ptrace和Utrace。gdb正是基于ptrace实现。

由于应用层程序可能不在内存中,而且可能存在一个程序多次执行的情况,所有内核层的调试不能直接调试应用层程序。

2.   Kprobe

2.1.    About kprobe

Kprobe机制是内核提供的一种调试机制,它提供了一种方法,能够在不修改现有代码的基础上,灵活的跟踪内核函数的执行。kprobe已经被Linus纳入主树,只需要内核选项“CONFIG_KPROBES=y”就可以开启kprobe功能。

Kprobe提供了三种形式的探测点,一种是最基本的kprobe,能够在指定代码执行前、执行后进行探测,但此时不能访问被探测函数内的相关变量信息;一种是jprobe,用于探测某一函数的入口,并且能够访问对应的函数参数;一种是kretprobe,用于完成指定函数返回值的探测功能。其中最基本的就是kprobe机制,jprobe以及kretprobe的实现都依赖于kprobe。

2.2.    How kprobe works?

对于kprobe功能的实现主要利用了两个功能特性:trap(x86/x64下是int 3),单步执行(EFLAGS中的TF标志)。

kprobe功能初始化时会注册到die_notifier通知链,该通知链在trap、debug异常的时候被调用,从而使得kprobe可以感知trap、debug异常。

通过kprobe查看探测点的大概的流程:

 1)注册探测点

kprobe会对被探测地址的指令码进行替换,替换为int 3(trap)的指令码,并将原有地址和指令码保存。同时会保存用户希望在探测点执行的代码pre_handler(指令码)。

 2)内核执行到探测点

由于探测点的指令码被修改为trap,触发trap异常。通过do_int3-->notify_die调用到kprobe的回调函数。

 3)在kprobe回调函数中处理trap异常

kprobe根据寄存器中RIP(x64),计算出触发异常的RIP(寄存器RIP中存放着触发异常的下一条指令的地址)。

kprobe根据计算出的RIP与第一步中保存的地址相比较,判断是否是探测点。

执行第一步中保存的pre_handler

 4)执行原有的指令

通过设置EFLAGS中的TF标志位,进入单步调试模式,并且把异常返回的地址修改为第一步中保存的原指令码;

 5)回复执行流程

因为进入单步调试模式,原有指令码执行完成后,会触发DEBUG。通过do_debug-->notify_die调用到kprobe的回调函数。

 6)在kprobe中恢复原有执行流程

kprobe修改RIP中保存的异常返回的指令地址为第一步中保存的指令地址的下一条地址。DEBUG异常返回后,调整到RIP中执行,原有流程恢复。

2.3.    How kretprobe works?

kretprobe利用kprobe实现,可以在函数返回之前添加要执行的代码。kretprobe的大概流程:

         1)在调用函数的call指令后添加kprobe

         2)kprobe的回调函数会记录下call指令保存的函数返回的return地址,并将该地址替换为一个特殊的“trampoline”。

         3)kprobe在trampoline地址上注册kprobe,该kprobe会调用用户定义的代码。

         4)当函数返回时,会执行“trampoline”,从而运行之前注册的用户定义代码。

3.   Utrace

3.1.    About Utrace

Utrace是Red Hat的Roland McGrath编写,是 Linux内核中最新的 trace和 debug基础构架。正如其名称所暗示,utrace为运行在用户态的进程提供 trace和 debug支持。

Utrace在2007年第一次提交到内核邮件列表,但是由于Linus的强烈反对(http://yarchive.net/comp/linux/utrace.html),目前Utrace仍然只在-mm分支,并不在Mainline。用户要想适应utrace,需要自己给内核打patch。

关于Utrace的介绍可以参考http://www.ibm.com/developerworks/cn/linux/l-cn-utrace/。

4.   Systemtap

4.1.    About Systemtap

SystemTapprovides free software (GPL) infrastructure to simplify the gathering ofinformation about the running Linux system. This assists diagnosis of aperformance or functional problem. SystemTap eliminates the need for thedeveloper to go through the tedious and disruptive instrument, recompile,install, and reboot sequence that may be otherwise required to collect data.

SystemTapprovides a simple command line interface and scripting language for writinginstrumentation for a live running kernel plus user-spaceapplications. We are publishing samples, as well as enlarging the internal"tapset" script library to aid reuse and abstraction.

Amongother tracing/probing tools, SystemTap is the tool of choice for complex tasksthat may require live analysis, programmable on-line response, and whole-systemsymbolic access. SystemTap can also handle simple tracing jobs.

Currentproject members include Red Hat, IBM, Hitachi, and Oracle.( http://sourceware.org/systemtap/)

4.2.    How Systemtap works?

Kprobe和Utrace提供了内核态和用户态探测函数的接口,用户可以直接编写内核模块来实现debug/inject。鉴于内核模块的编写需要较高的门槛,Systemtap通过提供一个框架,只需要用户编写脚本就可以实现debug/inject。

用户需要编写systemtap脚本,然后systemtap框架将脚本转换成内核C代码,编译成内核模块,实现代码的debug/inject。

5.   Demo(SLES11SP2)

5.1.    Prepare

5.1.1.     Kernel Utrace

SLES11SP2已经应用了utrace patch,但是默认内核没有开启。修改开启UTRACE选项,重新编译内核

5.1.2.     Systemtap

zypperinstall systemtap

5.1.3.     Glibc debuginfo

如果需要debug/inject glibc库,需要安装对于的debuginfo安装包。

zypperca

zypper mr-e SLE11-SP2-Debuginfo-Core

zyppermr -e SLE11-SP2-Debuginfo-Updates

rpm -qiglibc

zypperinstall glibc-debuginfo-2.11.3-17.31.1(这里需要确保安装的debuginfo的版本与系统glibc版本完全一致)

5.2.    Coding program which will be injectd


5.3.    Systemtap scripts


5.4.    Run program


5.5.    Inject program


6.   What we can do with it?

PerformanceTuning

Debugkernel

Debugapplication

Injectrunning program

Injectlibray

……

7.   Appendix

7.1.    Per event performance

Claude Code 部署指南:Node.js、VS Code 与环境治理全解析 Claude Code 并非普通代码补全插件,而是首个面向工程实践的 agentic 编码代理,其核心依赖于 Node.js 运行时、VS Code 编辑器 API 与 Anthropic 云服务的三层协同。理解其‘部署’而非‘安装’的本质,是规避 npm.ps1 报错、VS Code 集成失效、API 认证泄露等高频问题的前提。通过用户级 npm prefix 配置可根治 Windows 权限冲突;借助 nvm 实现 Node.js 版本精准管控;结合 VS Code 工作区信任与 CLI 扩展安装保障集 阅读详情

相关推荐

Claude Code与Kimi K2双工具协同开发实战指南

在AI原生开发范式下,代码生成与知识调度正成为两大基础能力支柱。Claude Code本质是嵌入VS Code的语义补全引擎,依托Anthropic模型实现上下文感知的函数级代码生成;Kimi K2则是企业级RAG平台客户端,通过Skill配置驱动跨文档、跨系统的结构化知识调用。二者能力正交互补:前者解决‘怎么写’,后者回答‘该写什么’。技术价值体现在工程提效(如需求→代码闭环压缩至22分钟)、合规增强(私有知识注入替代通用幻觉)及协作升级(开发者与业务专家通过YAML Schema对齐语义)。典型场景包括

weixin_30457465的博客 462

SUSE源码包与debuginfo包

https://pan.baidu.com/s/1nvO1DkH

cgm88s的专栏 2417

Claude Code插件:AI驱动的VSCode开发效率工具详解

AI代码辅助工具正在改变现代软件开发流程,通过自然语言处理与机器学习技术实现智能代码补全、错误检测和自动化重构。这类工具的核心价值在于将重复性编码工作自动化,显著提升开发效率,特别适用于快速原型开发、遗留系统维护和技术文档生成等场景。以VSCode插件Claude Code为例,其深度集成了代码解释、智能重构和文档生成等实用功能,通过/explain、/refactor等命令实现即时AI辅助。开发者可以快速生成符合PEP8规范的Python代码,自动创建单元测试用例,甚至完成复杂的多线程问题诊断。结合API

weixin_30655569的博客 520

Linux内核调试方法总结 一

内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解。  一  调试前的准备 在调试一个bug之前,我们所要做的准备工作有:  有一个被确认的bug。包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助。可以采用二分查找法来逐步锁定bu

bugouyonggan的专栏 2546

node-red教程3.1 inject介绍

node-red inject节点的介绍与使用

知无涯 1万+

kernel-debuginfo-common-2.6.18-8.el5.i686.rpm

Linux内核调试需要的debuginfo,对应内核版本为2.6.18-8

一个suse11 sp1的crash工具版本问题

这几年排查的各种类型的crash也比较多了,各种类型的也算见过,但是排查这个crash,走了不该走的弯路,事后显得很low,为了防止自己犯类似错误,也同时提醒后人,记录之。 内核是suse11,sp1, uname -a Linux Ftp1 2.6.32.59-0.7-default #1 SMP 2012-07-13 15:50:56 +0200 x86_64 x86_64 x86_...

weixin_34244102的博客 593

SUSE源码包与debuginfo包-附件资源

SUSE源码包与debuginfo包-附件资源

Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe

http://www.ibm.com/developerworks/cn/linux/l-cn-systemtap1/index.html kprobe 的原理、编程接口、局限性和使用注意事项 杨 燚 (yang.y.yi@gmail.com), 计算机科学硕士, Intel 简介: 本系列文章详细地介绍了一个Linux下的全新的调式、诊断和性能测量工具Systemtap和它所依

hnllei的专栏 1605

Windows 24H2下eNSP AR_40启动失败的终极修复指南

本文针对Windows 11 24H2更新后eNSP AR_40路由器启动失败的问题,提供了终极修复方案。核心在于解决系统强制虚拟化安全(VBS/Hyper-V)与老版模拟软件的兼容性冲突。指南详细介绍了安装关键系统更新KB5053656、精细调整Windows虚拟化功能以及后续排错步骤,帮助用户在24H2系统上稳定运行eNSP进行网络实验。

weixin_29233333的博客 507

压电陶瓷传感器避坑指南:实测阻抗匹配对信号输出的影响(附示波器调试技巧)

本文深入探讨压电陶瓷传感器在工业振动监测中的阻抗匹配问题,通过等效电路模型和实测数据揭示负载阻抗对信号输出的关键影响。文章提供从元件选型到示波器调试的完整解决方案,特别强调100kΩ以上负载阻抗的重要性,并分享JFET缓冲器设计和PCB布局的实用技巧,帮助工程师避免信号失真和输出不稳定问题。

ooo22的博客 516

Suse 11 Code Debug and Inject

http://blog.chinaunix.net/uid-20662820-id-3799149.html 欢迎转载,转载请保留文档完整性!   Code Debug and Inject Author: Tony tingw.liu@gmail.com Date:2013年7月11日星期四   1.    Debug Linux下较新的内核调试

onlyForCloud的专栏 920

从打印攻击到视频重放:手把手用OULU-NPU训练你的第一个活体检测模型

本文详细介绍了如何使用OULU-NPU数据集训练活体检测模型,以应对打印攻击和视频重放等安全威胁。通过PyTorch框架,从环境准备、数据加载、预处理到模型架构设计,手把手教你构建一个高效的双流网络,结合CNN和LSTM技术,提升模型在多种攻击场景下的检测准确率。

weixin_29092031的博客 385

Python Inject与Django集成:解决多模块加载问题的终极指南

Python依赖注入框架python-inject为Django项目带来了优雅的解耦方案,但Django的多模块加载机制常常导致`InjectorException: Injector is already configured`错误。本文将深入探讨如何完美集成python-inject与Django,解决多模块加载问题,并提供最佳实践方案。 ## 为什么Django需要依赖注入?🤔 Dja

gitblog_00352的博客 339

【温室气体数据集】CAMS 发布的温室气体(GHG)数据集总结

【温室气体数据集】CAMS 发布的温室气体(GHG)数据集总结

WW、forever的博客 555

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 791

OpenSpec规范执行引擎:从命令行到Spec-as-Code的跃迁

规范驱动开发(SDD)是一种将业务逻辑以声明式方式编码为可验证、可版本化、可协作的结构化规范的工程范式。其核心原理在于将传统脚本中的隐式流程(如curl+jq+awk拼接)升维为具备语义约束、分层校验与DAG调度能力的执行契约。技术价值体现在统一异构工具语义、实现跨环境可复现、支撑CI/CD原生审计——例如将Linux命令、Redis操作、HTTP调用等通过type: exec/type: redis/type: http插件标准化为JSON输出结构,使断言、过滤、编排成为可能。典型应用场景包括API契约测

weixin_33896726的博客 516

Transformer实战(2)——循环神经网络详解

循环神经网络 (Recurrent neural networks, RNN) ,RNN 是在文本输入中广泛使用的神经网络。RNN 非常灵活,已被用于解决诸如语音识别、语言建模、机器翻译、情感分析和图像字幕等问题。RNN 利用输入的序列特性,序列输入可以是文本、语音、时间序列以及任何其他元素的出现取决于其前面元素的序列。在本节中,我们介绍了 RNN 及其变体,并学习如何使用 TensorFlow 进行实现。

盼小辉丶的博客 1万+

Claude持久化记忆方案:Code-First本地化记忆中间件

大语言模型的会话状态缺失是当前人机交互的核心瓶颈,其本质源于无状态上下文管理机制——每次新开对话即清空历史。解决该问题的关键不在于提升模型能力,而在于构建可控、可审计的外部记忆系统。基于SQLite本地存储、YAML声明式规则与两级精准注入机制,本方案实现低延迟、高隐私、可嵌入的记忆增强,支持键值记忆、语义检索与版本化生命周期管理。面向开发者,它以Python包形式提供工程级抽象,兼容Anthropic官方SDK,无需第三方云服务或黑盒插件,适用于命令行、VS Code、API网关等多场景。Claude-M

diejiankuai3444的博客 401

置顶必读(2) | 《YOLOv11实战:从入门到深度优化》目录导航篇(持续更新中)

🏆 本文收录于 《YOLOv11实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现全网各类 YOLOv11 / YOLO系列改进方案与实战案例,目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么改”,更讲“为什么这样改、如何真正落地到项目中”。

**My Coding Family** 11万+

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

【Unity】使用XLua进行热修复

(4)运行Hotfix Inject In Editor。//打印“已被修复”(1)将XLua的Tool拖入Asset。编写脚本(注意类上带有[Hotfix])Debug.Log("未被修复");(3)运行Genrate Code。print('已被修复')

weixin_47220117的博客 1111

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Claude Code vs OpenCode:AI编程助手的架构差异与工作流重构

AI编程助手已从简单代码补全演进为开发工作流的核心组件。其底层架构——是封闭单体沙箱还是开放模块代理——直接决定上下文处理能力、网络适应性、CI/CD集成深度及企业合规可行性。OpenCode以LSP协议桥接、AST级分析和models.dev抽象层,实现模型可替换、上下文可追溯、执行可审计;Claude Code则依赖静态AST快照与强绑定模型,在复杂项目中易受上下文截断与网络延迟制约。尤其在国产模型支持(如Qwen2.5-Coder)、弱网鲁棒性及私有化部署等维度,模块化设计展现出面向国内开发者的真实工

aibiba0894的博客 428

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

go函数的匿名调用,inject/Invoke,protobuf方法的调用

一、由于以前的代码是通过pb来传输数据的,大体流程是:前端—>后端的接口–>后端再请求pb服务接口。示例代码如下: 1.接收前端参数 // @Summary LTV趋势 // @Description LTV趋势 // @Tags 投放数据/LTV数据 // @Accept application/json // @Product application/json // @Param data body dass.GetLtvDataListRequest true "body" // @Su

疾风行的博客 780
上一篇: MMU基础知识
下一篇: Linux 内核模块实现udp发送字符串
asmxpl
博客等级 码龄15年 9粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值