Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void *extract_elf(int prog_file, char *buffer_base_ptr, unsigned int size){
- Elf64_Ehdr *header = NULL;
- Elf64_Phdr *pheader = NULL;
- Elf64_Shdr *shdr = NULL;
- Elf64_Sym *syms = NULL;
- char *strings = NULL;
- char *start = NULL;
- char *taddr = NULL;
- void *entry = NULL;
- int seg_size;
- int mem_size;
- int seg_offset;
- int i = 0;
- char *seg_mem_location = NULL;
- char *bss_mem_location = NULL;
- header = (Elf64_Ehdr *)buffer_base_ptr;
- pheader = (Elf64_Phdr *)(buffer_base_ptr + header->e_phoff);
- for(i=0; i < header->e_phnum; ++i){
- if(pheader[i].p_type != PT_LOAD){
- /*What is an example of a non-loadable program segment?
- Also, what is a program segment?*/
- continue;
- }
- if(pheader[i].p_filesz == 0){
- continue;
- }
- start = buffer_base_ptr + pheader[i].p_offset;
- taddr = pheader[i].p_vaddr;
- seg_size = pheader[i].p_filesz;
- mem_size = pheader[i].p_memsz;
- seg_offset = pheader[i].p_offset;
- char* a_taddr = ELF_PAGESTART((unsigned long long)taddr);
- int addr_diff = (unsigned long long)taddr - (unsigned long long)a_taddr;
- int a_seg_size = ELF_PAGEALIGN(seg_size + addr_diff);
- int a_seg_offset = ELF_PAGEOFFSET(seg_offset);
- int offset_diff = seg_offset - a_seg_offset;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement