Re: back into the thread....

Mark Manning <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAPGNrUXJk3A4=fTbZwUsHoDETGCBgaL0a-0UNfJ2ZsYjZAiNug@mail.gmail.com>
actually i lied. i get
"Cannot access memory at address 8" in this case

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 --
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.