亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? module.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
字號:
#include <linux/errno.h>
#include <linux/kernel.h>
#include <asm/segment.h>
#include <linux/mm.h>		/* defines GFP_KERNEL */
#include <linux/string.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/malloc.h>

struct module *module_list = NULL;
int freeing_modules;		/* true if some modules are marked for deletion */

struct module *find_module( const char *name);
int get_mod_name( char *user_name, char *buf);
int free_modules( void);

/*
 * Allocate space for a module.
 */
asmlinkage int
sys_create_module(char *module_name, unsigned long size)
{
	int npages;
	void* addr;
	int len;
	char name[MOD_MAX_NAME];
	char *savename;
	struct module *mp;
	int error;

	if (!suser())
		return -EPERM;
	if (module_name == NULL || size == 0)
		return -EINVAL;
	if ((error = get_mod_name(module_name, name)) != 0)
		return error;
	if (find_module(name) != NULL) {
		return -EEXIST;
	}
	len = strlen(name) + 1;
	if ((savename = (char*) kmalloc(len, GFP_KERNEL)) == NULL)
		return -ENOMEM;
	memcpy(savename, name, len);
	if ((mp = (struct module*) kmalloc(sizeof *mp, GFP_KERNEL)) == NULL) {
		kfree(savename);
		return -ENOMEM;
	}
	npages = (size + sizeof (int) + 4095) / 4096;
	if ((addr = vmalloc(npages * 4096)) == 0) {
		kfree_s(mp, sizeof *mp);
		kfree(savename);
		return -ENOMEM;
	}
	mp->name = savename;
	mp->size = npages;
	mp->addr = addr;
	mp->state = MOD_UNINITIALIZED;
	* (int *) addr = 0;		/* set use count to zero */
	mp->cleanup = NULL;
	mp->next = module_list;
	module_list = mp;
	printk("module `%s' (%lu pages @ 0x%08lx) created\n",
		mp->name, (unsigned long) mp->size, (unsigned long) mp->addr);
	return (int) addr;
}

/*
 * Initialize a module.
 */
asmlinkage int
sys_init_module(char *module_name, char *code, unsigned codesize,
		struct mod_routines *routines)
{
	struct module *mp;
	char name[MOD_MAX_NAME];
	int error;
	struct mod_routines rt;

	if (!suser())
		return -EPERM;
	/*
	 * First reclaim any memory from dead modules that where not
	 * freed when deleted. Should I think be done by timers when
	 * the module was deleted - Jon.
	 */
	free_modules();

	if ((error = get_mod_name(module_name, name)) != 0)
		return error;
	printk( "initializing module `%s', %d (0x%x) bytes\n",
		name, codesize, codesize);
	memcpy_fromfs(&rt, routines, sizeof rt);
	if ((mp = find_module(name)) == NULL)
		return -ENOENT;
	if ((codesize + sizeof (int) + 4095) / 4096 > mp->size)
		return -EINVAL;
	memcpy_fromfs((char *)mp->addr + sizeof (int), code, codesize);
	memset((char *)mp->addr + sizeof (int) + codesize, 0,
		mp->size * 4096 - (codesize + sizeof (int)));
	printk( "  init entry @ 0x%08lx, cleanup entry @ 0x%08lx\n",
		(unsigned long) rt.init, (unsigned long) rt.cleanup);
	mp->cleanup = rt.cleanup;
	if ((*rt.init)() != 0)
		return -EBUSY;
	mp->state = MOD_RUNNING;
	return 0;
}

asmlinkage int
sys_delete_module(char *module_name)
{
	struct module *mp;
	char name[MOD_MAX_NAME];
	int error;

	if (!suser())
		return -EPERM;
	if (module_name != NULL) {
		if ((error = get_mod_name(module_name, name)) != 0)
			return error;
		if ((mp = find_module(name)) == NULL)
			return -ENOENT;
		if (mp->state == MOD_RUNNING)
			(*mp->cleanup)();
		mp->state = MOD_DELETED;
	}
	free_modules();
	return 0;
}

/*
 * Copy the kernel symbol table to user space.  If the argument is null,
 * just return the size of the table.
 */
asmlinkage int
sys_get_kernel_syms(struct kernel_sym *table)
{
	struct symbol {
		unsigned long addr;
		char *name;
	};
	extern int symbol_table_size;
	extern struct symbol symbol_table[];
	int i;
	struct symbol *from;
	struct kernel_sym *to;
	struct kernel_sym sym;

	if (table != NULL) {
		from = symbol_table;
		to = table;
		i = verify_area(VERIFY_WRITE, to, symbol_table_size * sizeof *table);
		if (i)
			return i;
		for (i = symbol_table_size ; --i >= 0 ; ) {
			sym.value = from->addr;
			strncpy(sym.name, from->name, sizeof sym.name);
			memcpy_tofs(to, &sym, sizeof sym);
			from++, to++;
		}
	}
	return symbol_table_size;
}


