· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Изменение бинарника.

Посл.отвђт Сообщенiе


Дата: Окт 23, 2004 14:20:33 · Поправил: Drakon

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

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

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


Дата: Окт 23, 2004 19:16:36

Чего-то никто не отвечает. :)

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


Дата: Окт 23, 2004 19:26:45

Чего-то никто не отвечает

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


Дата: Окт 24, 2004 15:10:51

Drakon А зачем тебе WriteFile трогать, ему все-равно в каком виде писать, главное сколько байт. Смотри как до него создается текст и высчитывается его длина.
Может там будет возможно просто в секции импорта изменить имена ф-ций с юникодовских на анси


Дата: Окт 24, 2004 18:10:37

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


Дата: Окт 27, 2004 00:49:13 · Поправил: Drakon

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

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

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

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

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


Дата: Окт 27, 2004 01:21:08

Может я отупел вконец пока меня здесь не было, но бинарник является исполнимым файлом? PE? Тогда на ентом замечательном сайте есть дофига док по этому делу. В частности можно посмотреть доки по вирмейкингу.


Дата: Окт 27, 2004 09:39:34

Да, PE... Сейчас поищу... И лучше чтобы кто-нить ссылочки дал. :)


Дата: Окт 27, 2004 10:30:26

Надо обратить внимание на саму функцию записи в консоль... так как малоли ты суёшь Unicode в ANSI функцию... которая и выводит в этот лист бокс... текст.. либо наоброт суёшьANSI в Unicode функцию.. вообщем... тут надо конкретно смотреть каким макорам что программа делает а так как мы даже "не знаем" =)) что ты курочишь то...


Дата: Окт 28, 2004 19:40:42

А не легче написать перекодировщик логов?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.100