Есть такой код:
#include <stdio.h>
#include <unistd.h>
#include <sys/ptrace.h>
#include <time.h>
#include <errno.h>
#include <sys/types.h>
#include <signal.h>
#define ELF_MAGIC_LE		0x464C457F	/* "\x7FELF" in little endian */
void parent(pid_t);
void child();
int main( int argc, char *argv[])
{
  pid_t pid = fork();
  if (pid)
  {
    parent(pid);
  }
  else
    child();
  return 0;
}
void child()
{
  struct timespec tim = {5,0};
  for(;;) nanosleep(&tim, NULL); //sleep 5 sec
}
void parent(pid_t pid)
{
  size_t i;
  long ret = ptrace(PTRACE_ATTACH, pid, NULL, NULL);
  for (i = 0x0; i+1 < 0xfffff000ULL; i+= 0x1000)
  {
    ret = ptrace(PTRACE_PEEKDATA, pid, (void *)i, NULL);
    if ( ((unsigned long)ret & 0xFFFFFFFF) == ELF_MAGIC_LE) printf ("elf header at 0x%zx\n", i);
  }
  ptrace(PTRACE_DETACH, pid, NULL, NULL);
  kill(pid, SIGKILL);
}
elf header at 0x8048000
elf header at 0x8049000
elf header at 0xf7602000
elf header at 0xf77d7000
elf header at 0xf77d8000
ptrace(PTRACE_PEEKDATA, ... вызывает сигфолт? Что тут можно улучшить?
