MCPcopy Index your code
hub / github.com/encounter/objdiff / diff_code

Function diff_code

objdiff-core/src/diff/code.rs:58–166  ·  view source on GitHub ↗
(
    left_obj: &Object,
    right_obj: &Object,
    left_symbol_idx: usize,
    right_symbol_idx: usize,
    diff_config: &DiffObjConfig,
)

Source from the content-addressed store, hash-verified

56const PENALTY_INSERT_DELETE: u64 = 100;
57
58pub fn diff_code(
59 left_obj: &Object,
60 right_obj: &Object,
61 left_symbol_idx: usize,
62 right_symbol_idx: usize,
63 diff_config: &DiffObjConfig,
64) -> Result<(SymbolDiff, SymbolDiff)> {
65 let left_symbol = &left_obj.symbols[left_symbol_idx];
66 let right_symbol = &right_obj.symbols[right_symbol_idx];
67 let left_section = left_symbol
68 .section
69 .and_then(|i| left_obj.sections.get(i))
70 .ok_or_else(|| anyhow!("Missing section for symbol"))?;
71 let right_section = right_symbol
72 .section
73 .and_then(|i| right_obj.sections.get(i))
74 .ok_or_else(|| anyhow!("Missing section for symbol"))?;
75 let left_data = left_section
76 .data_range(left_symbol.address, left_symbol.size as usize)
77 .ok_or_else(|| {
78 anyhow!(
79 "Symbol data out of bounds: {:#x}..{:#x}",
80 left_symbol.address,
81 left_symbol.address + left_symbol.size
82 )
83 })?;
84 let right_data = right_section
85 .data_range(right_symbol.address, right_symbol.size as usize)
86 .ok_or_else(|| {
87 anyhow!(
88 "Symbol data out of bounds: {:#x}..{:#x}",
89 right_symbol.address,
90 right_symbol.address + right_symbol.size
91 )
92 })?;
93
94 let left_section_idx = left_symbol.section.unwrap();
95 let right_section_idx = right_symbol.section.unwrap();
96 let left_ops = left_obj.arch.scan_instructions(
97 ResolvedSymbol {
98 obj: left_obj,
99 symbol_index: left_symbol_idx,
100 symbol: left_symbol,
101 section_index: left_section_idx,
102 section: left_section,
103 data: left_data,
104 },
105 diff_config,
106 )?;
107 let right_ops = right_obj.arch.scan_instructions(
108 ResolvedSymbol {
109 obj: right_obj,
110 symbol_index: right_symbol_idx,
111 symbol: right_symbol,
112 section_index: right_section_idx,
113 section: right_section,
114 data: right_data,
115 },

Callers 3

diff_objsFunction · 0.85
generate_mapping_symbolsFunction · 0.85
cross_endian_diffFunction · 0.85

Calls 7

diff_instructionsFunction · 0.85
resolve_branchesFunction · 0.85
diff_instructionFunction · 0.85
getMethod · 0.80
data_rangeMethod · 0.80
scan_instructionsMethod · 0.80
iter_mutMethod · 0.80

Tested by 1

cross_endian_diffFunction · 0.68