我可以让 objdump --full-contents 只打印原始文本吗?

Can I get objdump --full-contents to only print the raw text?

我有一个目标文件,其中有一个部分包含正确的 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 的换行符)?或者 - 我是否必须执行一系列文本处理以将点与其值相关联,用适当的字符替换它们,删除行前缀,删除人工换行等?

使用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 表示的十六进制字符串,请使用 .