Re: back into the thread....
Mark Manning <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <CAPGNrUXsgV1=fZV1bpSMU33RZ-M7rdngSujZ22xwGOzTRdbkVA@mail.gmail.com> |
disregard, you pasted in the new copy but missed the initial # on the first include. i also missed that :) On Tue, Nov 12, 2013 at 5:59 PM, Mark Manning <[email protected]> wrote: > tried to compile your code but all i get is about 400 errors related > to error unknown type name 'size_t' from stdlib.h. > > > > > On Tue, Nov 12, 2013 at 5:47 PM, Sterling Augustine > <[email protected]> wrote: >> 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; >> } > > > > -- > "When something can be read without effort, > great effort has gone into its writing." > > -- Enrique Jardiel Poncela -- -- "When something can be read without effort, great effort has gone into its writing." -- Enrique Jardiel Poncela --