使用OTool进行了重构代码的二进制比较
Binary comparison in refactored code using otool
i正在重构C 代码,删除using namespace std;
并将std::
添加到字符串,向量等。我希望输出是固定的二进制二进制方面的,但是cmp
甚至可以为最小变化提供差异。我诉诸使用otool
拆卸,但正在地址中遇到怪异的偏移。
例如。使用此更改
diff --git a/src/core_read.cpp b/src/core_read.cpp
@@ -26,7 +26,7 @@ CScript ParseScript(const std::string& s)
{
CScript result;
- static map<string, opcodetype> mapOpNames;
+ static std::map<string, opcodetype> mapOpNames;
if (mapOpNames.empty())
{
otool -XVt
给出了一个奇数偏移:
bench_bitcoin.s:
8c8
< movq 0x392f7b(%rip), %rbx ## literal pool symbol address: ___stack_chk_guard
---
> movq 0x392f8b(%rip), %rbx ## literal pool symbol address: ___stack_chk_guard
19c19
< jne 0x100003fa9
---
> jne 0x100003f99
25c25
< callq 0x100229c44 ## symbol stub for: ___stack_chk_fail
---
> callq 0x100229c34 ## symbol stub for: ___stack_chk_fail
33c33
< movq 0x392f2b(%rip), %rbx ## literal pool symbol address: ___stack_chk_guard
---
> movq 0x392f3b(%rip), %rbx ## literal pool symbol address: ___stack_chk_guard
[…]
它实际上会移动所有添加/- 0x10。有没有办法防止这种情况?为什么首先发生?
恢复上述更改和重新编译提供了原始地址,因此在地址选择中可能不是"随机性"的问题。
在这种情况下(比特币核心),W.J. van der laan显然已经为此目的编写了工具。如果其他人想要类似的东西,这可能是鼓舞人心的。(麻省理工学院许可)
https://github.com/laanwj/bitcoin-maintainer-tools
相关文章:
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 编译多个C++文件.调用二进制文件以运行代码
- 如何在使用 LLVM 编译时获取部分源代码的二进制代码
- 如何将二进制文件头示例代码 (C++/C#) 转换为 Python?
- 将fwrite转换为C++类型代码以写入二进制文件
- 编译代码时如何不制作二进制文件?
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- 如何存储霍夫曼转换后的二进制代码?
- 编译器C++如何在二进制代码中表示整数
- C++实现代码中的字符串不应存在于输出二进制文件中.如何解决
- 从二进制文件加载列表后,我的代码似乎进入了无限循环
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 严重性代码说明项目文件行抑制状态错误 C2676 二进制">>":"std::ifstream"
- 为什么此基准代码用于线性和二进制搜索不起作用
- 将二进制号转换为十进制数字的代码
- 在定义C2679和C2678错误代码的地方未找到二进制操作员
- 以下对二进制转换代码的小数如何工作
- 二进制搜索 - 代码编译并运行后不显示输出
- C++字符串到二进制代码/二进制代码到字符串