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 + -
显示快捷键?