#include #include #include #include #include uint16_t *data; void segv() { printf("SEGV\n"); data = mmap(data, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); if (data == MAP_FAILED) { exit(1); } } int main() { int i; unsigned char v; data = mmap(0, 4096, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (data == MAP_FAILED) { exit(1); } signal(SIGSEGV, segv); iopl(3); do { v = inb(0x0177); } while ((v & 0xc0) != 0x40); outb(0x00, 0x0176); outb(0xa1, 0x0177); do { v = inb(0x0177); } while ((v & 0x08) != 0x08); insw(0x0170, data, 256); for(i = 0; i < 256; ++ i) { printf("%04x%c", data[i], (i % 8 != 7)? ' ': '\n'); } }