0

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

diff -s origbinaryfile changedbinaryfile

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

我在现有代码中添加了一个代码,它是一个额外的 case 语句。例如,switch case早些时候我有

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

改变的一个是

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

DEV1, DEV2,DEV3是枚举声明的枚举数。

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

还有什么办法吗?

[这可能听起来很傻,但我仔细地做了以确保我在编译时没有犯任何错误]

4

1 回答 1

0

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

或者,您可以使用cmp命令比较文件,它适用于二进制文件,可能比diff.

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

于 2013-01-17T10:57:22.650 回答