可执行文件有什么区别?

时间:2018-01-23 10:28:46

标签: c linux elf objcopy

我有以下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行

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

1 个答案:

答案 0 :(得分:0)

  

我如何知道缺少哪些内容?

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

objcopy的工作方式是:

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

    objdump无处保证在给出“复制整个文件”时,结果将是相同的。

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

      

    区别是.init_array节的EntSize在a.out文件中是0字节,在b.out中是8字节

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