Трабла: Сейчас проблема такова я релиз версию: - upx dump.exe после запускаю dump /cpp dump.exe > dump.txt. И у меня вылезает ошибка на acess violation 0x42e000, та же ошибка и без сжатия upx`ом! Запустив Olly я обнаружил, что мой файл, который размером в 57 344 байта был не полностью спроецирован!!! А был как раз таки до 42DFFF байта вклю- чительно. Запустив в дебуг версии, утилита обработала файл полностью без каких либо нареканий. Вероятный способ устранения бага: Воспользоваться GetFileSize и дать ее результат в dwMaximumSizeHigh, dwMaximumSizeLow функции CreateFileMapping.Но поможет ли,буду про- бовать. ЗЫ: Помогите заставить утилиту проецировать обрабатываемый файл любого размера в память.
Че самое интересное, по таким переданным параметрам функций CreateFileMapping,MapFileOfView(исходник выше) я проецировал файл около 655 МБ(фильм мп4) и проверял WinHEX и работой под отладчиком, но для другой своей утилиты, в этой же точно также ctrl+c,ctrl+v глюк на 57 КБ, килобайты мать ... !
EvilsInterrupt Твой исполняемый файл достать из архива не удалось из-за "Ошибки CRC". (rar 3.20 beta 4). Поэтому пробовал на своем файле. Например, если исходный файл занимает число байтов кратное восьми, тогда после цикла Код (Text): ... for(int i=0; i < (MinorDword / 8); i++) { ... } ... весь файл будет обработан, последующий цикл Код (Text): ... for(i=0; i < (MinorDword % 8)-1; i++,j++) { ... } ... будет пропущен, а вот последующий код Код (Text): a = pArray[j]; вызовет исключение, т.к. переменная j уже вышла за пределы файла. PS Зачем вообще в данной задаче использовать mmf? Imho здесь достаточно последовательного чтения. Imho смешивание WinApi, Си и Си++ приводит к разбуханию кода, отсюда появляется потребность в UPX'ах. Особенно бросается в глаза использование макроса #define hex2asc(Number) и тут же вывод в стиле С++. В Си++ можно так Код (Text): ... ifstream in(filename, ios::in | ios::binary); in.unsetf(ios::skipws); ... unsigned char ch; in >> ch; ... cout << (cpp_c_style == style ? "0x" : "0"); cout << hex << uppercase << (ch >> 4) << (ch & 0xF) << nouppercase << dec <<","; ... Если необходимо использовать Си++, то напрашивается базовый класс CHexDump и его потомки CHexDumpForAsm, CHexDumpForCppC и т.д.