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