Двоичное сравнение в рефакторинге кода с использованием otool

Я рефакторинг кода 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. Есть ли способ предотвратить это? Почему это происходит в первую очередь?

Отмена вышеупомянутого изменения и перекомпиляция дает исходные адреса, поэтому, вероятно, это не вопрос «случайности» в выборе адреса.


person Kalle    schedule 28.11.2016    source источник
comment
Почему вы хотите зависеть от таких вещей?   -  person Arunmu    schedule 28.11.2016
comment
Разница довольно большая, и я хотел бы доказать, что полученный двоичный файл точно такой же, как и до добавления std::s.   -  person Kalle    schedule 28.11.2016


Ответы (1)


В этом случае (ядро биткойна) У. Дж. ван дер Лаан, по-видимому, написал инструмент именно для этой цели. Это может быть вдохновляющим, если другие хотят что-то подобное. (лицензия MIT)

https://github.com/laanwj/bitcoin-maintainer-tools

person Kalle    schedule 28.11.2016