0

我正在开发一个分析 PowerPC 代码并为其生成 LLVM 代码的程序。由于我对分支点/子程序地址的分析,代码可能不完整(例如,如果代码对函数指针做了一些非常奇怪的事情),我计划设置一个后备机制,如下所示:

  1. 生成的子程序尝试从原始程序分支到地址,这将是一个未映射/不可执行的页面(取决于主机架构能力)。
  2. 导致分段错误。
  3. 分段错误处理程序识别发生了什么,保存地址以供下次程序启动时进行全面分析,然后执行快速而肮脏的分析,并使用 LLVM 的 JIT 能力为新的分支目标生成可执行代码。
  4. 恢复分支时的处理器状态,但指向新生成的代码除外。

问题是我无法弄清楚如何在分段错误时获取处理器状态。我相当肯定有一种方法,因为 GDB 一直在这样做。

虽然代码是跨平台的,但我现在专注于在 x86 OSX/Posix 上实现它。

4

0 回答 0