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

📄 exec.c

📁 用于汇编领域的,运用于OS的MAIN函数.基于硬件基础的源代码
💻 C
字号:
#include "hos.h"unsigned long EXEC_load_body(char *buf, int len){  // load code in free frame  unsigned long sloc;  printk("in EXEC load body\n");  sloc = get_free_pgframe();  mymemcpy(sloc, buf, len); // for now  return sloc; } int do_execve(struct pt_regs *regs){// regs->ecx points to the file path for exec    char *path; int x,n; char buf[512]; unsigned long * xx, *dir0;	unsigned long start_loc;	path=regs->ecx;	printk("path is %s\n",path);    x=do_open(path);	asm("sti\n\t"::); // we need timer int to read from disk	n=kernel_do_read(x, buf, 512);	asm("cli\n\t"::);	printk("the buf read from disk is: ");	xx=(unsigned long *)buf;	for(x=0;x<32;x++) printk("%x ", xx[x]); 	//wait_for_anykey();	start_loc = EXEC_load_body(buf,n); // assume our process fits in 1 page	// set page table	set_page_table(current, start_loc);	dir0 = (unsigned long *)mloc(current->mm.pgdir[0]);	printk("aft set page table.pgdir %x, pgdir[0] %x, dir0[512] %x\n",	       current->mm.pgdir, current->mm.pgdir[0], dir0[512]);	printk("the code at start_loc:%x is: ",start_loc);	xx=(unsigned long *)start_loc;	for(x=0;x<16;x++) printk("%x ", xx[x]); 	printk("now check paging sytem. dumping USER_PROCESS_LOCATION\n");	xx=(unsigned long *)USER_PROCESS_LOCATION;	for(x=0;x<16;x++) printk("%x ", xx[x]); 	//asm("sti\n\t"::);	//dump_directory_table(current->mm.pgdir);	//asm("cli\n\t"::);	// change starting ip	printk("dumping done\n");    regs->eip = USER_PROCESS_LOCATION; 	   //we assume all processes starts at virt 0x200000}int sys_execve(struct pt_regs regs){   printk("in sys execve\n");   return do_execve(&regs);}

⌨️ 快捷键说明

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