c - 如何检查两个可执行二进制文件是否是从相同的源代码生成的?

标签 c executable binaryfiles

例如,我有两个 C 二进制可执行文件。如何确定两者是否使用相同的源代码生成?

最佳答案

一般来说,这是完全不可能做到的。

  • 您可以从同一来源生成不同的二进制文件
  • 可以从不同来源生成两个相同的二进制文件

  • 可以通过不同方式添加版本信息。但是,如果您愿意,您可以很容易地欺骗所有这些方法。

    这是一个可能对您有所帮助的简短脚本。请注意,它可能有缺陷。这只是为了展示这个想法。不要只是复制它并在生产代码中使用。
    #!/bin/bash 
    
    STR="asm(\".ascii \\\"$(md5sum $1)\\\"\");"
    NEWNAME=$1.aux.c
    cp $1 $NEWNAME
    echo $STR >> $NEWNAME
    gcc $NEWNAME
    

    它所做的基本上是确保源的 md5sum 作为字符串包含在二进制文件中。它是特定于 gcc 的,您可以在此处阅读有关该想法的更多信息:embed string via header that cannot be optimized away

    关于c - 如何检查两个可执行二进制文件是否是从相同的源代码生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59818094/

    相关文章:

    python - 从文件中读取 16 字节 Fortran float 到 Python

    c - 读取数据并使用 scanf 跳过括号

    c - AES ECB 加密/解密只解密前 16 个字节

    Java 运行时 exec() 行为

    python - C++/Python 中对象和结构的二进制文件结构

    java - 使用 BufferedReader 写入文本文件

    c++ - 非常具体的未解析外部符号 type_info::`vftable 在/NODEFAULTLIB 可执行文件中使用虚拟函数时

    C 中的计算单元转换器

    command-line-arguments - Dyalog APL : how to write standalone files that can be executed?

    .net - 编译后,在 .net exe 中操作字符串?