如何为GDB的JIT代码生成ELF文件格式?

3

背景:

我正在生成一个 JIT 代码(生成 x86-64 代码)。在 JIT 过程结束后,我生成了一个 .text 部分、一个 .data 部分和一个 .eh_frame 部分(.eh_frame 用于堆栈展开)。我能够成功地执行这个 JIT 代码,但问题出现在 GDB 上。我想要使用 GDB 调试这个 JIT 代码(特别是 'backtrace' 命令应该可以工作)。

问题:

我需要告诉 GDB 关于这个加载的 JIT 代码(特别是我需要告诉 GDB 关于 .eh_frame,以便它可以使用该帧进行堆栈展开)。我发现 GDB 有一个 JIT 接口:https://sourceware.org/gdb/current/onlinedocs/gdb/JIT-Interface.html

可能的解决方案:

这里有两个选项:

  1. 将 ELF 文件交给 GDB
  2. 编写自定义 Jit-Reader 插件来处理自定义对象文件的调试。

现在我有一个自定义对象文件(只是一些独立的部分加载到内存中)。我不想编写自己的 Jit Reader 插件。

阻塞问题:

有没有人知道现有的代码可以帮助我将这三个独立的部分打包成一个简单的 ELF 文件(然后我可以通过调用 __jit_debug_register_code() 注册它)?我猜想我所需要做的就是编写一些符合 ELF 规范的头文件,其中包含名称和指向该部分的指针。是否存在现有的开源代码,或者如果没有,能否有人指引我如何自己进行打包?

我需要最少量的 ELF 文件,以便 GDB 满意(我不需要将 ELF 文件作为 .text 和 .data 部分已经加载了)。

1个回答

1

libelf可以帮助构建ELF对象。有以下开源实现可供使用:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接