@@ -209,49 +209,51 @@ void elf_generate_program_headers(void)
209209    phdr .p_memsz  =  elf_code -> size  +  elf_data -> size  +  elf_rodata -> size  + 
210210                   elf_bss_size ; /* size in memory */ 
211211    phdr .p_flags  =  7 ;            /* flags */ 
212-     phdr .p_align  =  4 ;             /* alignment */ 
212+     phdr .p_align  =  0x1000 ;        /* alignment */ 
213213    elf_write_blk (elf_program_header , & phdr , sizeof (elf32_phdr_t ));
214214    if  (dynlink ) {
215215        /* program header - all dynamic sections combined */ 
216216        phdr .p_type  =  1 ; /* PT_LOAD */ 
217217        phdr .p_offset  =  elf_header_len  +  elf_code -> size  +  elf_data -> size  + 
218-                         elf_rodata -> size ;          /* offset of segment */ 
219-         phdr .p_vaddr  =  ELF_START   +   phdr . p_offset ;  /* virtual address */ 
220-         phdr .p_paddr  =  ELF_START   +   phdr . p_offset ;  /* physical address */ 
218+                         elf_rodata -> size ; /* offset of segment */ 
219+         phdr .p_vaddr  =  elf_interp_start ;   /* virtual address */ 
220+         phdr .p_paddr  =  elf_interp_start ;   /* physical address */ 
221221        phdr .p_filesz  =  elf_interp -> size  +  elf_relplt -> size  +  elf_plt -> size  + 
222222                        elf_got -> size  +  elf_dynstr -> size  +  elf_dynsym -> size  + 
223223                        elf_dynamic -> size ; /* size in file */ 
224224        phdr .p_memsz  =  elf_interp -> size  +  elf_relplt -> size  +  elf_plt -> size  + 
225225                       elf_got -> size  +  elf_dynstr -> size  +  elf_dynsym -> size  + 
226226                       elf_dynamic -> size ; /* size in memory */ 
227227        phdr .p_flags  =  7 ;                 /* flags */ 
228-         phdr .p_align  =  4 ;                  /* alignment */ 
228+         phdr .p_align  =  0x1000 ;             /* alignment */ 
229229        elf_write_blk (elf_program_header , & phdr , sizeof (elf32_phdr_t ));
230230
231231        /* program header - program interpreter (.interp section) */ 
232232        phdr .p_type  =  3 ; /* PT_INTERP */ 
233233        phdr .p_offset  =  elf_header_len  +  elf_code -> size  +  elf_data -> size  + 
234-                         elf_rodata -> size ;          /* offset of segment */ 
235-         phdr .p_vaddr  =  ELF_START   +   phdr . p_offset ;  /* virtual address */ 
236-         phdr .p_paddr  =  ELF_START   +   phdr . p_offset ;  /* physical address */ 
237-         phdr .p_filesz  =  strlen (DYN_LINKER ) +  1 ;    /* size in file */ 
238-         phdr .p_memsz  =  strlen (DYN_LINKER ) +  1 ;     /* size in memory */ 
239-         phdr .p_flags  =  4 ;                          /* flags */ 
240-         phdr .p_align  =  1 ;                          /* alignment */ 
234+                         elf_rodata -> size ;       /* offset of segment */ 
235+         phdr .p_vaddr  =  elf_interp_start ;         /* virtual address */ 
236+         phdr .p_paddr  =  elf_interp_start ;         /* physical address */ 
237+         phdr .p_filesz  =  strlen (DYN_LINKER ) +  1 ; /* size in file */ 
238+         phdr .p_memsz  =  strlen (DYN_LINKER ) +  1 ;  /* size in memory */ 
239+         phdr .p_flags  =  4 ;                       /* flags */ 
240+         phdr .p_align  =  1 ;                       /* alignment */ 
241241        elf_write_blk (elf_program_header , & phdr , sizeof (elf32_phdr_t ));
242242
243243        /* program header - .dynamic section */ 
244244        phdr .p_type  =  2 ; /* PT_DYNAMIC */ 
245245        phdr .p_offset  =  elf_header_len  +  elf_code -> size  +  elf_data -> size  + 
246246                        elf_rodata -> size  +  elf_interp -> size  +  elf_relplt -> size  + 
247247                        elf_plt -> size  +  elf_got -> size  +  elf_dynstr -> size  + 
248-                         elf_dynsym -> size ;         /* offset of segment */ 
249-         phdr .p_vaddr  =  ELF_START  +  phdr .p_offset ; /* virtual address */ 
250-         phdr .p_paddr  =  ELF_START  +  phdr .p_offset ; /* physical address */ 
251-         phdr .p_filesz  =  elf_dynamic -> size ;        /* size in file */ 
252-         phdr .p_memsz  =  elf_dynamic -> size ;         /* size in memory */ 
253-         phdr .p_flags  =  6 ;                         /* flags */ 
254-         phdr .p_align  =  4 ;                         /* alignment */ 
248+                         elf_dynsym -> size ; /* offset of segment */ 
249+         phdr .p_vaddr  =  elf_got_start  +  elf_got -> size  +  elf_dynstr -> size  + 
250+                        elf_dynsym -> size ; /* virtual address */ 
251+         phdr .p_paddr  =  elf_got_start  +  elf_got -> size  +  elf_dynstr -> size  + 
252+                        elf_dynsym -> size ;   /* physical address */ 
253+         phdr .p_filesz  =  elf_dynamic -> size ; /* size in file */ 
254+         phdr .p_memsz  =  elf_dynamic -> size ;  /* size in memory */ 
255+         phdr .p_flags  =  6 ;                  /* flags */ 
256+         phdr .p_align  =  4 ;                  /* alignment */ 
255257        elf_write_blk (elf_program_header , & phdr , sizeof (elf32_phdr_t ));
256258    }
257259}
@@ -587,7 +589,7 @@ void elf_generate_sections(void)
587589        got_size  +=  PTR_SIZE ;
588590
589591        /* Get the starting points of the sections. */ 
590-         elf_interp_start  =  elf_bss_start  +  elf_bss_size ;
592+         elf_interp_start  =  elf_bss_start  +  elf_bss_size   +   0x1000 ;
591593        elf_relplt_start  =  elf_interp_start  +  elf_interp -> size ;
592594        elf_plt_start  =  elf_relplt_start  +  relplt_size ;
593595        elf_got_start  =  elf_plt_start  +  plt_size ;
0 commit comments