0

我在arm中反汇编了代码。我想知道这些指令在其原始源文件中对应的行号。

另外,我想了解一些事情。

例如,一个函数android::CameraHardware::createInstance在汇编中显示为_ZN7android18CameraHardware14createInstanceEib. 我什至不完全确定这是否是我应该与之比较的正确功能。

为什么名字这么奇怪,前后都加东西?我通常对 C 代码做同样的事情。在反汇编代码中,函数名称看起来很直接。

所以总结一下,我有两个问题。

  • 在 GDB 内部,有没有办法获得特定汇编指令行的行号?

    例如在 0x40d9078c,我想知道它对应于源文件中的哪一行。我试过信息线。没用。还有其他建议吗?

  • 当我们在理解cpp代码的反汇编时,如何理解命名约定呢?此外,我们还需要了解哪些其他事情作为先决条件?

谢谢。

4

1 回答 1

3

android::CameraHardware::createInstanceto的翻译_ZN7android18CameraHardware14createInstanceEib称为“名称修饰”,对于 C++ 来说是正常的。这是您如何拥有多个具有相同名称的函数,采用不同的参数,并让链接器告诉您“我找不到一个foo(int x, double y)”,而您只声明了它,但没有定义它。

在 Linux 中,您可以使用c++filt将损坏的名称转换为其未损坏的形式(假设它是使用 Linux 样式的修饰约定编译的 - android 会这样做 - 但如果您使用 Microsoft 编译的一段代码,它显然不会工作)。

如果您使用调试符号进行编译,gdb 应该能够向您显示给定代码的源代码。添加-gg++编译中的行。

于 2013-08-01T11:48:29.963 回答