/* * Test of instruction analysis against tampering. * Feed random binary to instruction decoder and ensure not to * access out-of-instruction-buffer.
*/
staticconstchar *prog; /* Program name */ staticint verbose; /* Verbosity */ staticint x86_64; /* x86-64 bit mode flag */ staticunsignedint seed; /* Random seed */ staticunsignedlong iter_start; /* Start of iteration number */ staticunsignedlong iter_end = DEFAULT_MAX_ITER; /* End of iteration number */ static FILE *input_file; /* Input file name */
staticvoid usage(constchar *err)
{ if (err)
fprintf(stderr, "%s: Error: %s\n\n", prog, err);
fprintf(stderr, "Usage: %s [-y|-n|-v] [-s seed[,no]] [-m max] [-i input]\n", prog);
fprintf(stderr, "\t-y 64bit mode\n");
fprintf(stderr, "\t-n 32bit mode\n");
fprintf(stderr, "\t-v Verbosity(-vv dumps any decoded result)\n");
fprintf(stderr, "\t-s Give a random seed (and iteration number)\n");
fprintf(stderr, "\t-m Give a maximum iteration number\n");
fprintf(stderr, "\t-i Give an input file with decoded binary\n"); exit(1);
}
for (i = 0; i < MAX_INSN_SIZE; i++) {
insn_buff[i] = (unsignedchar)strtoul(tmp, &tmp, 16); if (*tmp != ' ') break;
}
return i;
}
staticint generate_insn(unsignedchar *insn_buff)
{ int i;
if (input_file) return read_next_insn(insn_buff);
/* Fills buffer with random binary up to MAX_INSN_SIZE */ for (i = 0; i < MAX_INSN_SIZE - 1; i += 2)
*(unsignedshort *)(&insn_buff[i]) = random() & 0xffff;
while (i < MAX_INSN_SIZE)
insn_buff[i++] = random() & 0xff;
return i;
}
staticvoid parse_args(int argc, char **argv)
{ int c; char *tmp = NULL; int set_seed = 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.