【问题标题】:How to check if the linux binary file has newly added code or not如何检查linux二进制文件是否有新添加的代码
【发布时间】:2012-12-31 21:22:39
【问题描述】:

我有一个项目,由多个 *.cpp 文件组成,我使用 g++ 编译这些文件。 我更改了一个源文件以添加一些代码。再次构建项目。只是为了检查我做了

diff -s origbinaryfile changedbinaryfile

它显示文件是相同的,这很奇怪,因为我添加了一个额外的代码,并希望看到生成的 linux 二进制文件有所不同。

我在现有的switch case 代码中添加了一个额外的 case 语句的代码。例如 之前我有

switch(x) {
case DEV1:
 ...
case DEV2:
 ...

换一个是

switch(x) {
    case DEV1:
     ...
    case DEV2:
     ...
    case DEV3:

DEV1DEV2DEV3 是枚举声明的枚举数。

如何使用nm 命令或任何其他命令验证添加的代码是否真的存在于二进制文件中?

还有其他方法吗?

[听起来可能很傻,但我做了很仔细,以确保我在编译时没有出错]

【问题讨论】:

    标签: linux binary g++ symbols


    【解决方案1】:

    你不能。
    当然你可以反汇编你的文件并比较 asm 代码,但是它被编译器优化得如此之大,以至于你很难通过这种方法得到任何有意义的结果。

    您也可以使用cmp 命令比较您的文件,它适用于二进制文件,可能比diff 更合适。

    但是,二进制差异并不能 100% 保证任何代码都已实际更改。编译器通常会添加调试信息和编译时间戳,因此连续编译两次相同的代码将导致两个具有不同字节的二进制文件。

    【讨论】:

    • 如果我添加一个虚拟代码,比如 say int dummy = 0xDEADBEEF; dummy = dummy 或一些此类标记数据或代码,它们将显示在 nm 或字符串输出中,无需编译器对其进行优化
    • 这可能有效。特别是如果性能/大小不是问题并且您可以禁用编译器优化。
    猜你喜欢
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2011-02-11
    • 2010-09-14
    相关资源
    最近更新 更多