Second attempt at commit 4291. We'll now not copy the headers into
memory, but we'll still allocate space for them. Still some security
benefits, and I'm gaining confidence that I understand the ELF format.
This commit is contained in:
Kartik Agaram 2018-07-06 23:13:03 -07:00
parent 21b5cf52e2
commit 517a471bc0
5 changed files with 15 additions and 11 deletions

View File

@ -100,14 +100,15 @@ void dump_elf_header(ostream& out) {
uint32_t p_type = 0x1;
emit(p_type);
// p_offset
uint32_t p_offset = 0;
uint32_t p_offset = /*size of ehdr*/52 + /*size of phdr*/32;
emit(p_offset);
// p_vaddr
emit(START);
uint32_t addr = START+p_offset;
emit(addr);
// p_paddr
emit(START);
emit(addr);
// p_filesz
uint32_t size = (End_of_program-/*we're not using location 0*/1) + /*size of ehdr*/52 + /*size of phdr*/32;
uint32_t size = End_of_program - /*we're not using location 0*/1;
emit(size);
// p_memsz
emit(size);

BIN
subx/ex1

Binary file not shown.

View File

@ -8,7 +8,7 @@
# instruction mod, reg, Reg/Mem bits scale, index, base
# 1-3 bytes 0/1 byte 0/1 byte 0/1/2/4 bytes 0/1/2/4 bytes
bb 2a 00 00 00 # copy 0x2a (42) to EBX
05 01 00 00 00 # copy 1 to EAX
b8 01 00 00 00 # copy 1 to EAX
cd 80 # int 80h
# vim:ft=subx

Binary file not shown.

View File

@ -25,11 +25,14 @@ ehdrsize equ $ - ehdr
phdr: ; Elf32_Phdr
dd 1 ; p_type
dd 0 ; p_offset
dd $$ ; p_vaddr
dd $$ ; p_paddr
dd filesize ; p_filesz
dd filesize ; p_memsz
# don't copy ehdr or phdr into the first segment.
dd 0x54 ; p_offset
# but you can't save on bytes for them, because p_align.
# messing with the ORG won't help you here.
dd 0x08048054 ; p_vaddr
dd 0x08048054 ; p_paddr
dd codesize ; p_filesz
dd codesize ; p_memsz
dd 5 ; p_flags
dd 0x1000 ; p_align
phdrsize equ $ - phdr
@ -39,4 +42,4 @@ _start:
mov eax, 1
int 0x80
filesize equ $ - $$
codesize equ $ - _start