![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| legos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Не подскажете как можно реализовать простой патч. Например есть функция,
и, допустим, поменять в ней world на people? |
|||
|
||||
| BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: 4 Всего: 10 |
Открываешь exe каким-нибудь hex-редактором или отладчиком, смотришь, где расположена строка, открываешь файл на чтение в своей программе, используешь этот оффсет и заменяешь строку, дополняя оставшееся место нулями. Примерно так.
-------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
если:
- по хорошему, то "Hello, world!\n" хранить не в таком виде, а в строковых ресурсах, тогда можно безболезненно обновить любую такую строку, используя любой существующий редактор PE-ресурсов. - по-хорошему, то нужно добавить секцию в PE, в которую добавить новую строку, а относительный адрес в printf заменить на адрес этой, новой строки в секции. - по плохому - заменить содержимое строки "Hello, world!\n" прямо в существующей секции (для этого ее надо еще найти) и молить бога, что размер паддинга (если выравнивание вообще существует) позволит вместить оставшуюся букву. - по плохому, то в случае, если строка заранее известна, т.е. известно ее содержание, пройтись по всему образу, как по байтовому массиву и найти интересующую подстроку, а уже затем ее менять, и опять же, молить бога о том же. Все "если", за исключением первого, требуют наличия знаний по устройству COFF и PE форматов, а самое главное - знание ассемблера, хотя бы на уровне пользователя дизассемблера. Предпочтения всех "если" идут сверху-вниз. PS: надеюсь, желание что-либо патчить уже отпало ) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |