Посл.ответ |
Сообщение |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 03:46 · Личное сообщение · #1
Привет. Я редактирую игру одну компьютерную и хочу изменить одну функцию в ней. Но чтобы изменить, нужно написать код, который занимает больше места, чем выделено на функцию программой. Как свой код вставить?
Я так понимаю, нужно сделать что-то больше, чем просто написать код в секции с нулями и jmp/ret. Потому что когда делал так - программа вылетала в этом месте.
| Сообщение посчитали полезным: |
|
Ранг: 145.5 (ветеран) Активность: 0.06↘0 Статус: Участник
|
Создано: 16 января 2006 03:57 · Поправил: test · Личное сообщение · #2
Skyer Новую секцию попробуй. Есть готовый инструмент: topo ставь в -Make code writfble
eaeb_topo12corregido.txt.zip
Вот так я могу отправить файло  это - zip переименован в тхт. Открой потом в хекс редакторе и вствь
два байта -> 50 4B по 00000000h адресу.
| Сообщение посчитали полезным: |
 Ранг: 266.8 (наставник), 5thx Активность: 0.22↘0.03 Статус: Участник very WELL :)
|
Создано: 16 января 2006 04:35 · Личное сообщение · #3
Skyer пишет:
Я так понимаю, нужно сделать что-то больше, чем просто написать код в секции с нулями и jmp/ret. Потому что когда делал так - программа вылетала в этом месте.
Может что-то не так делал. Вообще часто этого достаточно. jmp на нули, там нужный код, а потом jmp обратно.
| Сообщение посчитали полезным: |
Ранг: 495.3 (мудрец) Активность: 0.3↘0 Статус: Участник
|
Создано: 16 января 2006 06:23 · Поправил: Bitfry · Личное сообщение · #4
Пожалуйста, используйте поиск по форуму как можно тщательней.
Skyer пишет:
jmp/ret
Что это за такая комбинация?
Ты уж либо call/ret, либо jmp/jmp, либо jmp/push/ret.
Skyer пишет:
одну компьютерную
Пожалуйста, читайте правила как можно внимательней. Если уж вы просите о помощи, то указывайте как можно больше полезной информации.
Название, тип защиты, ссылку (если есть).
Skyer пишет:
Потому что когда делал так - программа вылетала в этом месте.
В каком месте?
Тип ошибки?
Пожалуйста, читайте правила как можно внимательней.
Ведь у вас есть возможность показать здесь кусок кода.
Skyer
Файл для правки exe?
Если dll, то, как минимум, нужно учитывать релоки.
----- Всем привет, я вернулся | Сообщение посчитали полезным: |
Ранг: 389.6 (мудрец) Активность: 0.15↘0 Статус: Участник
|
Создано: 16 января 2006 07:31 · Личное сообщение · #5
Skyer
Что на что менять?
----- TBR | Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 16 января 2006 07:37 · Личное сообщение · #6
Skyer пишет:
Потому что когда делал так - программа вылетала в этом месте.
очень частая ошибка - неправильная работа со стеком, советую обратить на это внимание
а новую секцию во многих случаях не требуется добавлять
| Сообщение посчитали полезным: |
 Ранг: 266.8 (наставник), 5thx Активность: 0.22↘0.03 Статус: Участник very WELL :)
|
Создано: 16 января 2006 09:26 · Личное сообщение · #7
Asterix пишет:
очень частая ошибка - неправильная работа со стеком
Возможно в этом и дело, т.к.:
Skyer пишет:
jmp/ret
Наверное надо или call/ret или jmp/jmp, как написал Bitfry
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 16:53 · Поправил: Skyer · Личное сообщение · #8
Суть в том, что я вначале для тестирования просто сделал прыжок в кусок кода с нулями, а там сделал прыжок обратно+1 строку. Больше никаких изменений не делал. Т.е. программа по идее должна работать без изменений как обычно, а она вылетает.
При вставке новой секции - то же самое.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:02 · Личное сообщение · #9
Ошибка Windows'ская - "Program has encountered a problem and needs to be closed".
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:04 · Поправил: Skyer · Личное сообщение · #10
А что значит "неправильная работа со стеком"? Что там может быть неправильного?
| Сообщение посчитали полезным: |
 Ранг: 116.7 (ветеран) Активность: 0.1↘0 Статус: Участник
|
Создано: 16 января 2006 17:07 · Личное сообщение · #11
Skyer, посмотри внимательно virtual size, raw size секции куда пишешь они должны совпадать. Может быть этот код просто не грузится? А может там в проге и проверка какая есть(размер, CRC)
| Сообщение посчитали полезным: |
 Ранг: 116.7 (ветеран) Активность: 0.1↘0 Статус: Участник
