• GDB之源码与汇编映射对应关系(十五)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:GDB之源码与汇编映射对应,查阅方便。

    2.调试实例

    <1>. test.cpp源码

    1 #include <cstdio>
    2 
    3 void test(){
    4   printf("1111111111111111\n");
    5 }
    6 
    7 int main(void) {
    8   test();
    9   return 0;
    10 }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    <2>.汇编代码与源码映射调试过程:test函数源码与汇编代码映射。

    (gdb) disa
    disable      disassemble  
    (gdb) disassemble /m test
    Dump of assembler code for function _Z4testv:
    3	void test(){
       0x0000000000001149 <+0>:	endbr64 
       0x000000000000114d <+4>:	push   %rbp
       0x000000000000114e <+5>:	mov    %rsp,%rbp
    
    4	  printf("1111111111111111\n");
       0x0000000000001151 <+8>:	lea    0xeac(%rip),%rax        # 0x2004
       0x0000000000001158 <+15>:	mov    %rax,%rdi
       0x000000000000115b <+18>:	call   0x1050 
    
    5	}
       0x0000000000001160 <+23>:	nop
       0x0000000000001161 <+24>:	pop    %rbp
       0x0000000000001162 <+25>:	ret    
    
    End of assembler dump.
    (gdb)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    <3>.查看某一行所对应的地址范围,比如第4行。

     (gdb) i line 4
    Line 4 of "test.cpp" starts at address 0x1151 <_Z4testv+8> and ends at 0x1160 <_Z4testv+23>
    
    • 1
    • 2

    以上是 printf(“1111111111111111\n”);代码寻址语句:它的寻址范围: 0x1151 —> 0x1160。

    <4>.查看 printf(“1111111111111111\n”)语句(寻址范围 0x1151 —> 0x1160)对应的汇编代码,使用disassemble Start,End命令

    (gdb) disassemble 0x1151,0x1160
    Dump of assembler code from 0x1151 to 0x1160:
       0x0000000000001151 <_Z4testv+8>:	lea    0xeac(%rip),%rax        # 0x2004
       0x0000000000001158 <_Z4testv+15>:	mov    %rax,%rdi
       0x000000000000115b <_Z4testv+18>:	call   0x1050 
    End of assembler dump.
    (gdb)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    Ajax和axios基础
    最新最全面的Spring详解(四)——面向切面编程
    ubuntu22.04.3 安装postgresql 16 rc1数据库
    samba共享服务-多用户挂载smb共享
    【OSS】服务端签名后直传实现阿里云存储上传文件
    说下 RESTful API 使用的几个方法
    PMP每日一练 | 考试不迷路-11.09(包含敏捷+多选)
    单段时间最优S型速度规划算法
    继认证后弄清Spring Security实现授权
    16 C++ 二叉树遍历 Binary tree traversal
  • 原文地址:https://blog.csdn.net/u010164190/article/details/132898323