Сейчас на форуме: YDS, _MBK_, user99 (+10 невидимых)

 eXeL@B —› Основной форум —› Вставить программу новый код, который требует больше места чем старый.
Посл.ответ Сообщение

Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 03:46
· Личное сообщение · #1

Привет. Я редактирую игру одну компьютерную и хочу изменить одну функцию в ней. Но чтобы изменить, нужно написать код, который занимает больше места, чем выделено на функцию программой. Как свой код вставить?

Я так понимаю, нужно сделать что-то больше, чем просто написать код в секции с нулями и jmp/ret. Потому что когда делал так - программа вылетала в этом месте.



Ранг: 145.5 (ветеран)
Активность: 0.060
Статус: Участник

Создано: 16 января 2006 03:57 · Поправил: test
· Личное сообщение · #2

Skyer Новую секцию попробуй. Есть готовый инструмент: topo ставь в -Make code writfble


eaeb_topo12corregido.txt.zip

Вот так я могу отправить файло это - zip переименован в тхт. Открой потом в хекс редакторе и вствь
два байта -> 50 4B по 00000000h адресу.




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 16 января 2006 04:35
· Личное сообщение · #3

Skyer пишет:
Я так понимаю, нужно сделать что-то больше, чем просто написать код в секции с нулями и jmp/ret. Потому что когда делал так - программа вылетала в этом месте.

Может что-то не так делал. Вообще часто этого достаточно. jmp на нули, там нужный код, а потом jmp обратно.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 16 января 2006 06:23 · Поправил: Bitfry
· Личное сообщение · #4

Пожалуйста, используйте поиск по форуму как можно тщательней.

Skyer пишет:
jmp/ret

Что это за такая комбинация?
Ты уж либо call/ret, либо jmp/jmp, либо jmp/push/ret.

Skyer пишет:
одну компьютерную

Пожалуйста, читайте правила как можно внимательней. Если уж вы просите о помощи, то указывайте как можно больше полезной информации.
Название, тип защиты, ссылку (если есть).

Skyer пишет:
Потому что когда делал так - программа вылетала в этом месте.

В каком месте?
Тип ошибки?
Пожалуйста, читайте правила как можно внимательней.
Ведь у вас есть возможность показать здесь кусок кода.

Skyer
Файл для правки exe?
Если dll, то, как минимум, нужно учитывать релоки.

-----
Всем привет, я вернулся




Ранг: 389.6 (мудрец)
Активность: 0.150
Статус: Участник

Создано: 16 января 2006 07:31
· Личное сообщение · #5

Skyer

Что на что менять?

-----
TBR




Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 16 января 2006 07:37
· Личное сообщение · #6

Skyer пишет:
Потому что когда делал так - программа вылетала в этом месте.


очень частая ошибка - неправильная работа со стеком, советую обратить на это внимание

а новую секцию во многих случаях не требуется добавлять




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 16 января 2006 09:26
· Личное сообщение · #7

Asterix пишет:
очень частая ошибка - неправильная работа со стеком

Возможно в этом и дело, т.к.:
Skyer пишет:
jmp/ret

Наверное надо или call/ret или jmp/jmp, как написал Bitfry



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 16:53 · Поправил: Skyer
· Личное сообщение · #8

Суть в том, что я вначале для тестирования просто сделал прыжок в кусок кода с нулями, а там сделал прыжок обратно+1 строку. Больше никаких изменений не делал. Т.е. программа по идее должна работать без изменений как обычно, а она вылетает.

При вставке новой секции - то же самое.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:02
· Личное сообщение · #9

Ошибка Windows'ская - "Program has encountered a problem and needs to be closed".



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:04 · Поправил: Skyer
· Личное сообщение · #10

А что значит "неправильная работа со стеком"? Что там может быть неправильного?




Ранг: 116.7 (ветеран)
Активность: 0.10
Статус: Участник

Создано: 16 января 2006 17:07
· Личное сообщение · #11

Skyer, посмотри внимательно virtual size, raw size секции куда пишешь они должны совпадать. Может быть этот код просто не грузится? А может там в проге и проверка какая есть(размер, CRC)




