в хвосте оказывается четыре файла:
После всех операций у нас в хвосте оказывается четыре файла: dump_1.exe/dump_2.exe с 50 патронами и dump_3.exe, dump_3.exe с 49- и 48 патронами соответственно. Теперь мы должны сравнить все четыре файла и найти такие ячейки, которые совпадают в dump_1.exe и dump_2.exe, но отличаются у всех остальных. Переменные, отвечающие за хранение количества патронов будут где-то среди них.
Для решения этой задачи мыщъх написал небольшую утилиту, исходный код которой приведен ниже:
#define MAX_DUMPS 0x10 // макс. кол-во поддерживаемых дампов
main(int c, char **v)
{
// объявляем переменные
int pos=0; int a,b,flag; unsigned char ch[MAX_DUMPS]; FILE* f[MAX_DUMPS];
// проверяем
аргументы
if (c-- < 4) return printf("-err: need more files\n");
// открываем все файлы
for (a=0;a<c;a++)
if (!(f[a]=fopen(v[a+1],"rb")))
return printf("-err: cant open %s\n",v[a+1]);
// печать
имен файлов
printf("raw offset");for (a=1;a<c;a++) printf("\t%s",v[a+1]);
while(1)
{
// чтение очередной ячейки из каждого файла
for(a=0;a<c;a++) if (!fread(&ch[a],1,1,f[a])) return 0; pos++;
// если ячейки двух первых дампов совпадают они отбрасываются
if (ch[0] - ch[1]) continue;
// поиск совпадающих ячеек во втором и всех последущих дампах
// (такие ячеки отбрасываются как "левые" и на фиг не нужные)
for(a=flag=1;a<c;a++)
for(b=a;b<c;b++) if ((a-b) && (ch[a]==ch[b])) flag=0;
// печать "правильных" ячеек
if (flag)for (printf("\n%08Xh:",pos-1),a=1;a<c;a++)
printf("\t%02X",ch[a]);
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий