我有以下 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 命令来制作可执行文件的副本。但是,当我比较这些文件时,我得到了这个:
files differ: byte 41, line 1
我如何知道缺少哪些内容?
任何帮助或指示将不胜感激。谢谢!
最佳答案
How can I know what contents are missing?
是什么让您相信缺少任何内容?
objcopy 的工作方式是:
- 将输入文件的内容解析为内部表示。
- 按照选项的指示将原始文件的部分内容复制到输出文件
objdump
无法保证当给出“复制整个文件”时,结果将是位相同的。
特别是,不可加载的部分可以通过其他方式重新排序或更改。
The difference is EntSize of .init_array section is 0 bytes in a.out file and it is 8 bytes in the b.out
EntSize
0 对于非空部分没有意义。如果您的 a.out
中确实有这样的部分,则您的链接器可能存在错误。
关于c - 可执行文件之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48399445/