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;
}
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.