#define _XOPEN_SOURCE 600 #include #include #include #include int main(int argc, char** argv) { int pagesize = getpagesize(); unsigned char* addr = NULL; posix_memalign((void**)&addr, pagesize, pagesize); mprotect(addr, pagesize, PROT_WRITE | PROT_READ | PROT_EXEC); addr[0] = 0x8b; addr[1] = 0x44; addr[2] = 0x24; addr[3] = 0x04; /* mov 0x4(%esp),%eax */ addr[4] = 0x83; addr[5] = 0xc0; addr[6] = 0x01; /* add $0x1,%eax */ addr[7] = 0xc3; /* ret */ printf("10+1=%d\n", ((int (*)(int))addr)(10)); free(addr); return 0; }