/*
 * Copy the name of a module from user space.
 */
int
get_mod_name(char *user_name, char *buf)
{
	int i;

	i = 0;
	for (i = 0 ; (buf[i] = get_fs_byte(user_name + i)) != '\0' ; ) {
		if (++i >= MOD_MAX_NAME)
			return -E2BIG;
	}
	return 0;
}


/*
 * Look for a module by name, ignoring modules marked for deletion.
 */
struct module *
find_module( const char *name)
{
	struct module *mp;

	for (mp = module_list ; mp ; mp = mp->next) {
		if (mp->state == MOD_DELETED)
			continue;
		if (!strcmp(mp->name, name))
			break;
	}
	return mp;
}


/*
 * Try to free modules which have been marked for deletion.  Returns nonzero
 * if a module was actually freed.
 */
int
free_modules( void)
{
	struct module *mp;
	struct module **mpp;
	int did_deletion;

	did_deletion = 0;
	freeing_modules = 0;
	mpp = &module_list;
	while ((mp = *mpp) != NULL) {
		if (mp->state != MOD_DELETED) {
			mpp = &mp->next;
		} else if (GET_USE_COUNT(mp) != 0) {
			freeing_modules = 1;
			mpp = &mp->next;
		} else {	/* delete it */
			*mpp = mp->next;
			vfree(mp->addr);
			kfree(mp->name);
			kfree_s(mp, sizeof *mp);
			did_deletion = 1;
		}
	}
	return did_deletion;
}


/*
 * Called by the /proc file system to return a current list of modules.
 */
