@@ -82,7 +82,7 @@ impl Elf {
8282 }
8383
8484 let mut instructions: Vec < u32 > = Vec :: new ( ) ;
85- let mut base_address = None ;
85+ let mut base_address: Option < u32 > = None ;
8686
8787 // Data about the last segment.
8888 let mut prev_segment_end_addr = None ;
@@ -136,23 +136,22 @@ impl Elf {
136136 Some ( vaddr. checked_add ( mem_size) . ok_or_eyre ( "last addr overflow" ) ?) ;
137137
138138 if ( segment. p_flags & PF_X ) != 0 {
139- if base_address. is_none ( ) {
140- base_address = Some ( vaddr) ;
141- eyre:: ensure!(
142- base_address. unwrap( ) > 0x20 ,
143- "base address {} should be greater than 0x20" ,
144- base_address. unwrap( )
145- ) ;
146- } else {
139+ if let Some ( base_address) = base_address {
147140 let instr_len: u32 = WORD_SIZE
148141 . checked_mul ( instructions. len ( ) )
149142 . ok_or_eyre ( "instructions length overflow" ) ?
150143 . try_into ( ) ?;
151144 let last_instruction_addr = base_address
152- . unwrap ( )
153145 . checked_add ( instr_len)
154146 . ok_or_eyre ( "instruction addr overflow" ) ?;
155147 eyre:: ensure!( vaddr == last_instruction_addr, "unsupported elf structure" ) ;
148+ } else {
149+ base_address = Some ( vaddr) ;
150+ eyre:: ensure!(
151+ base_address. unwrap( ) > 0x20 ,
152+ "base address {} should be greater than 0x20" ,
153+ base_address. unwrap( )
154+ ) ;
156155 }
157156 }
158157
0 commit comments