document
├── build_info = '' <str> [Information about the build]
├── configuration [Boolean flags that configure what is supposed to be displayed and how]
│ ├── debug_info_available = 'None' <NoneType> [True if Dwarf debugging information was found in both binaries]
│ ├── display_appeared_symbols_overview = 'True' <bool> [True if an overview about appeared symbols is supposed to be displayed]
│ ├── display_binary_details = 'False' <bool> [True if details about binaries are supposed to be displayed]
│ ├── display_build_info = 'False' <bool> [True if build information is supposed to be displayed]
│ ├── display_details = 'True' <bool> [True if symbol detail information is supposed to be displayed]
│ ├── display_disappeared_symbols_overview = 'True' <bool> [True if an overview about disappeared symbols is supposed to be displayed]
│ ├── display_migrated_symbols = 'True' <bool> [True if migrated symbols are supposed to be displayed]
│ ├── display_migrated_symbols_overview = 'True' <bool> [True if an overview about migrated symbols is supposed to be displayed]
│ ├── display_new_binary_info = 'False' <bool> [True if new binary info is supposed to be displayed]
│ ├── display_old_binary_info = 'False' <bool> [True if old binary info is supposed to be displayed]
│ ├── display_persisting_symbols_overview = 'True' <bool> [True if an overview about persisting symbols is supposed to be displayed]
│ ├── display_similar_symbols = 'True' <bool> [True if similar symbols are supposed to be displayed]
│ ├── display_similar_symbols_overview = 'True' <bool> [True if an overview about similar symbols is supposed to be displayed]
│ └── instructions_available = 'True' <bool> [True if instructions could be read from both binary files]
├── files [Information about relevant files]
│ └── input [Information about relevant input files]
│ ├── new [Information about relevant input files]
│ │ ├── binary_path = '../../tests/x86_64/libelf_diff_test2_debug_new.a' <str> [The path to the binary file]
│ │ ├── debug_info_available = 'True' <bool> [True if Dwarf debug info avaiable in the elf binary]
│ │ └── source_files [Source file by file id (dict values of type SourceFile)]
│ └── old [Information about relevant input files]
│ ├── binary_path = '../../tests/x86_64/libelf_diff_test2_debug_old.a' <str> [The path to the binary file]
│ ├── debug_info_available = 'True' <bool> [True if Dwarf debug info avaiable in the elf binary]
│ └── source_files [Source file by file id (dict values of type SourceFile)]
├── general [General information about the document]
│ ├── doc_title = 'ELF Binary Comparison' <str> [Document title]
│ ├── document_version = '1' <int> [The document version of this document]
│ ├── elf_diff_repo_root = '/home/runner/work/elf_diff/elf_diff/src/elf_diff' <str> [Path to the root of the elf_diff git repo]
│ ├── elf_diff_version = '3d17d62ace08ebf700cef3c9322aff184cc08269' <str> [The elf_diff version that generated the page]
│ ├── generation_date = '2026-09-25 06:48:56' <str> [The document generation date]
│ └── page_title = 'ELF Binary Comparison - (c) 2021 by noseglasses' <str> [The title of the document page]
├── new_binary_info = '' <str> [Info about the new binary]
├── old_binary_info = '' <str> [Info about the old binary]
├── statistics
│ ├── overall [Overall statistics]
│ │ ├── delta
│ │ │ └── resource_consumption [Information about resource consumption]
│ │ │ ├── bss = '0' <int> [bss section memory consumption]
│ │ │ ├── code = '11' <int> [Memory required to store code]
│ │ │ ├── data = '0' <int> [data section memory consumption]
│ │ │ ├── static_ram = '0' <int> [Static RAM consumption]
│ │ │ └── text = '11' <int> [text section memory consumption]
│ │ ├── new
│ │ │ └── resource_consumption [Information about resource consumption]
│ │ │ ├── bss = '0' <int> [bss section memory consumption]
│ │ │ ├── code = '450' <int> [Memory required to store code]
│ │ │ ├── data = '36' <int> [data section memory consumption]
│ │ │ ├── static_ram = '36' <int> [Static RAM consumption]
│ │ │ └── text = '414' <int> [text section memory consumption]
│ │ └── old
│ │ └── resource_consumption [Information about resource consumption]
│ │ ├── bss = '0' <int> [bss section memory consumption]
│ │ ├── code = '439' <int> [Memory required to store code]
│ │ ├── data = '36' <int> [data section memory consumption]
│ │ ├── static_ram = '36' <int> [Static RAM consumption]
│ │ └── text = '403' <int> [text section memory consumption]
│ └── symbols [Statistics of symbols]
│ ├── appeared
│ │ └── count = '6' <int> [Number of symbols]
│ ├── disappeared
│ │ └── count = '6' <int> [Number of symbols]
│ ├── new [Overall statistics about symbols considered]
│ │ ├── count [Number of symbols]
│ │ │ ├── dropped = '0' <int> [Number of symbols dropped]
│ │ │ ├── selected = '17' <int> [Number of symbols selected]
│ │ │ └── total = '17' <int> [Number of total symbols in binary]
│ │ └── regex [Overall statistics about symbols considered]
│ │ ├── exclusion = '' <str> [Regular expression used to exclude symbols found in binary]
│ │ └── selection = '.*' <str> [Regular expression used to select symbols found in binary]
│ ├── old [Overall statistics about symbols considered]
│ │ ├── count [Number of symbols]
│ │ │ ├── dropped = '0' <int> [Number of symbols dropped]
│ │ │ ├── selected = '17' <int> [Number of symbols selected]
│ │ │ └── total = '17' <int> [Number of total symbols in binary]
│ │ └── regex [Overall statistics about symbols considered]
│ │ ├── exclusion = '' <str> [Regular expression used to exclude symbols found in binary]
│ │ └── selection = '.*' <str> [Regular expression used to select symbols found in binary]
│ ├── persisting
│ │ ├── assembly_differs_count = '1' <int> [Number of persisting symbols with assembly differences]
│ │ ├── count = '11' <int> [Number of symbols]
│ │ └── resource_consumption [Total resource consumption of considered symbols of given class]
│ │ ├── delta = '8' <int> [Change to number of bytes consumed (only for persisting and similar)]
│ │ ├── new = '179' <int> [Overall number of bytes consumed in the old version]
│ │ └── old = '171' <int> [Overall number of bytes consumed in the old version]
│ └── similar
│ └── count = '16' <int> [Number of symbols]
└── symbols [Symbols by id/table id ]
├── appeared [Dict of appeared symbols by symbol id (dict values of type AppearedSymbol)]
├── disappeared [Disappeared symbols by symbol id (dict values of type DisappearedSymbol)]
├── migrated [Migrated symbols by symbol id (dict values of type MigratedSymbol)]
├── new [Dict of selected symbols of the new binary by symbol id (dict values of type Symbol)]
├── old [Dict of selected symbols of the old binary by symbol id (dict values of type Symbol)]
├── persisting [Persisting symbols by symbol id (dict values of type PersistingSymbol)]
└── similar [Similar symbols by symbol id (dict values of type SimilarSymbols)]
Please note: The actual node representations are not listed due to space constraints.
source_file ├── id <int> [The id of the source file] ├── path <str> [The full path of the source file as reported by binutils/nm] └── path_wo_prefix <str> [The name of the source file with user defined prefix stripped]
symbol ├── id <int> [Unique symbol identifier] ├── instructions <str> [Code instructions (assembly with possibly high level language code intermixed)] ├── is_demangled <bool> [True if the symbol name is demangled] ├── is_stored_in_program_memory <bool> [True if the symbol is stored in program memory] ├── name <str> [The symbol name (demangled if supported)] ├── name_mangled <str> [The mangled symbol name] ├── size <int> [Number of bytes occupied by the symbol] ├── source │ ├── file_id <int> [The id of the source file] │ └── line <int> [The line number in the source file where the symbol is defined] └── type <str> [Type character matching the characters used by the nm binutils tool]
persisting_symbol
├── display_info [Information that configures how things are displayed]
│ ├── anchor_id <str> [Unique string identifier token that can be used to generate a HTML anchor for cross references]
│ ├── display_symbol_details <bool> [True if symbol details are supposed to be displayed]
│ └── symbol_class <str> [The class of symbol old/new/appeared/disappeared/persisting/similar]
└── related_symbols [A relation between two symbols]
├── new <Symbol> [The new symbol]
├── old <Symbol> [The old symbol]
└── size_delta <int> [Difference in bytes between the resource occupation of the two symbols]
appeared_symbol
├── actual <Symbol> [The actual symbol]
└── display_info [Information that configures how things are displayed]
├── anchor_id <str> [Unique string identifier token that can be used to generate a HTML anchor for cross references]
├── display_symbol_details <bool> [True if symbol details are supposed to be displayed]
└── symbol_class <str> [The class of symbol old/new/appeared/disappeared/persisting/similar]
disappeared_symbol
├── actual <Symbol> [The actual symbol]
└── display_info [Information that configures how things are displayed]
├── anchor_id <str> [Unique string identifier token that can be used to generate a HTML anchor for cross references]
├── display_symbol_details <bool> [True if symbol details are supposed to be displayed]
└── symbol_class <str> [The class of symbol old/new/appeared/disappeared/persisting/similar]
similar_symbols
├── display_info [Information that configures how things are displayed]
│ ├── anchor_id <str> [Unique string identifier token that can be used to generate a HTML anchor for cross references]
│ ├── display_symbol_details <bool> [True if symbol details are supposed to be displayed]
│ └── symbol_class <str> [The class of symbol old/new/appeared/disappeared/persisting/similar]
├── id <int> [The id of the symbol pair]
├── new
│ └── signature_tagged <str> [A tagged version of the symbol signature. Taggs '...HIGHLIGHT_START...' and '...HIGHLIGHT_END...' must be replaced accordingly, e.g. for highlighting.]
├── old
│ └── signature_tagged <str> [A tagged version of the symbol signature. Taggs '...HIGHLIGHT_START...' and '...HIGHLIGHT_END...' must be replaced accordingly, e.g. for highlighting.]
├── related_symbols [A relation between two symbols]
│ ├── new <Symbol> [The new symbol]
│ ├── old <Symbol> [The old symbol]
│ └── size_delta <int> [Difference in bytes between the resource occupation of the two symbols]
└── similarities [Symbol similarity ratios]
├── instruction <float> [The percentage of symbol instruction similarity]
└── signature <float> [The percentage of symbol signature similarity]
migrated_symbol
├── display_info [Information that configures how things are displayed]
│ ├── anchor_id <str> [Unique string identifier token that can be used to generate a HTML anchor for cross references]
│ ├── display_symbol_details <bool> [True if symbol details are supposed to be displayed]
│ └── symbol_class <str> [The class of symbol old/new/appeared/disappeared/persisting/similar]
└── related_symbols [A relation between two symbols]
├── new <Symbol> [The new symbol]
├── old <Symbol> [The old symbol]
└── size_delta <int> [Difference in bytes between the resource occupation of the two symbols]
document.build_info = ''
document.configuration.debug_info_available = 'None'
document.configuration.display_appeared_symbols_overview = 'True'
document.configuration.display_binary_details = 'False'
document.configuration.display_build_info = 'False'
document.configuration.display_details = 'True'
document.configuration.display_disappeared_symbols_overview = 'True'
document.configuration.display_migrated_symbols = 'True'
document.configuration.display_migrated_symbols_overview = 'True'
document.configuration.display_new_binary_info = 'False'
document.configuration.display_old_binary_info = 'False'
document.configuration.display_persisting_symbols_overview = 'True'
document.configuration.display_similar_symbols = 'True'
document.configuration.display_similar_symbols_overview = 'True'
document.configuration.instructions_available = 'True'
document.files.input.new.binary_path = '../../tests/x86_64/libelf_diff_test2_debug_new.a'
document.files.input.new.debug_info_available = 'True'
document.files.input.new.source_files = '{17: <elf_diff.value_tree.Node object at 0x7f401bb8dff0>, 18: <elf_diff.value_tree.Node object at 0x7f401bb8e020>, 19: <elf_diff.value_tree.Node object at 0x7f401bb8e050>, 20: <elf_diff.value_tree.Node object at 0x7f401bb8e080>, 21: <elf_diff.value_tree.Node object at 0x7f401bb8e0e0>, 22: <elf_diff.value_tree.Node object at 0x7f401bb8e110>, 23: <elf_diff.value_tree.Node object at 0x7f401bb8e140>, 24: <elf_diff.value_tree.Node object at 0x7f401bb8e170>, 25: <elf_diff.value_tree.Node object at 0x7f401bb8e1a0>, 26: <elf_diff.value_tree.Node object at 0x7f401bb8e1d0>, 27: <elf_diff.value_tree.Node object at 0x7f401bb8e200>, 28: <elf_diff.value_tree.Node object at 0x7f401bb8e230>, 29: <elf_diff.value_tree.Node object at 0x7f401bb8e260>, 30: <elf_diff.value_tree.Node object at 0x7f401bb8e290>, 31: <elf_diff.value_tree.Node object at 0x7f401bb8e2c0>, 32: <elf_diff.value_tree.Node object at 0x7f401bb8e2f0>, 33: <elf_diff.value_tree.Node object at 0x7f401bb8e320>}'
document.files.input.old.binary_path = '../../tests/x86_64/libelf_diff_test2_debug_old.a'
document.files.input.old.debug_info_available = 'True'
document.files.input.old.source_files = '{0: <elf_diff.value_tree.Node object at 0x7f401bb8d720>, 1: <elf_diff.value_tree.Node object at 0x7f401bb8d750>, 2: <elf_diff.value_tree.Node object at 0x7f401bb8d780>, 3: <elf_diff.value_tree.Node object at 0x7f401bb8d7b0>, 4: <elf_diff.value_tree.Node object at 0x7f401bb8d810>, 5: <elf_diff.value_tree.Node object at 0x7f401bb8d840>, 6: <elf_diff.value_tree.Node object at 0x7f401bb8d870>, 7: <elf_diff.value_tree.Node object at 0x7f401bb8d8a0>, 8: <elf_diff.value_tree.Node object at 0x7f401bb8d8d0>, 9: <elf_diff.value_tree.Node object at 0x7f401bb8d900>, 10: <elf_diff.value_tree.Node object at 0x7f401bb8d930>, 11: <elf_diff.value_tree.Node object at 0x7f401bb8d960>, 12: <elf_diff.value_tree.Node object at 0x7f401bb8d990>, 13: <elf_diff.value_tree.Node object at 0x7f401bb8d9c0>, 14: <elf_diff.value_tree.Node object at 0x7f401bb8d9f0>, 15: <elf_diff.value_tree.Node object at 0x7f401bb8da20>, 16: <elf_diff.value_tree.Node object at 0x7f401bb8da50>}'
document.general.doc_title = 'ELF Binary Comparison'
document.general.document_version = '1'
document.general.elf_diff_repo_root = '/home/runner/work/elf_diff/elf_diff/src/elf_diff'
document.general.elf_diff_version = '3d17d62ace08ebf700cef3c9322aff184cc08269'
document.general.generation_date = '2026-09-25 06:48:56'
document.general.page_title = 'ELF Binary Comparison - (c) 2021 by noseglasses'
document.new_binary_info = ''
document.old_binary_info = ''
document.statistics.overall.delta.resource_consumption.bss = '0'
document.statistics.overall.delta.resource_consumption.code = '11'
document.statistics.overall.delta.resource_consumption.data = '0'
document.statistics.overall.delta.resource_consumption.static_ram = '0'
document.statistics.overall.delta.resource_consumption.text = '11'
document.statistics.overall.new.resource_consumption.bss = '0'
document.statistics.overall.new.resource_consumption.code = '450'
document.statistics.overall.new.resource_consumption.data = '36'
document.statistics.overall.new.resource_consumption.static_ram = '36'
document.statistics.overall.new.resource_consumption.text = '414'
document.statistics.overall.old.resource_consumption.bss = '0'
document.statistics.overall.old.resource_consumption.code = '439'
document.statistics.overall.old.resource_consumption.data = '36'
document.statistics.overall.old.resource_consumption.static_ram = '36'
document.statistics.overall.old.resource_consumption.text = '403'
document.statistics.symbols.appeared.count = '6'
document.statistics.symbols.disappeared.count = '6'
document.statistics.symbols.new.count.dropped = '0'
document.statistics.symbols.new.count.selected = '17'
document.statistics.symbols.new.count.total = '17'
document.statistics.symbols.new.regex.exclusion = ''
document.statistics.symbols.new.regex.selection = '.*'
document.statistics.symbols.old.count.dropped = '0'
document.statistics.symbols.old.count.selected = '17'
document.statistics.symbols.old.count.total = '17'
document.statistics.symbols.old.regex.exclusion = ''
document.statistics.symbols.old.regex.selection = '.*'
document.statistics.symbols.persisting.assembly_differs_count = '1'
document.statistics.symbols.persisting.count = '11'
document.statistics.symbols.persisting.resource_consumption.delta = '8'
document.statistics.symbols.persisting.resource_consumption.new = '179'
document.statistics.symbols.persisting.resource_consumption.old = '171'
document.statistics.symbols.similar.count = '16'
document.symbols.appeared = '{17: <elf_diff.value_tree.Node object at 0x7f401bb6f460>, 21: <elf_diff.value_tree.Node object at 0x7f401bb6f490>, 24: <elf_diff.value_tree.Node object at 0x7f401bb6f4f0>, 27: <elf_diff.value_tree.Node object at 0x7f401bb6f580>, 30: <elf_diff.value_tree.Node object at 0x7f401bb6f5e0>, 31: <elf_diff.value_tree.Node object at 0x7f401bb6f640>}'
document.symbols.disappeared = '{0: <elf_diff.value_tree.Node object at 0x7f401bb6ff10>, 4: <elf_diff.value_tree.Node object at 0x7f401bb6ff40>, 7: <elf_diff.value_tree.Node object at 0x7f401bb6ffa0>, 8: <elf_diff.value_tree.Node object at 0x7f401bb7c070>, 11: <elf_diff.value_tree.Node object at 0x7f401bb7c0d0>, 14: <elf_diff.value_tree.Node object at 0x7f401bb7c130>}'
document.symbols.migrated = '{1: <elf_diff.value_tree.Node object at 0x7f401bb8cb50>, 2: <elf_diff.value_tree.Node object at 0x7f401bb8cb80>, 3: <elf_diff.value_tree.Node object at 0x7f401bb8cc40>, 5: <elf_diff.value_tree.Node object at 0x7f401bb8ccd0>, 6: <elf_diff.value_tree.Node object at 0x7f401bb8cd60>, 9: <elf_diff.value_tree.Node object at 0x7f401bb8cdf0>, 10: <elf_diff.value_tree.Node object at 0x7f401bb8ce80>, 12: <elf_diff.value_tree.Node object at 0x7f401bb8cf10>, 13: <elf_diff.value_tree.Node object at 0x7f401bb8cfa0>, 15: <elf_diff.value_tree.Node object at 0x7f401bb8d030>, 16: <elf_diff.value_tree.Node object at 0x7f401bb8d0c0>}'
document.symbols.new = '{22: <elf_diff.value_tree.Node object at 0x7f401bb6e710>, 23: <elf_diff.value_tree.Node object at 0x7f401bb6e740>, 24: <elf_diff.value_tree.Node object at 0x7f401bb6e7a0>, 25: <elf_diff.value_tree.Node object at 0x7f401bb6e830>, 26: <elf_diff.value_tree.Node object at 0x7f401bb6e890>, 27: <elf_diff.value_tree.Node object at 0x7f401bb6e8f0>, 28: <elf_diff.value_tree.Node object at 0x7f401bb6e950>, 29: <elf_diff.value_tree.Node object at 0x7f401bb6e9b0>, 30: <elf_diff.value_tree.Node object at 0x7f401bb6ea10>, 31: <elf_diff.value_tree.Node object at 0x7f401bb6ea70>, 32: <elf_diff.value_tree.Node object at 0x7f401bb6ead0>, 33: <elf_diff.value_tree.Node object at 0x7f401bb6eb30>, 18: <elf_diff.value_tree.Node object at 0x7f401bb6eb90>, 17: <elf_diff.value_tree.Node object at 0x7f401bb6ebf0>, 21: <elf_diff.value_tree.Node object at 0x7f401bb6ec50>, 20: <elf_diff.value_tree.Node object at 0x7f401bb6ecb0>, 19: <elf_diff.value_tree.Node object at 0x7f401bb6ed10>}'
document.symbols.old = '{5: <elf_diff.value_tree.Node object at 0x7f401bb6cfd0>, 6: <elf_diff.value_tree.Node object at 0x7f401bb6d000>, 7: <elf_diff.value_tree.Node object at 0x7f401bb6d060>, 8: <elf_diff.value_tree.Node object at 0x7f401bb6d0f0>, 9: <elf_diff.value_tree.Node object at 0x7f401bb6d150>, 10: <elf_diff.value_tree.Node object at 0x7f401bb6d1b0>, 11: <elf_diff.value_tree.Node object at 0x7f401bb6d210>, 12: <elf_diff.value_tree.Node object at 0x7f401bb6d270>, 13: <elf_diff.value_tree.Node object at 0x7f401bb6d2d0>, 14: <elf_diff.value_tree.Node object at 0x7f401bb6d330>, 15: <elf_diff.value_tree.Node object at 0x7f401bb6d390>, 16: <elf_diff.value_tree.Node object at 0x7f401bb6d3f0>, 1: <elf_diff.value_tree.Node object at 0x7f401bb6d450>, 4: <elf_diff.value_tree.Node object at 0x7f401bb6d4b0>, 0: <elf_diff.value_tree.Node object at 0x7f401bb6d510>, 3: <elf_diff.value_tree.Node object at 0x7f401bb6d570>, 2: <elf_diff.value_tree.Node object at 0x7f401bb6d5d0>}'
document.symbols.persisting = '{1: <elf_diff.value_tree.Node object at 0x7f401bb7ceb0>, 2: <elf_diff.value_tree.Node object at 0x7f401bb7cee0>, 3: <elf_diff.value_tree.Node object at 0x7f401bb7cfa0>, 5: <elf_diff.value_tree.Node object at 0x7f401bb7d030>, 6: <elf_diff.value_tree.Node object at 0x7f401bb7d0c0>, 9: <elf_diff.value_tree.Node object at 0x7f401bb7d150>, 10: <elf_diff.value_tree.Node object at 0x7f401bb7d1e0>, 12: <elf_diff.value_tree.Node object at 0x7f401bb7d270>, 13: <elf_diff.value_tree.Node object at 0x7f401bb7d300>, 15: <elf_diff.value_tree.Node object at 0x7f401bb7d390>, 16: <elf_diff.value_tree.Node object at 0x7f401bb7d420>}'
document.symbols.similar = '{0: <elf_diff.value_tree.Node object at 0x7f401bb7ee00>, 1: <elf_diff.value_tree.Node object at 0x7f401bb7ee60>, 2: <elf_diff.value_tree.Node object at 0x7f401bb7efb0>, 3: <elf_diff.value_tree.Node object at 0x7f401bb7f0d0>, 4: <elf_diff.value_tree.Node object at 0x7f401bb7f1f0>, 5: <elf_diff.value_tree.Node object at 0x7f401bb7f310>, 6: <elf_diff.value_tree.Node object at 0x7f401bb7f430>, 7: <elf_diff.value_tree.Node object at 0x7f401bb7f550>, 8: <elf_diff.value_tree.Node object at 0x7f401bb7f670>, 9: <elf_diff.value_tree.Node object at 0x7f401bb7f790>, 10: <elf_diff.value_tree.Node object at 0x7f401bb7f8b0>, 11: <elf_diff.value_tree.Node object at 0x7f401bb7f9d0>, 12: <elf_diff.value_tree.Node object at 0x7f401bb7faf0>, 13: <elf_diff.value_tree.Node object at 0x7f401bb7fc10>, 14: <elf_diff.value_tree.Node object at 0x7f401bb7fd30>, 15: <elf_diff.value_tree.Node object at 0x7f401bb7fe50>}'