向 C 二进制文件添加 ASCII 注释?

Add ASCII comments to a C binary?

我的 C 编程经验极少。

操作系统是Linux。当您对程序文件执行 less 时,它会显示一堆随机字符,但也会显示原始 C 源代码中的一些可读 ASCII 字符。

有没有办法强制在二进制文件中显示注释,最好是在程序文件的开头附近,以便其他人了解它的用途?评论的格式不必很漂亮,连续的一行文字即可。

注释只出现在源代码中,不会出现在二进制文件中。如果您在二进制文件中找到任何可读文本,那是因为您遇到了程序使用的字符串文字。

二进制文件只能由计算机而不是人类读取,因此无论如何在其中包含注释是没有任何意义的。

如果您出于未知原因需要带有注释的二进制文件之类的东西,请从 C 源代码生成 反汇编。它将包含机器代码以及 C 代码和 C 代码注释。

话虽这么说,您 可以 强制程序 link 一个字符串到二进制文件,即使该字符串未被程序使用,通过添加一些东西喜欢:

volatile const char foo [] = "STOP LOOKING AT MY BINARY!";

在某些格式中,您可以将文本字符串添加到一个特殊的 。但是,这需要对 C 和目标文件格式有更深入的了解,并且是 implementation/OS 具体的。

您可以 - OTOH - 从您的程序中打印一些解释性文本。举个例子试试 less -h

二进制文件不应使用 less 实用程序进行流式传输,在不太开明的日子里,您可能会通过这样做严重提升您的终端设置。使用 stringsobjdump 实用程序在二进制文件中搜索字符串会更安全。

没有好的 方法可以将注释添加到二进制文件中;二进制格式并不意味着人类可读,并且通常不允许自由格式的文本。正如 Lundin 建议的那样,您可以将一些字符串对象添加到您的源代码中,这些对象可以从已编译的二进制文件中提取出来。下面是使用 objdump 工具的示例:

#include <stdio.h>

int main( void )
{
  const char *str = "This is a test of the Emergency Broadcast System.";
  puts( str );
  return 0;
}

编译后,我们可以提取常量字符串数据如下:

[fbgo448@n9dvap997]~/prototypes/words: objdump -d -j.rodata -C foo

foo:     file format elf64-x86-64

Disassembly of section .rodata:

0000000000400610 <_IO_stdin_used>:
  400610:       01 00 02 00 00 00 00 00 54 68 69 73 20 69 73 20     ........This is
  400620:       61 20 74 65 73 74 20 6f 66 20 74 68 65 20 45 6d     a test of the Em
  400630:       65 72 67 65 6e 63 79 20 42 72 6f 61 64 63 61 73     ergency Broadcas
  400640:       74 20 53 79 73 74 65 6d 2e 00                       t System..

在ELF格式中,字符串常量存储在二进制文件的.rodata部分。

不过,这已经很漂亮了。