【问题标题】:Can I get objdump --full-contents to only print the raw text?我可以让 objdump --full-contents 只打印原始文本吗?
【发布时间】:2020-12-20 13:11:33
【问题描述】:

我有一个包含正确 ASCII(或 Latin-1?)文本的部分的目标文件。所以,如果我写:

$ objdump -s my_file.so --section=.rodata

看起来像这样(只从中间呈现几行,显然很长):

 070a80 656d3b0a 73697a65 5f742073 68617265  em;.size_t share
 070a90 644d656d 50657242 6c6f636b 3b0a696e  dMemPerBlock;.in
 070aa0 74207265 67735065 72426c6f 636b3b0a  t regsPerBlock;.
 070ab0 696e7420 77617270 53697a65 3b0a7369  int warpSize;.si
 070ac0 7a655f74 206d656d 50697463 683b0a69  ze_t memPitch;.i
 070ad0 6e74206d 61785468 72656164 73506572  nt maxThreadsPer
 070ae0 426c6f63 6b3b0a69 6e74206d 61785468  Block;.int maxTh

我的问题:我可以让 objdump 只打印文本,而不需要行索引和十六进制值吗?并至少正确打印所有打印字符(例如 0x0a 的换行符)?或者 - 我必须执行一堆文本处理以将点与它们的值相关联,用正确的字符替换它们,剪切行前缀,删除人工换行符等吗?

【问题讨论】:

    标签: text-processing objdump hexdump object-files


    【解决方案1】:

    使用 xxd

    使用 xxd 将避免 cuting 和 awking,并且是没有 objdump 标志的最佳解决方案。

    将格式化的 hexdump 保存到文件 temp,我们可以将结果通过管道传输到 xxd -r,(需要这样的格式化 hexdump):

    $ cat temp | xxd -r
    em;
    size_t sharedMemPerBlock;
    int regsPerBlock;
    int warpSize;
    size_t memPitch;
    int maxThreadsPerBlock;
    int maxTh
    

    如果您需要传入没有行号或 ascii 表示的十六进制字符串,请使用 xxd -r -p

    【讨论】:

    • 它是专门用来获取 objdump 输出的吗?或者 - objdump 输出是一种“标准 hexdump”格式吗?
    • 这是一个标准的“格式化十六进制转储”,许多程序会将其作为输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    相关资源
    最近更新 更多