Тестирование небольшой утилиты..

Тема в разделе "WASM.HEAP", создана пользователем EvilsInterrupt, 23 июл 2005.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Хотелось бы что бы про тестировали мою утилиту

    [​IMG] 569329515__dump.rar
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Трабла:

    Сейчас проблема такова я релиз версию: - upx dump.exe после запускаю

    dump /cpp dump.exe > dump.txt. И у меня вылезает ошибка на acess violation

    0x42e000, та же ошибка и без сжатия upx`ом!



    Запустив Olly я обнаружил, что мой файл, который размером в 57 344 байта

    был не полностью спроецирован!!! А был как раз таки до 42DFFF байта вклю-

    чительно.



    Запустив в дебуг версии, утилита обработала файл полностью без каких

    либо нареканий.



    Вероятный способ устранения бага:

    Воспользоваться GetFileSize и дать ее результат в dwMaximumSizeHigh,

    dwMaximumSizeLow функции CreateFileMapping.Но поможет ли,буду про-

    бовать.



    ЗЫ:

    Помогите заставить утилиту проецировать обрабатываемый файл любого

    размера в память.
     
  3. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    почему бы просто не заюзать GetFileSize(hFile,NULL)
     
  4. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    EvilsInterrupt

    Может нужно выровнять размер проекции по размеру страницы (4K), хотя едва-ли.
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Че самое интересное, по таким переданным параметрам функций CreateFileMapping,MapFileOfView(исходник выше) я проецировал файл около 655 МБ(фильм мп4) и проверял WinHEX и работой под отладчиком, но для другой своей утилиты, в этой же точно также ctrl+c,ctrl+v глюк на 57 КБ, килобайты мать ... ! :dntknw:
     
  6. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    у тебя с памятью всё нормально?
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    ДА вроде волосы не выпадали, а че?
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    EvilsInterrupt

    Твой исполняемый файл достать из архива не удалось из-за "Ошибки CRC". (rar 3.20 beta 4).

    Поэтому пробовал на своем файле.

    Например, если исходный файл занимает число байтов кратное восьми, тогда после цикла
    Код (Text):
    1. ...
    2. for(int i=0; i < (MinorDword / 8); i++)
    3. {
    4. ...
    5. }
    6. ...
    весь файл будет обработан, последующий цикл
    Код (Text):
    1. ...
    2. for(i=0; i < (MinorDword % 8)-1; i++,j++)
    3. {
    4. ...
    5. }
    6. ...
    будет пропущен, а вот последующий код
    Код (Text):
    1. a = pArray[j];
    вызовет исключение, т.к. переменная j уже вышла за пределы файла.



    PS

    Зачем вообще в данной задаче использовать mmf? Imho здесь достаточно последовательного чтения. Imho смешивание WinApi, Си и Си++ приводит к разбуханию кода, отсюда появляется потребность в UPX'ах. Особенно бросается в глаза использование макроса #define hex2asc(Number) и тут же вывод в стиле С++. В Си++ можно так
    Код (Text):
    1. ...
    2. ifstream in(filename, ios::in | ios::binary);
    3. in.unsetf(ios::skipws);
    4. ...
    5. unsigned char ch;
    6. in >> ch;
    7. ...
    8. cout << (cpp_c_style == style ? "0x" : "0");
    9. cout << hex << uppercase << (ch >> 4) << (ch & 0xF) << nouppercase << dec <<",";
    10. ...
    Если необходимо использовать Си++, то напрашивается базовый класс CHexDump и его потомки CHexDumpForAsm, CHexDumpForCppC и т.д.
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Спасибо, за такой ответ!