gpt4 book ai didi

elf - Trace32 命令从 ELF 文件中读取符号内容

转载 作者:行者123 更新时间:2023-12-04 17:16:29 36 4
gpt4 key购买 nike

问题场景 :
简单来说,我们是否有一个 Trace32 命令来从加载到目标的 ELF 文件中读取符号(及其内容)?我们有这种特殊情况,其中 ELF 文件的应用程序特定调试符号作为 ELF 中“.noload”部分的一部分,这意味着符号/内容存在于 ELF 文件的一部分(使用 readelf -a xxxx. elf_file_name) 但不是生成的最终二进制镜像的一部分,即在生成闪存到目标内存的 xxx.bin 时,ELF 文件中的“.noload”部分被剥离。

  • “.noload”部分中的调试符号是静态分配的值,这些值在运行时不会更改。
  • 当我尝试读取“.noload”部分的调试符号部分(在编译为二进制文件并加载到 Trace32 之后)时,我看到在 trace32 弹出窗口上标记了“MMU 失败”,这意味着 trace32 正在尝试从内存中读取符号内容,但是不可访问,因为“.noload”部分的符号部分虽然已映射地址,但根本未加载。

  • 任何输入 :
    - 我需要 trace32 命令的帮助,该命令可以直接从 ELF 文件而不是从目标内存读取符号内容。
    - 也不确定我是否可以在练习脚本中使用“readelf”?如果我们对上述查询没有任何解决方案,在这方面有什么帮助吗?

    最佳答案

    使用命令

    Data.LOAD.Elf myfile.elf [<optional address offset>] /NoCODE

    选项/NoCODE 指示 TRACE32 仅从您的 ELF 加载 debgug 符号,但不将任何代码加载到您的目标。您可以使用命令 sYmbol.Browse 查看符号.

    但是,如果您使用 TRACE32 将应用程序加载到目标,则不必先从 ELF 创建二进制文件。使用 TRACE32,您还可以将 ELF 的 PROGBITS 部分直接加载到您的目标。
    在这种情况下,您只需使用不带/NoCODE 选项的 Data.LOAD.Elf 命令(启用闪存编程后)。

    由于您使用的是 MMU,您可能希望使用命令 SYStem.Option.MMUSPACES ON 激活逻辑内存空间 ID。 .然后加载你的符号
    Data.LOAD.Elf myfile.elf <space-ID>:<offset> /NoCODE

    其中“space-ID”与 MMU 用于任务的 space-ID 匹配,“offset”通常为零。

    如果您在嵌入式 Linux 上调试应用程序,则应该使用 Linux 的 TRACE32 操作系统感知和 Linux 符号自动加载器为您将符号加载到正确的地址。

    我认为您没有任何理由应该在 TRACE32 中使用“readelf”。无论如何,您可以使用命令 OS.Area 调用任何命令行程序或 OS.Command .

    关于elf - Trace32 命令从 ELF 文件中读取符号内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40836941/

    36 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com