#include #include // TODO: Skip repeating lines #define BYTES 1024 #define BYTES_PER_LINE 20 void print_hex(unsigned char* buf, int byteno, int pos) { for (int i=0; i\nInline commands:\n\tpX - print position X\n\teX - edit position X\n\ts - save modified buffer\n\tq - quit\n", argv[0]); return -1; } FILE* f = fopen(argv[1], "rb+"); if (!f) { printf("Error opening file %s\n", argv[1]); return -1; } unsigned char buf[BYTES]; int byteno = fread(buf, 1, BYTES, f); print_hex(buf, byteno, 0); for (;;) { char cmd; int loc; scanf(" %c", &cmd); if (cmd == 'p' || cmd == 'e') scanf("%d", &loc); switch(cmd) { case 'p': print_hex(buf + loc, BYTES_PER_LINE, loc); break; case 'e': int value; scanf("%x", &value); if (loc < byteno) buf[loc] = (unsigned char)value; break; case 's': fseek(f, 0, SEEK_SET); fwrite(buf, 1, byteno, f); fclose(f); return 0; break; case 'q': return 0; } } }