我已经拆解了代码。我想知道原始源文件中这些指令的相应行号。
另外,我想了解一些事情。
一个函数例如说android::CameraHardware::createInstance
在程序集中显示为_ZN7android18CameraHardware14createInstanceEib
。我甚至不确定这是否是正确的功能我应该与之进行比较。
为什么名字如此奇怪,前后都附加了一些东西?我通常对C代码做同样的事情。功能名称在反汇编代码中直接显示。
总而言之,我有两个问题。
在GDB内部,有没有办法让我得到一个a的行号 特别的汇编指令?
比如说在0x40d9078c,我想知道它在哪一行 对应于其源文件。我试过了信息线。没用任何 其他建议?
当我们理解cpp代码的反汇编时,如何 了解命名约定?还有我们需要的其他东西 理解为先决条件?
感谢。
答案 0 :(得分:3)
从android::CameraHardware::createInstance
到_ZN7android18CameraHardware14createInstanceEib
的转换称为“名称修改”,对于C ++来说是正常的。这是你如何拥有多个具有相同名称的函数,使用不同的参数,并让链接器告诉你“当我只声明它时我找不到foo(int x, double y)
”,但没有定义它。
在Linux中,你可以使用c++filt
将一个受损的名称翻译成其未编码的形式(假设它是用Linux风格的修改约定编译的 - 这是android的作用 - 但如果你要使用Microsoft编译的代码,它显然不起作用)。
如果使用调试符号进行编译,gdb应该能够显示给定代码段的源代码。将-g
添加到编译中的g++
行。