Сейчас на форуме: zds, UniSoft (+5 невидимых)

 eXeL@B —› Программирование —› Расширить аррэй
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 января 2013 23:01
· Личное сообщение · #1

Всем привет, возникла необходимость расширить размеры массива, кто-то может подсказать каким образом это можно сделать, хотелось бы попросить конкретной помощи от того, кто разбирается. Работы минут на 30 но это реально нужная вещь для наших игроков (делаем патч для игры на 32 игрока сайт needforkill.ru).
Хотим игрушку пропатчить с 8 игроков до 32 все пропатчили за исключением простенького аррэя.
С ним дел не имели :\ Сама ехешка написанна и откомпилена в делфи. Аррэей в делфи выглядит так:
players : array [0..7] of TPlayer;
с семерки нужно на 32 исправить...



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 21 января 2013 23:33 · Поправил: TryAga1n
· Личное сообщение · #2

Bitnik пишет:
с 8 игроков до 32

Bitnik пишет:
players : array [0..7] of TPlayer;
с семерки нужно на 32 исправить...

По логике вещей, на 31, а не на 32. А конкретно от нас вы что хотите? Чтобы мы экстрасенсорно указали место патча?

Bitnik пишет:
все пропатчили за исключением простенького аррэя

Что "все" вы пропатчили? Перебили копирайты? Вы точно понимаете что такое аррэй и как он работает?



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 21 января 2013 23:35
· Личное сообщение · #3

Bitnik пишет:
с семерки нужно на 32 исправить...

исправил
players : array [0..32] of TPlayer;

| Сообщение посчитали полезным: Bitnik, kp0m

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 января 2013 23:53 · Поправил: Bitnik
· Личное сообщение · #4

Серг ))))
TryAga1n, да ты прав на 31, я чет тормознул, по логике я могу все предоставить вот например данные и вот сама ехе:

http://pff.clan.su/forum/20-579-11370-16-1358797935

Тамже в посте прикреплен и ENGINE.exe
Копирайты никто менять не собирается, все законно!
Также могу исходник на делфи предоставить... Правда он старый и порванный но там все видно и можно разобраться примерно что к чему



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 22 января 2013 01:18
· Личное сообщение · #5

Bitnik пишет:
array [0..7] of TPlayer;

а кто подскажет рантайму Дельфе память увеличить под массив? память то явно статически аллоцирована (мож ошибаюсь?...)



Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 22 января 2013 03:03 · Поправил: r_e
· Личное сообщение · #6

Bitnik
Там по всему коду проверки раскиданы и статически выделенный массив.
Code:
  1. BSS:00757B80 players         dd 8 dup(?)             ; DATA XREF: sub_47FE3C:loc_47FE57r
  2. ...
  3. CODE:0047FE4D                 cmp     eax, 7
  4. CODE:0047FE50                 jbe     short loc_47FE57
  5. CODE:0047FE52                 call    sub_402EBC
  6. CODE:0047FE57 loc_47FE57:                             ; CODE XREF: sub_47FE3C+14j
  7. CODE:0047FE57                 cmp     ds:players[eax*4], 0


-----
старый пень





Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 22 января 2013 03:17 · Поправил: gazlan
· Личное сообщение · #7

Удалено за неактуальностью.

r_e пишет:

BSS:00757B80 players dd 8 dup(?) ; DATA XREF: sub_47FE3C:loc_47FE57r




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 22 января 2013 11:49 · Поправил: yagello
· Личное сообщение · #8

r_e пишет:
Там по всему коду проверки раскиданы

Стандартная Дельфевая автопроверка "Range Check Error", опция компилятора {$R+}
Исправить патчем можно, но муторно.



Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 12:26 · Поправил: Bitnik
· Личное сообщение · #9

Проверки все пропатчил давно, проблема только с массивом, умные люди сказали что нужно как-то в каком-то свободном отрезке памяти замутить аррей норм на 32 игрока, а на месте старого перенаправить как-то чтоли, или какой-то джамп сделать на новый, хз даже, либо еще патч сделать который перенаправит все упоминания об этом арэе в другое место... как-то так )))



Ранг: 62.8 (постоянный), 11thx
Активность: 0.060
Статус: Участник

Создано: 22 января 2013 12:52
· Личное сообщение · #10

Bitnik
ставь бряк на адреса с массивом и отмечай все места в коде где есть к нему обращения
опосля мути новый участок памяти и "переводи на него стрелки"
имхо тебе еще придется отлавливать все циклы на количество игроков - вдруг где жестко 7 прописано




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 22 января 2013 13:41
· Личное сообщение · #11

Bitnik
секцию RW прикрутить в .exe и перенаправлять адреса в коде

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 42.9 (посетитель), 33thx
Активность: 0.040
Статус: Участник

Создано: 22 января 2013 14:52
· Личное сообщение · #12

