debugging - 您如何了解 JIT 代码中发生的情况?

标签 debugging firefox reverse-engineering jit disassembly

我正在使用 Firefox 进行一个研究项目。 Firefox 在运行时使用大量JIT 代码。

我使用自定义 PIN 工具 来检测 Firefox,以找出我要查找的某些内容的位置(地址)。问题在于这些位置位于 JIT 代码中。我想知道代码中实际发生了什么。

为此,我转储了相应的内存区域并使用 objdump 来反汇编转储。 我使用 objdump -D -b binary -mi386 file.dump 来查看将要执行的指令。令我惊讶的是,列出的唯一部分是 .data 部分(非常大的部分)。

要么是我错误地反汇编了它,要么是我的理解有其他问题。我希望看到更多像 .text 这样的部分,其中应该存在实际的可执行指令,而 .data 部分不应该是可执行的。

我的理解正确吗?

另外,如果有人可以请告诉我如何正确了解 Jit'ed 代码中发生的情况。

机器 Linux 3.13.0-24-generic#47-Ubuntu SMP x86_64

最佳答案

or something else is wrong with my understanding

是的:您的理解还有问题。

节(例如 .text.data)仅在静态链接时有意义(静态链接器将来自多个的 .text 分组) .o 文件一起合并到最终可执行文件中的单个 .text 中)。它们没有用,实际上可以在执行时被完全剥离。在 ELF 系统上,运行时所需的只是段(特别是 PT_LOAD 段),您可以使用 readelf -l binary 查看它们。

ELF 文件中的部分是“文件的一部分”。当您转储内存时,讨论这些部分就没任何意义。

您在 objdump 输出中看到的 .data 也并不真正存在,它只是 objdump 制造的工件。

关于debugging - 您如何了解 JIT 代码中发生的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656270/

相关文章:

android - 无法在 Windows 上使用 Android Studio 1.3.2 调试 NDK 示例

c# - System.ExecutionEngineException 仅在调试时出现

css - 如何避免 Firefox 在 PDF 位于具有 CSS 属性显示 :None? 的 Div 中时显示通知栏

css - 使用 :active CSS in Firefox/IE breaks CSS anchor behavior 拖动 anchor

java - 修改Java字节码中的一个字符串(jar)

.net - 可以将 DebuggerDisplay 属性应用于 Microsoft.Office.Interop.Word.Range 吗?

windows - 如何在启动时关闭 Windows 内核调试?

google-chrome - 访问 Chrome 书签的键盘快捷键 (mac)

c++ - 了解 C/C++ 中 Windows/MSVC 的一些 Antidebug 内联汇编

c++ - 标准库容器的结构中是否有未使用的变量?