arm汇编代码 - 理解cpp源码的反汇编

时间:2013-08-01 11:39:55

标签: c++ arm

我已经拆解了代码。我想知道原始源文件中这些指令的相应行号。

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

一个函数例如说android::CameraHardware::createInstance在程序集中显示为_ZN7android18CameraHardware14createInstanceEib。我甚至不确定这是否是正确的功能我应该与之进行比较。

为什么名字如此奇怪,前后都附加了一些东西?我通常对C代码做同样的事情。功能名称在反汇编代码中直接显示。

总而言之,我有两个问题。

  • 在GDB内部,有没有办法让我得到一个a的行号 特别的汇编指令?

    比如说在0x40d9078c,我想知道它在哪一行 对应于其源文件。我试过了信息线。没用任何 其他建议?

  • 当我们理解cpp代码的反汇编时,如何 了解命名约定?还有我们需要的其他东西 理解为先决条件?

感谢。

1 个答案:

答案 0 :(得分:3)

android::CameraHardware::createInstance_ZN7android18CameraHardware14createInstanceEib的转换称为“名称修改”,对于C ++来说是正常的。这是你如何拥有多个具有相同名称的函数,使用不同的参数,并让链接器告诉你“当我只声明它时我找不到foo(int x, double y)”,但没有定义它。

在Linux中,你可以使用c++filt将一个受损的名称翻译成其未编码的形式(假设它是用Linux风格的修改约定编译的 - 这是android的作用 - 但如果你要使用Microsoft编译的代码,它显然不起作用)。

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