大佬教程收集整理的这篇文章主要介绍了格式化 C++ 代码时汇编器和十六进制转储发生变化,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我从事的一个 C++ 项目没有一致的缩进。首席开发人员告诉我重新格式化代码可能不安全。我认为编译代码可能无关紧要。作为测试,我尝试使用基于 Eclipse“GNU [内置]”配置文件的格式化程序重新格式化一个文件。当我重新编译文件时,md5sum 发生了变化。我对文件进行了十六进制转储,它显示一个字节发生了变化。我反汇编了目标文件。我还通过调试进行了编译,并获得了源代码行。我使用 diff 获取更改的汇编指令。
来源是这一行
logErr
<< xmlutils.GetErrormessage() << endl;
以下是显示更改后的程序集的差异输出
23be: 89 04 24 mov %eax,(%esp)
23c1: e8 fc ff ff ff call 23c2 <_ZN12RerouteAdapt11WritetofileERKSs+0x64>
23c6: e8 fc ff ff ff call 23c7 <_ZN12RerouteAdapt11WritetofileERKSs+0x69>
- 23cb: c7 44 24 04 79 01 00 movl $0x179,0x4(%esp)
+ 23cb: c7 44 24 04 84 01 00 movl $0x184,0x4(%esp)
23d2: 00
23d3: 89 04 24 mov %eax,(%esp)
23d6: e8 fc ff ff ff call 23d7 <_ZN12RerouteAdapt11WritetofileERKSs+0x79>
标题的顺序没有因重新格式化而改变。
我知道一些 C/C++,但对汇编知之甚少。我想知道是否有一个简单的解释来解释为什么目标文件会改变。我认为 C++ 编译器(RHel 7 上的 GCC 4.8.2)对格式和空格无动于衷。除此之外,在装配中没有任何区别。
@H_197_0@解决方法托马斯和蒂姆是对的。更改的值对应于格式化前后的行号。我认为“logErr”只是一个流。原来它是一个使用 __LINE__
宏的宏。所以行号在程序集中是硬编码的。
#define logErr theTracer().SetFuncName(__func__); theTracer().SetFile(__FILE__); theTracer().SetLine(__LINE__); theTracer().SetError(); theTracer()
感谢您的帮助。
以上是大佬教程为你收集整理的格式化 C++ 代码时汇编器和十六进制转储发生变化全部内容,希望文章能够帮你解决格式化 C++ 代码时汇编器和十六进制转储发生变化所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。