【问题标题】:CMP command not working properlyCMP 命令无法正常工作
【发布时间】:2013-05-31 10:55:56
【问题描述】:

我在 x86 处理器中使用 cmp 命令并且工作正常(二进制文件是使用 gcc 生成的) 但是在 arm cortex a9 中使用它时,它没有给出正确的输出(二进制文件是使用 cross gcc 生成的)

在 X86 机器中使用 cmp 命令比较板特定二进制文件时,会产生正确的输出。

X-86 机器:

假设我有 2 个文件 a.bin、b.bin(使用 cmp 比较时应该相同)

cmp a.bin b.bin

及其正确的。

手臂皮质 A9:

a.bin,b.bin

cmp a.bin b.bin

这里也必须相同。

但它会产生不匹配。


请给点线索!!

【问题讨论】:

  • gcc的版本是否相同。在两者上运行gcc -v 并发布输出。另外,你叫他们一样吗?另见:binary changes each build.
  • 这是一个 exe vs elf 的事情吗? elf 和其他格式有时 gcc 和其他编译器会在编译时放置一个时间戳,这很容易看出是否字节比较文件。某些格式可能不是。如果它们被认为是没有像包装器这样的 elf/coff/exe 的原始二进制文件,那么请参阅 tangrs 答案,即使使用共享相同父名称的两个工具(gcc、msvc 等),也没有理由期望两个二进制文件匹配。
  • 请显示/列出差异。

标签: linux gcc x86 arm cortex-a8


【解决方案1】:

你的问题不是很清楚而且有点模糊,所以我会在黑暗中试探一下,假设你在问为什么相同的源代码编译成不同的文件。

尽管编译后的程序(假设没有 UB 或可移植性问题)无论使用什么编译器在功能上都是相同的,但二进制级别的程序不一定是。

例如,不同的优化级别会生成不同的文件。编译器可能会将构建日期嵌入到文件中。不同的编译器会以不同的方式排列代码。

这些都是为什么您可能会为“相同”程序获得不同输出的所有原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多