我试图实现一个函数来回溯在内核中崩溃的用户空间进程。 因为我在Kernel工作,所以没有任何库的function,而且提供的backtracefunction不支持MIPS架构。 我只是想知道我是否可以模仿GDB做什么。 内核的版本是2.6.21。
如何使用MinGW gdbdeBUGging器在windows中deBUGgingC ++程序?
在GDB中拆解C函数 澄清GAS大会指示
我如何在GDB中使用shell命令的输出作为GDB命令的参数?
linux的C:容易&'漂亮'转储/结构的打印输出(如gdb) – 从源代码?
内存使用情况:程序分配的内存太多
我想你可以参考oprofile的实现。
Oprofile使用帧指针来获取后台跟踪信息,因此它需要用户空间应用程序及其相关库全部使用帧指针来启用(“ – fno-omit-frame-pointer”选项)。
另一种方式是,如果用户应用程序包含调试信息,则可能需要检查用户应用程序的DWARF信息,DWARF调用框架信息会向调试器提供有关如何调用某个函数的足够信息,以便它可以找到每个参数功能,找到当前的呼叫帧,并找到呼叫信息的呼叫帧。
如果你想简单地抓取没有支持“frame-pointer”的后台跟踪信息或任何调试信息,那么你必须检查用户应用程序的mips指令,循环访问子上下文(SP,IP,RP),以获得父上下文(SP,IP,RP)通过mips ABI规范,这是有点复杂和耗时,因为你不得不反汇编内存中的许多指令,但它并不坏。 例如,对于很多程序来说,在乞讨中有一个“加sp,sp,-32”的指令,你会知道parent的sp是当前的sp加32。
第二个和第三个方法,你必须自己实现它,因为你在内核工作。
核心文件是ELF格式 。 这是一个标准,这是在很多网站上只有一个谷歌提供。
但是,这个文件格式是非trival。 很多怪癖和点点滴滴。 任何合理的人应该使用第三方库。 如果你真的想这样做,从libelf和readelf开始。 祝你好运。
总结以上是内存溢出为你收集整理的在MIPS Linux中追溯时,GDB如何find函数的符号?全部内容,希望文章能够帮你解决在MIPS Linux中追溯时,GDB如何find函数的符号?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)