Ранг: 116.7 (ветеран)
Активность: 0.10
Статус: Участник

Создано: 16 января 2006 17:08
· Личное сообщение · #12

Skyer, запость сюда код, который вставляешь. Возможно ошибка именно в нём!



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:14
· Личное сообщение · #13

А как это проверить?

Новую секцию кода я делал с помощью программы, которую дал test. Та же самая ошибка.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:20
· Личное сообщение · #14

Можно картинками? Так будет достовернее

5e28_hiew.GIF.zip




Ранг: 116.7 (ветеран)
Активность: 0.10
Статус: Участник

Создано: 16 января 2006 17:20
· Личное сообщение · #15

Skyer пишет:
А как это проверить?

Ну, возьми Pe Editor и посмотри секции. Virtual size не должен быть меньше raw size(распространённая ошибка просто, сам када инлайн делал долго думал почему не работает). Но мне кажется, что здесь скорее всего какая-то защита имхо.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:25
· Личное сообщение · #16

Это - новая секция кода и вставленный код.

a033_Hiew2.GIF.zip



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:31
· Личное сообщение · #17

Изменённый код.

Красными линиями в первом и третьем файле помечены прыжки, которые были заменены на прыжок в новую секцию кода, а зелёной - место, куда эти прыжки вели и куда ведёт прыжок из новой секции кода.

e935_Hiew3.GIF.zip



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:32
· Личное сообщение · #18

Mifodix - civ2.exe не PE файл.




Ранг: 116.7 (ветеран)
Активность: 0.10
Статус: Участник

Создано: 16 января 2006 17:36
· Личное сообщение · #19

Skyer пишет:
Mifodix - civ2.exe не PE файл.

Тогда вообще может быть что угодно, хз. Надо было с этого и начинать.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:37
· Личное сообщение · #20

Ой, прошу прощения - PE файл Добавляемая программой todo секция вообще не отображается в списке "sections" PE Editor'a



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:39
· Личное сообщение · #21

Вот, что отображает "sections"

62c0_sections.GIF.zip




Ранг: 116.7 (ветеран)
Активность: 0.10
Статус: Участник

Создано: 16 января 2006 17:44
· Личное сообщение · #22

Skyer пишет:
Добавляемая программой todo секция вообще не отображается в списке "sections" PE Editor'a

Тогда ручками прикрепляй или увеличь размер какой-нить другой секции, больше вариантов нет.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 17:51
· Личное сообщение · #23

Тогда ещё один вопрос - что нужно делать, когда ставишь jmp, а hiew пишет - "jump is out of range"?



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 18:03 · Поправил: Skyer
· Личное сообщение · #24

Oh, I have made it! Mifodix - спасибо! Я нашёл подходящую для кода секцию.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 18:04
· Личное сообщение · #25

Правда, вопрос насчёт джампа ещё актуален.



Ранг: 10.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 16 января 2006 18:38 · Поправил: Skyer
· Личное сообщение · #26

Теперь осталась одна маленькая вещь - знаете ли вы простой(малокодный) генератор случайных чисел, который бы просто выдавал любое число от 0 100? И записывал в регистр eax.

Спасибо.



Ранг: 450.1 (мудрец)
Активность: 0.260
Статус: Участник

Создано: 16 января 2006 20:19
· Личное сообщение · #27

Skyer пишет:
Т.е. программа по идее должна работать без изменений как обычно, а она вылетает.


рекомендую использовать отладчик для проверки своего добавленного кода,
чтобы убедится в том что он написан правильно




Ранг: 199.6 (ветеран), 12thx
Активность: 0.10
Статус: Участник
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.010
Статус: Участник

Создано: 17 января 2006 03:09
· Личное сообщение · #29

Для извращенцев: если вставляемого кода немного можно попробывать оптимизировать основной код
Я так делал в Винампе - выдрал 60 байт =)


 eXeL@B —› Основной форум —› Вставить программу новый код, который требует больше места чем старый.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати