📄 protect.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 + -