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