int
make_array(void)
{
/* эти два адреса известны из IDA */
  const int a1 = 0x42cc98,        // адрес первого байта массива Array
            a2 = 0x42d098, 	  // 
            offset = 0x2b898;     // смещение на первый байт массива Array в .exe файле - выясняется в hex-editorе
  const char *progName = "reget.exe", // жертва
             *outFile = "out.c";      // куда выход складывать будем
  FILE *out;
  int inHandle;
  long f_pos;
  unsigned char *buffer = NULL;
  inHandle = _open(progName, _O_BINARY | _O_RDONLY);
  if (-1 == inHandle)
  {
    fprintf(stderr, "Cannot open %s\n", progName);
    return -1;
  }
  f_pos = lseek(inHandle, offset, SEEK_SET);
  if (f_pos != offset)
  {
    fprintf(stderr, "Cannot seek, error=%d\n", errno);
    close(inHandle);
    return -2;
  }
  buffer = (unsigned char *)malloc(1 + (a2 - a1));
  if (a2 - a1 != read(inHandle, buffer, a2 - a1))
  {
    fprintf(stderr, "Cannot read %d bytes from %s\n", a2 - a1, progName);
    free(buffer);
    close(inHandle);
    return -3;
  }
  close(inHandle);
  if (NULL == (out = fopen(outFile, "w")))
  {
    fprintf(stderr, "Cannot create out file %s\n", outFile);
    free(buffer);
    return -4;
  }
  fprintf(out, "const unsigned char array[] = {\n");
  for (f_pos = 0; f_pos < a2 - a1; f_pos++)
  {
    fprintf(out, "0x%x%c%c", buffer[f_pos], 
      f_pos != a2 - a1 - 1 ? ',' : ' ',
      (f_pos & 7) == 7 ? '\n': ' ');
  }
  fprintf(out, "\n};\n");
  fclose(out);
  free(buffer);
  return 0; // success
}