使用Python解析ELF文件获取全局变量地址和长度,替代XCP和freemaster方案

Python解析ELF文件获取全局变量的的地址和长度


文章目录

  • Python解析ELF文件获取全局变量的的地址和长度
  • 前言
  • 一、elf文件解析
  • 二、图文解读
  • 总结
  • 写在结尾

  • 前言

    最近准备对ECU内部变量进行读写标定,之前公司大佬提供了nxp的freemaster的工具标定方案,但是担心以后芯片换成其他公司后这个方案就无法使用了,最近自己研究了下其他方案,通过解析编译生成的ELF文件,获取变量的的地址和长度,本文将记录如何获取结构体变量地址的方法,其中大部分参考了链接: 点击这里中这位大佬的解析


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、elf文件解析

    readelf -a test.elf > elf_info.txt		//导出elf变量地址信息
    readelf -w test.elf > dwarf_info.txt	//导出变量dwarf信息,查询结构体变量偏移值就靠这个了
    

    二、图文解读


    Value这一列是地址信息,Nxd Name这一列是变量名


    我们以AudioReply这个结构体为例,他的地址就是20000bc0,这样我们就拿到了结构体的起始位置了

    我们在dwarf_info.txt这个文件中能够通过AudioReply这个结构体名查到以上信息,然后通过DW_AT_type的值为<0x188f5>,通过他查询

    可以查询到DW_TAG_structure_type这个标签所在的的行, _AUDIO_REPLY下面的子标签就是这个结构体的各个变量了,DW_AT_data_member_location就是相对结构体其实位置的便宜量,通过pyelftool就能够读取到相关信息的value值,但是需要和die.cu.cu_offset信息相结合才能进行便利查询,其他项的查询也是按照这种方式进行的。


    总结

    拿到这些信息后,我们就可以通过jlink结合实现类似CANoe的XCP或者freemaster的MCU内部的全局变量标定方案了

    写在结尾

    我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用Python解析ELF文件获取全局变量地址和长度,替代XCP和freemaster方案

    发表评论