如何检查两个可执行二进制文件是否从相同的源代码生成?
How to check whether two executable binary files are generated from same source code?
比如我有两个C二进制可执行文件。如何判断两者是否使用相同的源代码生成?
总的来说,这是完全不可能做到的。
- 您可以从同一来源生成不同的二进制文件
- 可以从不同的来源生成两个相同的二进制文件
可以通过不同的方式添加版本信息。但是,如果你愿意,你可以很容易地欺骗所有这些方法。
这是一个简短的脚本,可能会对您有所帮助。请注意,它可能有缺陷。这只是为了展示这个想法。不要只是复制它并在生产代码中使用。
#!/bin/bash
STR="asm(\".ascii \\"$(md5sum )\\"\");"
NEWNAME=.aux.c
cp $NEWNAME
echo $STR >> $NEWNAME
gcc $NEWNAME
它所做的基本上是确保源的 md5sum 作为字符串包含在二进制文件中。它是特定于 gcc 的,您可以在此处阅读有关该想法的更多信息:embed string via header that cannot be optimized away
比如我有两个C二进制可执行文件。如何判断两者是否使用相同的源代码生成?
总的来说,这是完全不可能做到的。
- 您可以从同一来源生成不同的二进制文件
- 可以从不同的来源生成两个相同的二进制文件
可以通过不同的方式添加版本信息。但是,如果你愿意,你可以很容易地欺骗所有这些方法。
这是一个简短的脚本,可能会对您有所帮助。请注意,它可能有缺陷。这只是为了展示这个想法。不要只是复制它并在生产代码中使用。
#!/bin/bash
STR="asm(\".ascii \\"$(md5sum )\\"\");"
NEWNAME=.aux.c
cp $NEWNAME
echo $STR >> $NEWNAME
gcc $NEWNAME
它所做的基本上是确保源的 md5sum 作为字符串包含在二进制文件中。它是特定于 gcc 的,您可以在此处阅读有关该想法的更多信息:embed string via header that cannot be optimized away