因此,在 32 位环境中,我编译了一个“.c”文件。
A.c and get A.o
我救了敖。
假设 Ac 有一个变量,如
int a // i change this to long a;
更改后我编译并获得另一个 Ao
现在,当我执行“cmp Ao Ao”时,我可以看到这些文件有所不同。现在我的问题是我可以通过比较“.o”文件找出究竟发生了什么变化。
我正在获取汇编代码并进行比较,但我无法对其进行正面和反面。有人可以建议一个更聪明的方法。
因此,在 32 位环境中,我编译了一个“.c”文件。
A.c and get A.o
我救了敖。
假设 Ac 有一个变量,如
int a // i change this to long a;
更改后我编译并获得另一个 Ao
现在,当我执行“cmp Ao Ao”时,我可以看到这些文件有所不同。现在我的问题是我可以通过比较“.o”文件找出究竟发生了什么变化。
我正在获取汇编代码并进行比较,但我无法对其进行正面和反面。有人可以建议一个更聪明的方法。
我试着回答这个问题。目标文件可以直接与二进制十六进制编辑器进行比较。您以这种方式获得的内容不是人类可读的,因为目标文件主要是机器代码(当它尚未链接时,它还具有链接器的符号)。我发现这种方法仅用于检查一些小事情(如代码版本和固件的构建日期)。我认为只有反汇编目标文件才能理解重大变化。幸运的是,周围有一些工具可以完成这项工作,比如objdump
linux 和 unix,汇编器有时并不简单,但至少它是人类可读的。假设您使用的是 linux 机器,您可以运行以下命令:
objdump -d yourobjectfile1 > out1
objdump -d yourobjectfile2 > out2
然后比较结果。你会发现c代码的一点点改动都会导致汇编代码的大调整,所以作为一个实验我建议你使用helloworld.c级别的东西
其他建议
gcc -g -c -fverbose-asm myfile.c; objdump -d -M intel -S ass.o > main.s
项目清单