elf.c
来自「参照MINIX3写的操作系统 用GCC+NASM+BOCHS开发」· C语言 代码 · 共 66 行
C
66 行
#include "../kernel.h"
#include "FileSystem.h"
void dump_hdr(Elf32_Ehdr *hdr_ptr)
{
printk("e_ident %s\n",hdr_ptr->e_ident);
printk("e_type %d\n",hdr_ptr->e_type);
printk("e_machine %d\n",hdr_ptr->e_machine);
printk("e_version %d\n",hdr_ptr->e_version);
printk("e_entry 0x%x\n",hdr_ptr->e_entry);
printk("Program header table offset 0x%x\n",hdr_ptr->e_phoff);
printk("Section header table offset 0x%x\n",hdr_ptr->e_shoff);
printk("e_flags %d\n",hdr_ptr->e_flags);
printk("ELF header size 0x%x\n",hdr_ptr->e_ehsise);
printk("Program header size 0x%x\n",hdr_ptr->e_phentsize);
printk("Total Program header 0x%x\n",hdr_ptr->e_phnum);
printk("Section header size 0x%x\n",hdr_ptr->e_shentsize);
printk("Total Section header 0x%x\n",hdr_ptr->e_shnum);
printk("e_shstmdx 0x%x\n",hdr_ptr->e_shstmdx);
}
void dump_phdr(Elf32_Phdr *phdr_ptr)
{
printk("e_type 0x%x\n",phdr_ptr->e_type);
printk("e_offset 0x%x\n",phdr_ptr->e_offset);
printk("p_vadrr 0x%x\n",phdr_ptr->p_vadrr);
printk("p_paddr 0x%x\n",phdr_ptr->p_paddr);
printk("p_filesz 0x%x\n",phdr_ptr->p_filesz);
printk("p_memsz 0x%x\n",phdr_ptr->p_memsz);
printk("p_flags 0x%x\n",phdr_ptr->p_flags);
printk("p_align 0x%x\n",phdr_ptr->p_align);
}
void copyELF(char *buf)
{
int i=0;
Elf32_Ehdr *hdr_ptr;
Elf32_Phdr *phdr_ptr;
Elf32_Half e_phoff,e_phentsize,e_phnum;
hdr_ptr=(Elf32_Ehdr *)buf;
e_phoff=hdr_ptr->e_phoff;
e_phentsize=hdr_ptr->e_phentsize;
dump_hdr(hdr_ptr);
e_phnum=hdr_ptr->e_phnum;
for(i=0;i<1;i++)
{
phdr_ptr=(Elf32_Phdr *)(buf+e_phoff+e_phentsize*i);
// dump_phdr(phdr_ptr);
// MemorySet(phdr_ptr->p_vadrr,0, phdr_ptr->p_memsz);
printk("p_vadrr 0x%x\n",phdr_ptr->p_vadrr);
printk("e_offset 0x%x\n",phdr_ptr->e_offset);
printk("p_filesz 0x%x\n",phdr_ptr->p_filesz);
printk("buf+phdr_ptr->e_offset 0x%x\n",buf+phdr_ptr->e_offset);
memCopy(phdr_ptr->p_vadrr,buf+phdr_ptr->e_offset,phdr_ptr->p_filesz);
}
printk("e_entry 0x%x\n",hdr_ptr->e_entry);
createProc((t32)hdr_ptr->e_entry);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?