Я рефакторинг кода 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. Есть ли способ предотвратить это? Почему это происходит в первую очередь?
Отмена вышеупомянутого изменения и перекомпиляция дает исходные адреса, поэтому, вероятно, это не вопрос «случайности» в выборе адреса.
std::
s. - person Kalle   schedule 28.11.2016