|
Создано: 16 января 2006 17:08 · Личное сообщение · #12
Skyer, запость сюда код, который вставляешь. Возможно ошибка именно в нём!
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:14 · Личное сообщение · #13
А как это проверить?
Новую секцию кода я делал с помощью программы, которую дал test. Та же самая ошибка.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:20 · Личное сообщение · #14
Можно картинками? Так будет достовернее 5e28_hiew.GIF.zip
| Сообщение посчитали полезным: |
 Ранг: 116.7 (ветеран) Активность: 0.1↘0 Статус: Участник
|
Создано: 16 января 2006 17:20 · Личное сообщение · #15
Skyer пишет:
А как это проверить?
Ну, возьми Pe Editor и посмотри секции. Virtual size не должен быть меньше raw size(распространённая ошибка просто, сам када инлайн делал долго думал почему не работает). Но мне кажется, что здесь скорее всего какая-то защита имхо.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:25 · Личное сообщение · #16
Это - новая секция кода и вставленный код. a033_Hiew2.GIF.zip
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:31 · Личное сообщение · #17
Изменённый код.
Красными линиями в первом и третьем файле помечены прыжки, которые были заменены на прыжок в новую секцию кода, а зелёной - место, куда эти прыжки вели и куда ведёт прыжок из новой секции кода. e935_Hiew3.GIF.zip
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:32 · Личное сообщение · #18
Mifodix - civ2.exe не PE файл.
| Сообщение посчитали полезным: |
 Ранг: 116.7 (ветеран) Активность: 0.1↘0 Статус: Участник
|
Создано: 16 января 2006 17:36 · Личное сообщение · #19
Skyer пишет:
Mifodix - civ2.exe не PE файл.
Тогда вообще может быть что угодно, хз. Надо было с этого и начинать.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:37 · Личное сообщение · #20
Ой, прошу прощения - PE файл  Добавляемая программой todo секция вообще не отображается в списке "sections" PE Editor'a
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:39 · Личное сообщение · #21 |
 Ранг: 116.7 (ветеран) Активность: 0.1↘0 Статус: Участник
|
Создано: 16 января 2006 17:44 · Личное сообщение · #22
Skyer пишет:
Добавляемая программой todo секция вообще не отображается в списке "sections" PE Editor'a
Тогда ручками прикрепляй или увеличь размер какой-нить другой секции, больше вариантов нет.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 17:51 · Личное сообщение · #23
Тогда ещё один вопрос - что нужно делать, когда ставишь jmp, а hiew пишет - "jump is out of range"?
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 18:03 · Поправил: Skyer · Личное сообщение · #24
Oh, I have made it! Mifodix - спасибо! Я нашёл подходящую для кода секцию.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 18:04 · Личное сообщение · #25
Правда, вопрос насчёт джампа ещё актуален.
| Сообщение посчитали полезным: |
Ранг: 10.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 января 2006 18:38 · Поправил: Skyer · Личное сообщение · #26
Теперь осталась одна маленькая вещь - знаете ли вы простой(малокодный) генератор случайных чисел, который бы просто выдавал любое число от 0 100? И записывал в регистр eax.
Спасибо.
| Сообщение посчитали полезным: |
Ранг: 450.1 (мудрец) Активность: 0.26↘0 Статус: Участник
|
Создано: 16 января 2006 20:19 · Личное сообщение · #27
Skyer пишет:
Т.е. программа по идее должна работать без изменений как обычно, а она вылетает.
рекомендую использовать отладчик для проверки своего добавленного кода,
чтобы убедится в том что он написан правильно
| Сообщение посчитали полезным: |
 Ранг: 199.6 (ветеран), 12thx Активность: 0.1↘0 Статус: Участник www.uinc.ru
|
Создано: 16 января 2006 22:54 · Личное сообщение · #28
> енератор случайных чисел, который бы просто выдавал любое число от 0 100?
Помойму так:
[code]
segment .bss
rand_seed dd ?
segment .text
random:
push edx
imul edx, dword [rand_seed], 08088405h
inc edx
mov dword [rand_seed], edx
mov eax, 100h
mul edx
mov eax, edx
pop edx
retn
[/code]
| Сообщение посчитали полезным: |
Ранг: 23.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 17 января 2006 03:09 · Личное сообщение · #29
Для извращенцев: если вставляемого кода немного можно попробывать оптимизировать основной код
Я так делал в Винампе - выдрал 60 байт =)
| Сообщение посчитали полезным: |