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

📄 protect.c

📁 一个类linux的dos下开发的操作系统.
💻 C
字号:
#include <stdio.h>/* printf() */
#include <x86.h> /* inportb(), outportb(), disable() */
#include <os.h> /* read(), ioctl() */
/*****************************************************************************
*****************************************************************************/
static void recurse(void)
{
	recurse();
}
/*****************************************************************************
for MinGW32
*****************************************************************************/
#ifdef __WIN32__
int __main(void) { return 0; }
#endif
/*****************************************************************************
*****************************************************************************/
int main(void)
{
	unsigned char key;

	printf("\n\nWhere do you want it to blow today? :)\n"
		"1. Chose an illegal operation from the list below\n"
		"2. Press the corresponding key\n"
		"3. See if app crashes and burns\n\n");
	printf("[1] Read memory location 0xFFFF0000\n"
		"[2] Write memory location 0xFFFF0000\n"
		"[3] Read from I/O port 0x80\n"
		"[4] Write to I/O port 0x80\n"
		"[5] disable() (CLI)\n"
		"[6] Infinite recursive call causing stack overflow\n"
		"[7] Divide by zero\n");
/* turn off keyboard input buffering */
	(void)ioctl(0, 0, 1);
	while(1)
	{
		if(read(0, &key, 1) != 1)
			continue;
		printf("Key pressed was '%c'\n", key);
		switch(key)
		{
			case '1':
				key = *(volatile unsigned char *)0xFFFF0000;
				break;
			case '2':
				*(unsigned char *)0xFFFF0000 = 0;
				break;
			case '3':
				(void)inportb(0x80);
				break;
			case '4':
				outportb(0x80, 0);
				break;
			case '5':
				disable();
				break;
			case '6':
				recurse();
				break;
			case '7':
				printf("%u\n", key / 0);
				break;
			default:
				printf("Invalid key, try again\n");
				goto SKIP;
		}
		printf("Hey, it worked! Better fix the kernel\n");
SKIP:
	}
	return 0;
}

⌨️ 快捷键说明

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