查看: 1876|回复: 4

[讨论] 如何将elf文件中符号的地址再链接回ELF文件中,并保持不变?

[复制链接]
  • TA的每日心情
    慵懒
    2021-8-31 12:39
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    26

    主题

    149

    帖子

    1

    高级会员

    Rank: 4

    积分
    559
    最后登录
    2025-7-17
    发表于 2023-5-8 10:07:02 | 显示全部楼层 |阅读模式
    现在有这样一个需求:  程序进入异常中断后,需要从栈中的PC值大概定位所在函数。
      当前的做法是:
             1. 编译出ELF文件,然后用nm命令导出ELF文件所有函数的地址和名称,使用地址排序,制作出一张表,
             2. 将表以数组的形式写入到之前的源文件中
             3. 再次编译链接源码成ELF文件

    但是这种做法有问题:再次生成的ELF文件个函数地址变了


    求教一下有没有什么办法可以解决这个问题?
    回复

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3255
    最后登录
    2023-6-23
    发表于 2023-5-8 14:42:20 | 显示全部楼层
    第一步:OK
    第二步的目的是什么?为什么不直接查这个表?却要导回到原来的源文件?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:55
  • 签到天数: 2368 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    83

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    21903
    最后登录
    2025-7-17
    发表于 2023-5-8 14:49:12 | 显示全部楼层
    直接在异常中把PC值打印出来,然后在工程编译的MAP里面去找不好嘛??
    有个专门的开源库CmBacktrace你可以看看。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:55
  • 签到天数: 2368 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    83

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    21903
    最后登录
    2025-7-17
    发表于 2023-5-8 14:50:55 | 显示全部楼层
    1. 编译出ELF文件,然后用nm命令导出ELF文件所有函数的地址和名称,使用地址排序,制作出一张表,


    这个在编译的map文件里面就有类似的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-8-31 12:39
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    26

    主题

    149

    帖子

    1

    高级会员

    Rank: 4

    积分
    559
    最后登录
    2025-7-17
     楼主| 发表于 2024-1-15 12:35:19 | 显示全部楼层
    流水源 发表于 2023-5-8 14:50
    这个在编译的map文件里面就有类似的

    确实可以在map文件里面查找!
    问题在于:
      1. 烧录的程序是bin文件,不是elf文件。
      2. 需要在程序中根据pc的值定位函数的位置。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 08:56 , Processed in 0.089344 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表