Символизация разделенного двоичного файла с использованием символов из старой отладочной версии (неточное сопоставление графов)

У меня есть двоичный файл A , который представляет собой отладочную сборку с соответствующими символами, созданную много лет назад. У меня также есть двоичный файл B , сборка выпуска без сопроводительных символов и гораздо более новая.

# binary A
[[60, 60, 8734], # function 0 is called by functions 60 (twice) and 8734
 [193, 441, 505], # function 1 is called by functions 193, 441 and 505
 [193, 742],
 [23],  
 [21],  
 [21],  
 [26],  
 [26, 1508, 1509, 1573],  
 [24],  
 [25],
 ...] # (~10k functions)

# binary B
[[8999], # function 0 is called by function 8999
 [9016], # function 1 is called by function 9016
 [1126], 
 [7904, 7904, 7913], 
 [182, 336, 396, 396], 
 [9010], 
 [407], 
 [182, 632], 
 [20], 
 [24],
 ...] # (~10k functions)

Важно отметить, что нет соответствия между функцией «0» в двоичной системе A и функцией «0» в двоичной системе B . Это произвольные идентификаторы, которые я назначил каждой функции в каждом двоичном файле.

Следующий шаг - это то, что меня смущает. Мой алгоритм-фу очень слаб, и я не могу придумать, как действовать дальше. Мое (очень ограниченное) понимание состоит в том, что для решения этой проблемы я хотел бы использовать некоторую форму неточного сопоставления графов . Другими словами, какой набор отображений Ai -> Bi максимизирует сходство двух графов вызовов?

Учитывая, что есть дополнительные функции отладки в двоичном A и очевидный факт, что программы развиваются по время, скорее всего, нет точного совпадения. Идеально, Я бы хотел, чтобы вывести форму:

[[(37, 0.998), (8432, 0.912), (442, 0.75)], # matching-ness of function "0" in binary A with function "37" in binary B is 0.998, second most likely candidate is function "8432" in binary B with score 0.912, etc.
 [(42, 0.973), (7751, 0.788)], # matching-ness of function "1" in binary A with function "42" in binary B is 0.973, second most likely candidate is function "7751" in binary B with score 0.788, etc.
 [(4579, 0.996), (123, 0.934)], 
 ...] # around ~10k mappings

На самом деле, я был бы счастлив, если бы мне пришлось довольствоваться только одним кандидатом и не было предоставлено никакого рейтинга, но можно мечтать.

У любого SO-посетителя есть идея где мне следует начать?

6
задан Sedate Alien 7 December 2010 в 05:19
поделиться