Bitnik
Набросал скриптец для оли, правит адреса массива на новый адрес, который задается константой - new_array. Счётчик показывает - 3620 замен. А вот с увеличением количества игроков сложнее. Частично можно автоматизировать поиском по сигнатурам. А для остального нужно писать что-то интерактивное, чтобы была возможность визуальной оценки кода.
Code:
  1. var _go
  2. var new_array
  3. var count
  4.  
  5. var temp2
  6. var temp1
  7.  
  8.  
  9. mov  new_array, 00785000, 4
  10. mov count, 0
  11. gmemi eip, MEMORYBASE
  12. mov _go, $RESULT
  13.  
  14. @2:
  15. find _go, 757b80
  16. CMP $RESULT, 0
  17. je @end
  18.  
  19. mov temp2, [$RESULT-2] ,2
  20. CMP temp2, 853C, 2 
  21. je @1
  22. mov temp2, [$RESULT-3] ,2
  23. CMP temp2, 043b, 2  
  24. je @1
  25. mov temp2, [$RESULT-3] ,2
  26. CMP temp2, 048d, 2  
  27. je @1
  28. mov temp2, [$RESULT-3] ,2
  29. CMP temp2, 3c83, 2  
  30. je @1
  31. mov temp2, [$RESULT-3] ,2
  32. CMP temp2, 048b, 2
  33. je @1
  34. mov temp2, [$RESULT-3] ,2
  35. CMP temp2, 148b, 2
  36. je @1
  37. mov temp2, [$RESULT-3] ,2
  38. CMP temp2, 1489, 2 
  39. je @1
  40. mov temp2, [$RESULT-3] ,2
  41. CMP temp2, 0489, 2
  42. je @1
  43. mov temp1, [$RESULT-1] ,2
  44. CMP temp1, 0a1,1
  45. je @1
  46. mov temp2, [$RESULT-2] ,2
  47. CMP temp2,158b,2
  48. je @1
  49. mov temp1, [$RESULT-1] ,2
  50. CMP temp1,0bf,1
  51. je @1
  52. mov temp2, [$RESULT-2] ,2
  53. CMP temp2, 3d83, 2
  54. je @1
  55. jmp @3
  56.  
  57. @1:
  58. mov [$RESULT], new_array, 4
  59. inc count
  60. @3:
  61. mov  _go, $RESULT+1
  62. jmp @2
  63.  
  64.  
  65. @end:
  66. log   count, "count="
  67. ret




Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 15:07 · Поправил: Bitnik
· Личное сообщение · #13

3620 замен ? спасибо за пример попробую дать нашму прогеру, думаю он разберется )
если интересно как код выглядит то вот он: http://nfk.pro2d.ru/tribes/files/SOURCE.pas правда не полная, староватенькая версия но все основное тут видно. Более новая версия сурсов к сожалению утеряна потому вот делам костыли.

Попробуй свой скрипт применить к этому файлу http://pff.clan.su/_fr/5/ENGINE.exe и вылож гденить,
если не лень конешь дальше попробую своих патчей добавить и гляну вдруг проканает и заведется :D



Ранг: 42.9 (посетитель), 33thx
Активность: 0.040
Статус: Участник

Создано: 22 января 2013 15:19 · Поправил: Konstantin
· Личное сообщение · #14

Bitnik пишет:
Попробуй свой скрипт применить к этому файлу http://pff.clan.su/_fr/5/ENGINE.exe

А что тут применять, если прикрутить секцию к файлу и перенаправить адреса на неё ясно что будет работать, только количество игроков не увеличится. Это отдельная тема.

Ну вот ещё пример, для кода вида:
Code:
  1. 0047FEA6    8A45 FE         MOV AL,BYTE PTR SS:[EBP-0x2]
  2. 0047FEA9    83F8 07         CMP EAX,0x7

Ищем по сигнатуре, меняем 7 -> 0ff. Скрипт:
Code:
  1. var _go
  2. var count
  3.  
  4. mov count, 0
  5. gmemi eip, MEMORYBASE
  6. mov _go, $RESULT
  7.  
  8. @2:
  9. find _go, #8A45FE83F807#
  10.  
  11. CMP $RESULT, 0
  12. je @end
  13.  
  14. mov [$RESULT+5], 0ff, 1
  15. inc count
  16.  
  17. mov  _go, $RESULT+1
  18. jmp @2
  19.  
  20. @end:
  21. log   count, "count="
  22. ret

По счётчику - 50 замен.

Если задать поиск всех констант с значением 7, то проходя по списку можно постепенно оценивать код , делая для нужного кода сигны, и добавлять их для поиска и правки в скрипт выше.



Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 15:54 · Поправил: Bitnik
· Личное сообщение · #15

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



Ранг: 42.9 (посетитель), 33thx
Активность: 0.040
Статус: Участник

Создано: 22 января 2013 16:10 · Поправил: Konstantin
· Личное сообщение · #16

Пропатчено.

P.s. Я конечно может что то не понимаю, но увеличить кол-во игроков и размерность массива для этих игроков это как бы разные вещи, так вот первый скрипт просто переносит массив на другой адрес, а второй скрипт - подход к увеличению размерности массива.



Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 22 января 2013 17:14 · Поправил: Bitnik
· Личное сообщение · #17

мде попробовал я потестить применив к твоей ехе сверху еще дополнительно патч вот этот вот http://pff.clan.su/forum/20-579-11307-16-1357376833 который меняет все сравнения типо (for i:=0 to 7 do) с 7 на 16 (их всего 255 я считал) и некоторые другие ограничения, но ничего впринцепе не изменилось. И даже ерроров никаких не повыскакивало странно )

Просто в ДЕЛФИ я пробовал уже такое делать на старом сурсе (менял также вручную тупо арэй с 7 на 32) и все сравнения менял с 7 тож на 32 компилил и все работало... Думал и в асме не очень сложно будет повторить трюк но я видимо плохо шарю и там видимо еще дохрена гемора которого я не учел,
Константин спасибо за скрипты и ехе =) буду пытаться понять что я упустил


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


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