Re: back into the thread....
Sterling Augustine <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAEG7qUyR8OZ=XGy0WwK=1UW46afS=e-67Hs=P3XToxKA1Q9+Pw@mail.gmail.com> |
On Tue, Nov 12, 2013 at 2:42 PM, Sterling Augustine <[email protected]> wrote: > This feature clearly works. > .. This time with a couple of cleanups. The old example definitely works, this just eliminates an extraneous call to malloc and an uninitialized variable. include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <string.h> #include <malloc.h> const char bytes[] = { 0x89, 0xf8, 0xc3 }; #define EXEC_BYTES sizeof(bytes) typedef int(*function_ptr)(int); int main(int argc, char *argv[]) { int test_val = 5; int return_val; function_ptr dst; if (posix_memalign((void **) &dst, 4096*8, EXEC_BYTES) != 0) { printf("can't allocate.\n"); exit (-1); } if (mprotect(dst, EXEC_BYTES, PROT_READ|PROT_WRITE|PROT_EXEC) != 0) { printf("can't mprotect\n"); exit (-1); } if (argc > 1) test_val = atoi(argv[1]); memcpy(dst, bytes, EXEC_BYTES); return_val = dst(test_val); printf("return val was %d\n", return_val); return 0; }