Изменение бинарника.

Тема в разделе "WASM.WIN32", создана пользователем Drakon, 23 окт 2004.

  1. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    У меня тут проблемка возникла... Есть программа, которая пишет логи, причём все английские буквы в ANSI, а русские — в Unicode. Надо ИСПРАВИТЬ БИНАРНИК программы, чтобы писала в ANSI и русские буквы (DLL использовать крайне нежелательно).



    Решение этой задачи у меня довольно смутное. Там импортируются две функции: WriteFile и _hwrite. WriteFile вызывается в 3-х местах бинарника, _hwrite — в одном. Идея такая (опять же реализацию пока что не представляю как сделать): встроить свою функцию с такой же сигнатурой (как это сделать?), которая будет перекодировать и писать в файл (соответственно, пержде, чем перекодировать, надо знать, а в лог ли мы пишем), а вызов call WriteFile заменить на вызов моей функции...



    Есть ли какой-нибудь способ проще (без использования DLL в итоге)? Если нет, подскажите, как реализовать то, что я написал?
     
  2. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Чего-то никто не отвечает. :)



    Тогда просто вопрос: как в бинарник вставить функцию свою?
     
  3. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Чего-то никто не отвечает



    А зачем отвечать человеку, которого я забаню, т.к. FAQ он не читает?
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Drakon А зачем тебе WriteFile трогать, ему все-равно в каком виде писать, главное сколько байт. Смотри как до него создается текст и высчитывается его длина.

    Может там будет возможно просто в секции импорта изменить имена ф-ций с юникодовских на анси
     
  5. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Спасибо. Я уже сам разобрался.

    Оказывается выполнялась функция WideCharToMultyByte, которую я не заметил и поэтому так долго страдал фигнёй. Там передавался неверный параметр, который отвечает за кодировку.
     
  6. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Такс... Проблемы возникли опять. :)

    Там происходит что-то странное у меня... :)



    Задача у меня возникла такая: сделать так, чтобы и в консоли и в логах было читабельно то, что по-русски.

    Система сейчас такая: вызывается функция перекодировки WideCharToMultyByte, причём в стандартной программе она вызывалась с параметром CP_UTF8, при котором и в консоли и в логах всё нечитабельно. Если передать CP_ACP, то логи читабельны, а консоль — нет, а если CP_OEMCP, то логи — нет, а консоль да. Соответственно если CP_MACCP, то большие буквы логов нечитабельны и маленькие буквы в консоли нечитабельны.



    Работает это так: вызывается WideCharToMultyByte, а потом результат (буфер 1024 байта) пишется и в логи и в консоль.



    Решение: я так думаю, что мне придётся выделить отдельный буфер на 1024 байта и в него сложить то, что надо писать в консоль, вызвав дополнительно WideCharToMultiByte. При работе только с бинарником это сложновато...



    Вопрос: есть ли что проще? И как можно сделать то, что я написал?
     
  7. jekyll

    jekyll New Member

    Публикаций:
    0
    Регистрация:
    20 мар 2003
    Сообщения:
    92
    Адрес:
    Russia
    Может я отупел вконец пока меня здесь не было, но бинарник является исполнимым файлом? PE? Тогда на ентом замечательном сайте есть дофига док по этому делу. В частности можно посмотреть доки по вирмейкингу.
     
  8. Drakon

    Drakon New Member

    Публикаций:
    0
    Регистрация:
    24 сен 2004
    Сообщения:
    85
    Адрес:
    Russia
    Да, PE... Сейчас поищу... И лучше чтобы кто-нить ссылочки дал. :)
     
  9. Fallout

    Fallout New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2004
    Сообщения:
    94
    Адрес:
    Russia
    Надо обратить внимание на саму функцию записи в консоль... так как малоли ты суёшь Unicode в ANSI функцию... которая и выводит в этот лист бокс... текст.. либо наоброт суёшьANSI в Unicode функцию.. вообщем... тут надо конкретно смотреть каким макорам что программа делает а так как мы даже "не знаем" =)) что ты курочишь то...
     
  10. Turkish

    Turkish New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    80
    Адрес:
    Russia
    А не легче написать перекодировщик логов?