-5

我有以下 C 程序:

#include<stdio.h>
int main()
{
    printf("hhhh");
    return 0;
}

编译、复制和比较的命令:

$ gcc print.c -o a.out
$ objcopy a.out b.out
$ cmp a.out b.out

我已经编译了这个程序并创建了一个可执行文件。然后,我使用该objcopy命令制作了可执行文件的副本。但是,当我比较这些文件时,我得到了这个:

文件不同:字节 41,第 1 行

我怎样才能知道缺少哪些内容?
任何帮助或指示将不胜感激。谢谢!

4

1 回答 1

0

我怎样才能知道缺少哪些内容?

是什么让您相信缺少任何内容?

工作方式objcopy是:

  1. 将输入文件的内容解析为内部表示。
  2. 按照选项的指示将原始文件的一部分复制到输出文件

没有任何地方objdump保证当给出“复制整个文件”时,结果将是位相同的。

特别是,不可加载的部分可以以其他方式重新排序或更改。

不同之处在于 .init_array 部分的 EntSize 在 a.out 文件中为 0 字节,在 b.out 中为 8 字节

of 0对于EntSize非空部分没有意义。如果您的 中确实有这样的部分a.out,那么您的链接器很可能有错误。

于 2018-01-26T05:38:20.097 回答