⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loader.c

📁 一个mips虚拟机非常好代码,使用C++来编写的,希望大家多学学,
💻 C
字号:
//#include "stdarg.h"#include "elf.h"#include "stdlib.h"/*	panic(str, ...)	--------------------------------------------------------------	Print a message and abort.*/void panic(    const char* message){    puts("Loader panic:");    puts(message);    putchar('\n');    abort();}/* 	load_image()	--------------------------------------------------------------*/extern int _etext; /* label at the end of the text segment */char *ld_start = "loader starting\n";int load_image(void){    const char* image = (void*)(((long)&_etext + 3) & -8);    Elf32_Ehdr* ehdr;    Elf32_Phdr* phdr;    int i;    puts (ld_start);    ehdr = (Elf32_Ehdr*)image;    /* Verify the magic. */    if (bcmp(ehdr->e_ident, ELFMAG, 4) != 0) {	//panic(">>>%#s<<<", ehdr->e_ident);	panic("No ELF header found in the boot image");    }    /* Go through the program headers, loading each one. */    phdr = (Elf32_Phdr*)(image + ehdr->e_phoff);     if (phdr == 0 || ehdr->e_phnum == 0)	panic("No program headers found in the boot image");    if (ehdr->e_phentsize != sizeof(Elf32_Phdr))	panic("Bad program header size");    for (i = 0; i < ehdr->e_phnum; ++i) {    	puts ("Loader: Relocating section sized ");        put_hex (phdr[i].p_filesz, 8, 1, 1, 'A');        puts (" from ");        put_hex (image + phdr[i].p_offset, 8, 1, 1, 'A');        puts (" to ");        put_hex (phdr[i].p_paddr, 8, 1, 1, 'A');        puts (".\n");	/*printf("Loader: relocating 0x%05x bytes from %p to %p\n",	       (long)(phdr[i].p_filesz),	       (long)(image + phdr[i].p_offset),	       (long)(int)(phdr[i].p_paddr));*///	if (phdr[i].p_vaddr != phdr[i].p_paddr)//	    panic("Paddr and vaddr differ");// in section %d", i);	bcopy(image + phdr[i].p_offset,	      (void*)(long)(int)(phdr[i].p_paddr), phdr[i].p_filesz);    }    puts ("Loader: jumping to entry pt ");    put_hex (ehdr->e_entry, 8, 1, 1, 'A'); //   printf("Loader: jumping to %p\n", (long)(int)(ehdr->e_entry));    return ehdr->e_entry;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -