@@ -9,6 +9,13 @@ use crate::pe::pe32::PE32;
99use crate :: pe:: pe64:: PE64 ;
1010use crate :: peb:: { peb32, peb64} ;
1111
12+ macro_rules! align_up {
13+ ( $size: expr, $align: expr) => { {
14+ // Ensure alignment is a power of two at compile time if possible
15+ ( $size + $align - 1 ) & !( $align - 1 )
16+ } } ;
17+ }
18+
1219impl Emu {
1320 /// Complex funtion called from many places and with multiple purposes.
1421 /// This is called from load_code() if sample is PE32, but also from load_library etc.
@@ -99,13 +106,14 @@ impl Emu {
99106 log:: info!( "base: 0x{:x}" , base) ;
100107 }
101108
109+ let sec_allign = pe32. opt . section_alignment ;
102110 // 4. map pe and then sections
103111 let pemap = self
104112 . maps
105113 . create_map (
106114 & format ! ( "{}.pe" , filename2) ,
107115 base. into ( ) ,
108- pe32. opt . size_of_headers . into ( ) ,
116+ align_up ! ( pe32. opt. size_of_headers, sec_allign ) as u64 ,
109117 Permission :: READ_WRITE ,
110118 )
111119 . expect ( "cannot create pe map" ) ;
@@ -145,7 +153,7 @@ impl Emu {
145153 let map = match self . maps . create_map (
146154 & format ! ( "{}{}" , filename2, sect_name) ,
147155 base as u64 + sect. virtual_address as u64 ,
148- sz ,
156+ align_up ! ( sz , sec_allign as u64 ) ,
149157 permission,
150158 ) {
151159 Ok ( m) => m,
@@ -260,11 +268,12 @@ impl Emu {
260268 log:: info!( "base: 0x{:x}" , base) ;
261269 }
262270
271+ let sec_allign = pe64. opt . section_alignment ;
263272 // 4. map pe and then sections
264273 let pemap = match self . maps . create_map (
265274 & format ! ( "{}.pe" , filename2) ,
266275 base,
267- pe64. opt . size_of_headers . into ( ) ,
276+ align_up ! ( pe64. opt. size_of_headers, sec_allign ) as u64 ,
268277 Permission :: READ_WRITE ,
269278 ) {
270279 Ok ( m) => m,
@@ -308,7 +317,7 @@ impl Emu {
308317 let map = match self . maps . create_map (
309318 & format ! ( "{}{}" , filename2, sect_name) ,
310319 base + sect. virtual_address as u64 ,
311- sz ,
320+ align_up ! ( sz , sec_allign as u64 ) ,
312321 permission,
313322 ) {
314323 Ok ( m) => m,
0 commit comments