Beispiel #1
0
void my_safe_print_str(const char* name, const char* val, int max_len)
{
  char *heap_end= (char*) sbrk(0);
  fprintf(stderr, "%s at %p ", name, val);

  if (!PTR_SANE(val))
  {
    fprintf(stderr, "is an invalid pointer\n");
    return;
  }

  fprintf(stderr, "= ");
  for (; max_len && PTR_SANE(val) && *val; --max_len)
    fputc(*val++, stderr);
  fputc('\n', stderr);
}
Beispiel #2
0
void my_safe_print_str(const char* val, int max_len)
{
  char *heap_end;

#ifdef __linux__
  if (!safe_print_str(val, max_len))
    return;
#endif

  heap_end= (char*) sbrk(0);

  if (!PTR_SANE(val))
  {
    my_safe_printf_stderr("%s", "is an invalid pointer\n");
    return;
  }

  for (; max_len && PTR_SANE(val) && *val; --max_len)
    my_write_stderr((val++), 1);
  my_safe_printf_stderr("%s", "\n");
}
Beispiel #3
0
int my_safe_print_str(const char* val, int max_len)
{
  char *heap_end;

#ifdef __linux__
  // Try and make use of /proc filesystem to safely print memory contents.
  if (!safe_print_str(val, max_len))
    return 0;
#endif

  heap_end= (char*) sbrk(0);

  if (!PTR_SANE(val))
  {
    my_safe_printf_stderr("%s", "is an invalid pointer");
    return 1;
  }

  for (; max_len && PTR_SANE(val) && *val; --max_len)
    my_write_stderr((val++), 1);
  my_safe_printf_stderr("%s", "\n");

  return 0;
}