c++ - arm 汇编代码 - 了解 cpp 源代码的反汇编

标签 c++ arm

我已经在 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/

相关文章:

使用 clang/llvm 的 C++ 精确垃圾收集器?

c++ - Qt:QSslSocket::bytesWritten() 信号发出得太频繁

c++ - 关于指针的引用

arm - 如何解码 Windows CE 调用堆栈?

c - ARM Cortex 上的 super 简单 Tasker

gcc - 使用 crosstool-NG 的 ARM 交叉编译器的正确选项是什么

c++ - 我可以在 C++ 中使用可配置的静态链接吗?

与arduino的C++通信

c++ - 运行时功能测试、setjmp、longjmp 和信号掩码

assembly - stp aarch64指令必须与 "non-contiguous pair of registers"一起使用