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



背景:

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

问题:

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

可能的解决方案:

这里有两个选项:

  1. 将ELF文件移交给GDB
  2. 编写一个客户Jit阅读器插件来处理自定义对象文件的调试

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

阻塞问题:

有人知道现有的代码可以帮助我将这三个独立的部分打包到一个简单的ELF文件中吗?我想我所需要做的就是编写一些标题(符合ELF规范),其中包含指向该部分的名称和指针。有没有现有的开源代码,如果没有,有人能告诉我如何自己打包吗?

我需要最低限度的ELF文件,以便GDB满意(我不需要加载ELF文件因为.text和.data部分已经加载)

libelf可以帮助构建ELF对象。以下网址提供了开源实现:

  • elftoolchain(BSD许可)
  • elfutils(GPL)

最新更新