int get_module_list(char *buf)
{
	char *p;
	char *q;
	int i;
	struct module *mp;
	char size[32];

	p = buf;
	for (mp = module_list ; mp ; mp = mp->next) {
		if (p - buf > 4096 - 100)
			break;			/* avoid overflowing buffer */
		q = mp->name;
		i = 20;
		while (*q) {
			*p++ = *q++;
			i--;
		}
		sprintf(size, "%d", mp->size);
		i -= strlen(size);
		if (i <= 0)
			i = 1;
		while (--i >= 0)
			*p++ = ' ';
		q = size;
		while (*q)
			*p++ = *q++;
		if (mp->state == MOD_UNINITIALIZED)
			q = "  (uninitialized)";
		else if (mp->state == MOD_RUNNING)
			q = "";
		else if (mp->state == MOD_DELETED)
			q = "  (deleted)";
		else
			q = "  (bad state)";
		while (*q)
			*p++ = *q++;
		*p++ = '\n';
	}
	return p - buf;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av电影免费观看高清完整版在线观看 | 亚洲国产精品久久人人爱| 亚洲自拍偷拍综合| 国产成人精品免费在线| 欧美在线制服丝袜| 国产精品久久久久婷婷二区次| 午夜精品免费在线| 91小视频免费观看| 欧美国产乱子伦| 日本成人在线看| 欧美无砖砖区免费| 亚洲欧美色图小说| 成人激情免费视频| 久久午夜色播影院免费高清| 日日夜夜免费精品| 欧美日韩一级视频| 一区二区在线观看视频在线观看| 国产精品77777| 日韩欧美中文一区| 亚洲 欧美综合在线网络| 97se亚洲国产综合在线| 久久精品一区二区三区四区| 麻豆freexxxx性91精品| 欧美一区二区视频免费观看| 视频一区在线视频| 欧美男男青年gay1069videost| 亚洲天堂免费在线观看视频| av电影天堂一区二区在线| 国产欧美久久久精品影院| 国内精品免费在线观看| 日韩欧美一二区| 麻豆国产精品777777在线| 欧美一区二区三区不卡| 美女一区二区三区| 精品精品国产高清a毛片牛牛| 免费观看日韩av| 日韩欧美国产精品一区| 久久机这里只有精品| 欧美成人女星排名| 国产精品自在欧美一区| 久久精品视频在线免费观看| 成人自拍视频在线| 1024精品合集| 欧美影视一区二区三区| 午夜不卡av免费| 7777精品伊人久久久大香线蕉| 日本91福利区| 久久中文字幕电影| 国产99久久久国产精品潘金| 久久久夜色精品亚洲| 成人av在线看| 亚洲精品欧美在线| 欧美日韩视频专区在线播放| 日韩av不卡一区二区| 久久亚洲精品小早川怜子| 成人激情电影免费在线观看| 亚洲精品少妇30p| 69p69国产精品| 国产高清在线精品| 亚洲欧美电影一区二区| 91精品国产色综合久久不卡电影| 免费成人av资源网| 中文字幕一区不卡| 91.xcao| 国内精品视频666| 亚洲欧洲精品一区二区三区| 欧美日韩在线不卡| 国产精品一区二区不卡| 亚洲综合图片区| 精品国产第一区二区三区观看体验| 国产成人啪免费观看软件| 一区二区三区在线免费播放 | 日韩免费一区二区| 福利一区福利二区| 日日夜夜免费精品| 国产精品福利电影一区二区三区四区| 欧美三级资源在线| 国产成人在线视频免费播放| 亚洲一区二区三区在线| 久久综合久久99| 欧美精品在线观看播放| 国产精品1024久久| 奇米影视一区二区三区| 中文字幕一区二区在线观看| 欧美成人综合网站| 欧美私人免费视频| www.在线欧美| 国产一区二区三区久久久 | 久久久久久亚洲综合影院红桃| 99精品国产视频| 极品少妇xxxx精品少妇| 天天操天天综合网| 亚洲精品视频在线观看网站| 欧美激情综合在线| 欧美大片一区二区| 911精品国产一区二区在线| 一本大道久久a久久精二百 | 国产欧美va欧美不卡在线| 5566中文字幕一区二区电影| 99re在线视频这里只有精品| 国产一区二区三区在线观看精品| 日本不卡视频在线| 天天色天天操综合| 香蕉加勒比综合久久| 悠悠色在线精品| 亚洲理论在线观看| 中文字幕在线一区二区三区| 国产亚洲精品久| 日韩欧美综合在线| 欧美一二三四在线| 日韩欧美在线一区二区三区| 欧美日韩不卡在线| 在线成人高清不卡| 欧美日本精品一区二区三区| 欧美午夜片在线观看| 欧美性一区二区| 欧美午夜一区二区三区| 在线影视一区二区三区| 欧美三级日韩三级| 欧美欧美欧美欧美首页| 欧美一区二区三区四区视频| 欧美一区日本一区韩国一区| 日韩亚洲欧美一区| 2017欧美狠狠色| 国产精品丝袜久久久久久app| 国产亚洲欧美色| 亚洲欧洲日韩综合一区二区| 亚洲视频在线观看三级| 一区二区高清免费观看影视大全| 伊人一区二区三区| 日韩电影在线观看电影| 九九在线精品视频| 国产91丝袜在线观看| 成人久久18免费网站麻豆| 99在线精品一区二区三区| 在线视频国产一区| 欧美日韩一本到| 日韩欧美黄色影院| 国产精品天美传媒| 亚洲成人动漫一区| 久久激情五月激情| 99久久精品情趣| 欧美三片在线视频观看| 精品久久久久久久人人人人传媒 | 91蝌蚪porny| 91极品视觉盛宴| 欧美va亚洲va香蕉在线| 国产精品久久久久久久久免费桃花 | 婷婷国产在线综合| 国产精品一区二区你懂的| 91国产免费看| 精品国内二区三区| 亚洲激情图片小说视频| 久久91精品久久久久久秒播| 91视频精品在这里| 2024国产精品视频| 亚洲综合免费观看高清完整版在线 | 国产一区二区三区免费在线观看| 成人av网站免费观看| 91精品国产品国语在线不卡| 亚洲国产岛国毛片在线| 午夜精品久久久久久久久久久| 国产一区二区在线观看免费| 91福利国产精品| 国产日韩欧美精品在线| 婷婷国产在线综合| 91片黄在线观看| 久久精品夜色噜噜亚洲aⅴ| 亚洲与欧洲av电影| 国产69精品久久久久毛片| 91精品国产欧美一区二区18| 日韩理论片网站| 国产一区二区在线免费观看| 欧美丰满高潮xxxx喷水动漫| 亚洲视频在线观看一区| 国产不卡在线一区| 日韩欧美美女一区二区三区| 亚洲国产精品久久久男人的天堂| 国产成人福利片| 精品国产一区二区三区久久影院| 亚洲国产视频网站| 色综合天天综合网国产成人综合天 | 久草在线在线精品观看| 欧美日韩久久久| 亚洲福利一区二区三区| 91搞黄在线观看| 国产精品麻豆视频| 丁香婷婷综合五月| 久久久不卡网国产精品二区| 美腿丝袜亚洲综合| 欧美一区三区二区| 天堂一区二区在线| 色妹子一区二区| 亚洲视频资源在线| 91麻豆国产精品久久| 亚洲人精品午夜| 91啪九色porn原创视频在线观看| 国产精品萝li| zzijzzij亚洲日本少妇熟睡| 国产精品美女久久久久久久网站|