gpt4 book ai didi

比较目标文件以查找变量更改

转载 作者:行者123 更新时间:2023-12-04 02:39:20 27 4
gpt4 key购买 nike

所以在 32 位环境中我编译了一个“.c”文件。

       A.c and get A.o

我保存 A.o 。

假设 A.c 有一个像这样的变量

     int a // i change this to long a;

更改后我编译并得到另一个 A.o.

现在当我执行“cmp A.o A.o”时,我可以看到这些文件不同。现在我的问题是我可以通过比较“.o”文件找出到底发生了什么变化。

我正在获取汇编代码并进行比较,但我无法弄清它的正反面。有人可以建议更聪明的方法吗。

最佳答案

我试着回答这个问题。目标文件可以直接与二进制十六进制编辑器进行比较。您以这种方式获得的内容不是人类可读的,因为目标文件主要是机器代码(当它尚未链接时,它也有链接器的符号)。我发现这种方法只对检查一些小事情有用(比如代码版本和固件的构建日期)。我认为只有反汇编目标文件才能实现对显着变化的理解。幸运的是,有一些工具可以完成这项工作,例如用于 linux 和 unix 的 objdump,汇编程序有时并不简单,但至少它是人类可读的。假设您使用的是 linux 机器,您可以运行以下命令:

objdump -d yourobjectfile1 > out1
objdump -d yourobjectfile2 > out2

然后比较结果。你会发现 c 代码的一点点变化都会导致汇编代码的大调整,所以对于实验我建议你使用 helloworld.c 级别的东西

其他建议

  1. 使用 -O0 编译,它创建一个更简单的程序集(并且更类似于你的 c) 因为优化被禁用。
  2. 尝试使用可执行文件或链接的共享库(仅机器代码)并在比较之前剥离您的对象,这样您将减小其大小。
  3. 您可以创建一个混合的 c 汇编程序代码,这样可以使阅读更容易:gcc -g -c -fverbose-asm myfile.c; objdump -d -M intel -S ass.o > main.s

列表项

关于比较目标文件以查找变量更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202454/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com