MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / init

Method init

view/minidump/src/view.rs:118–295  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

116 }
117
118 fn init(&self) -> BinaryViewResult<()> {
119 let parent_view = self.parent_view().ok_or(())?;
120 let read_buffer = parent_view.read_buffer(0, parent_view.len() as usize)?;
121
122 if let Ok(minidump_obj) = Minidump::read(read_buffer.get_data()) {
123 // Architecture, platform information
124 if let Ok(minidump_system_info) = minidump_obj.get_stream::<MinidumpSystemInfo>() {
125 if let Some(platform) = MinidumpBinaryView::translate_minidump_platform(
126 minidump_system_info.cpu,
127 minidump_obj.endian,
128 minidump_system_info.os,
129 ) {
130 self.set_default_platform(&platform);
131 } else {
132 error!(
133 "Could not parse valid system information from minidump: could not map system information in MinidumpSystemInfo stream (arch {:?}, endian {:?}, os {:?}) to a known architecture",
134 minidump_system_info.cpu,
135 minidump_obj.endian,
136 minidump_system_info.os,
137 );
138 return Err(());
139 }
140 } else {
141 error!("Could not parse system information from minidump: could not find a valid MinidumpSystemInfo stream");
142 return Err(());
143 }
144
145 // Memory segments
146 let mut segment_data = Vec::<SegmentData>::new();
147
148 // Memory segments in a full memory dump (MinidumpMemory64List)
149 // Grab the shared base RVA for all entries in the MinidumpMemory64List,
150 // since the minidump crate doesn't expose this to us
151 if let Ok(raw_stream) = minidump_obj.get_raw_stream(MinidumpMemory64List::STREAM_TYPE) {
152 if let Ok(base_rva_array) = raw_stream[8..16].try_into() {
153 let base_rva = u64::from_le_bytes(base_rva_array);
154 debug!("Found BaseRVA value {:#x}", base_rva);
155
156 if let Ok(minidump_memory_list) =
157 minidump_obj.get_stream::<MinidumpMemory64List>()
158 {
159 let mut current_rva = base_rva;
160 for memory_segment in minidump_memory_list.iter() {
161 debug!(
162 "Found memory segment at RVA {:#x} with virtual address {:#x} and size {:#x}",
163 current_rva,
164 memory_segment.base_address,
165 memory_segment.size,
166 );
167 segment_data.push(SegmentData::from_addresses_and_size(
168 current_rva,
169 memory_segment.base_address,
170 memory_segment.size,
171 ));
172 current_rva += memory_segment.size;
173 }
174 }
175 } else {

Callers 1

CorePluginInitFunction · 0.45

Calls 15

initFunction · 0.85
read_bufferMethod · 0.80
set_default_platformMethod · 0.80
add_segmentMethod · 0.80
parent_backingMethod · 0.80
add_sectionMethod · 0.80
parent_viewMethod · 0.45
lenMethod · 0.45
get_dataMethod · 0.45
iterMethod · 0.45
pushMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected