#1 10-03-2007 15:25

Seemann
Registered: 07-08-2006
Posts: 2,152

Проект CLEO: новые опкоды

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

В настоящий момент сделано 9 опкодов из возможных 100.

  0A8C: write_memory 1@ size 4 value 1 virtual_protect 1
  0A8D: 1@ = read_memory 2@ size 4 virtual_protect 1
  0A8E: 1@ = 1 + 2 // int
  0A8F: 1@ = $var - 5 // int
  0A90: 1@ = 0@ * 1@ // int
  0A91: 1@ = 3@ / 2 // int
  
  0A96: 1@ = actor 0@ struct
  0A97: 1@ = car 0@ struct    
  0A98: 1@ = object 0@ struct

Сам код лежит здесь:
http://sannybuilder.com/dev/cleo.txt

Все подробности в теме на гтафорумс
http://www.gtaforums.com/index.php?showtopic=268976

Если у вас есть идеи, каких опкодов вам не хватает - пишите.


Готова вторая версия CLEO. Все подробности на странице http://cleo.sannybuilder.com/?lang=ru

Offline

#2 12-03-2007 17:30

VanesS
Registered: 12-03-2007
Posts: 6

Re: Проект CLEO: новые опкоды

2Seemann:
Я давно читаю этот форум,пользуюсь твоей прогой и сам довольно неплохой скриптер.
Когда я делал 2х персонажный режим игры для своего глобал мода,столкнулся с проблемой:

Нет ли опкода,который меняет модель актёра на заданную??

Спасибо.

Offline

#3 12-03-2007 17:31

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: Проект CLEO: новые опкоды

Грубо-говоря это самые необходимые ... И придумать даже нечего  smile)

Offline

#4 12-03-2007 18:27

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Проект CLEO: новые опкоды

2Seemann:

Если у вас есть идеи, каких опкодов вам не хватает - пишите.

1. Команда автонаведения прицела, как в двухплеерном режиме.
2. Команда присвоения бандам определённого вида транспорта.
3. Команда изменения уровня хаоса.


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#5 12-03-2007 20:30

reinstal
Registered: 08-12-2006
Posts: 45

Re: Проект CLEO: новые опкоды

я знаю что надоел уже всем
но пожалуйста попробуй написать опкод чтоб изменять уровень альфы(прозрачьноти) окраски(paintjob-a) машыны

Offline

#6 12-03-2007 21:24

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Проект CLEO: новые опкоды

Возможность присвоить радио объекту.

Offline

#7 18-03-2007 12:41

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Блин бд глюканула, посты пропали ... sad 

Ладно вот тут обновление, десяток новых опкодов

версия 1.22
http://sannybuilder.com/dev/cleo.txt

там написано какие опкоды добавлены. все подробности об опкодах и параметрах читайте на гтафорумс (ссылка в первом посте)

а здесь был пример, как можно через скрипты открыть файл, и выполнить код оттуда (внешний скм)
http://sannybuilder.com/dev/cleo1.20.txt

Offline

#8 23-03-2007 14:52

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Добавил сегодня 4 опкода, позволяющих загружать DLL и выполнять ее процедуры.

http://sannybuilder.com/dev/cleo.txt

2listener:
Возник вопрос, если я загружу DLL в память, но не выгружу ее самостоятельно, высвободится ли память при выходе из игры? Иными словами, можно ли оставлять DLL без присмотра, и надеяться, что игра сама позаботится обо всем?

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

Offline

#9 23-03-2007 15:38

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

Seemann wrote:

Добавил сегодня 4 опкода, позволяющих загружать DLL и выполнять ее процедуры.

2listener:
Возник вопрос, если я загружу DLL в память, но не выгружу ее самостоятельно, высвободится ли память при выходе из игры? Иными словами, можно ли оставлять DLL без присмотра, и надеяться, что игра сама позаботится обо всем?

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

Да, DLL выгрузится автоматом (если ее больше никто не использует).
Я сам хочу так сделать - но я думаю поступить проще: в таблице импорта секцию про wininet.dll заменить на что-то свое. В плюсах - можно будет вмешиваться в процесс инициализации.

А то я разобрал структуру CHandlingData и есть уже нездоровая мысль увеличить количество моделей машин.
PS. жду очередной паузы в рабочем проекте

Last edited by listener (23-03-2007 15:39)

Offline

#10 23-03-2007 16:17

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

есть уже нездоровая мысль увеличить количество моделей машин

имхо, есть лимиты поважнее: размер майн.скм и лимит на колы (+5). Про первый ты знаешь (200,000 байтов с адреса 0xA49960); второй - это возможность добавить в игру только 5 новых .col-файлов, после чего игра вылетает. Первый ограничивает возможности скриптеров (хотя в свете данного топика это становится менее актуально), второй - возможности мапперов.

Offline

#11 24-03-2007 11:30

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Если я вызову LoadLibraryA для dll, которая уже загружена, будет ли это ошибкой? Процедура вернет мне указатель на старую dll или создаст ее копию в памяти?

Offline

#12 24-03-2007 16:28

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

Seemann wrote:

Если я вызову LoadLibraryA для dll, которая уже загружена, будет ли это ошибкой? Процедура вернет мне указатель на старую dll или создаст ее копию в памяти?

На 100% не скажу без справочника, но она должна вернуть указатель на уже загруженную либу и увеличить для нее usageCount.

Касательно лимита на размер скрипта - посмотрел, там нужно выделить блок и поправить порядка 70 смещений и сколько-то мест, где жестко прописан размер. Но это нужно делать, как минимум, до инициализации скриптового движка.

Если сегодня сдам очередной этап, завтра попробую слепить ws2_32.dll с десятью заглушками (чтобы ничего в .exe не править) и попробовать из нее попатчить код.

Last edited by listener (24-03-2007 16:31)

Offline

#13 25-03-2007 09:09

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

В мсдн про LoadLibrary внизу написано

If the dll is already loaded - LoadLibrary will just increase the reference count to that library when returning the new handle

А в LoadLibraryEx

This is because the second call to LoadLibrary or LoadLibraryEx simply returns a handle to the already loaded DLL.

вот  непонятно, то ли это будет 2 библиотеки или одна (но с двумя референсами?)?

Я хочу в начало main.scm вставить загрузку библиотеки CLEO, и получится так, что этот код может вызываться несколько раз в течении одного сеанса игры (например, при в начале и при загрузке сейва). Будет ли игра работать и завершаться корректно с таким неоднократным вызовом LoadLibrary?

edit:
Судя по тестам возвращается указатель на первую загруженную библиотеку. Надеюсь, она выгружается нормально независимо от референсов?

Last edited by Seemann (25-03-2007 09:23)

Offline

#14 25-03-2007 21:46

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

Да, все ресурсы, полученные процессом будут корректно освобождены по завершению процесса.

И о моих экспериментах. Этап я не сдал (подвели дизайнеры), но с dll-ю все-таки успел поэкспериментировать.

Просто так ws2_32.dll не грузится - используется та, что уже загружена системой. Если в .exe поправить имя на, скажем, ws3_32.dll, все нормально грузится и отрабатывает DllMain. (У меня в ней пишется в лог). Дальше нужно по загрузке сделать VirtualProtect - и у меня будет доступ к игровой памяти до начала какой-либо инициализации. (например, чтобы подменить ссылки на scmBlock до начала инициализации скриптового модуля)

Скорее всего, окончательная версия будет работать с vorbisFile.dll (чтобы вообще не править exe-шник), а пока и так пойдет.

Offline

#15 26-03-2007 08:37

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Этап я не сдал (подвели дизайнеры)

было бы интересно узнать, что именно вы разрабатываете: софт или игры?

Дальше нужно по загрузке сделать VirtualProtect - и у меня будет доступ к игровой памяти до начала какой-либо инициализации. (например, чтобы подменить ссылки на scmBlock до начала инициализации скриптового модуля)

что-то я не пойму, ссылки на scm - это же часть exe (CODE), и его вроде нельзя менять в рантайм? Или после VP можно?

окончательная версия будет работать с vorbisFile.dll (чтобы вообще не править exe-шник)

на гтафорумс писали:

DexX wrote:

i've been using a modified vorbis dll (by delfi) to load .asi files, which alter the game's memory as i wish @ runtime

т.е. нечто подобное уже было сделано Delfi (aka JernejL). Правда, в свободном доступе я эту длл не видел, видимо ее делали для внутреннего использования в одном из больших западных модов (MI, LC или SAMP).

Offline

#16 26-03-2007 22:42

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

было бы интересно узнать, что именно вы разрабатываете: софт или игры?

Софт. В данном случае UI.


что-то я не пойму, ссылки на scm - это же часть exe (CODE), и его вроде нельзя менять в рантайм? Или после VP можно?

Нормально, сегмент кода read-only. VP позволяет это изменить.

Правда, в свободном доступе я эту длл не видел, видимо ее делали для внутреннего использования в одном из больших западных модов (MI, LC или SAMP).

Идеи носятся в воздухе. vorbisFile - практически единственный кандидат. Те dll, что уже загружены в системе, просто так использовать нельзя (они возьмутся из памяти, даже если положить свою). Брать EAX.dll - возиться с интерфейсом.

Так что, проще всего - переименовать имеющуюся vorbisFile.dll, положить свою, а при инициализации, первым делом загрузить оригинальную dll через LoadLibrary, и повесить на нее хуки из экспортируемых функций. Всей работы - строчек на 30-40.

Offline

#17 27-03-2007 07:26

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Нормально, сегмент кода read-only. VP позволяет это изменить.

WOOOW! Я даже и не подумал об этом. Оказывается CLEO-опкод 0A8C может менять код ехе. I like Virtual Protect! smile
У меня сразу в голове концептики появились ...

переименовать имеющуюся vorbisFile.dll, положить свою, а при инициализации, первым делом загрузить оригинальную dll через LoadLibrary, и повесить на нее хуки из экспортируемых функций

т.е. сделать так, как если бы модифицированной длл не было вовсе? Т.е. и нужный длл-код выполнится и ворбис не пострадает.

Offline

#18 31-03-2007 10:15

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Добавлена новая версия CLEO 2. Вся информация на этой странице: http://cleo.sannybuilder.com/?lang=ru

Last edited by Seemann (04-04-2007 16:03)

Offline

#19 02-04-2007 16:00

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

2listener:
нашел тот vorbis от delfi
http://gtafixxxer.dyndns.org/fixxxer/me … loader.rar

Offline

#20 03-04-2007 19:21

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

2Seemann:
Угу. Заглянул. Все, как я и говорил.
Сегодня выкроил полчасика и сделал свою. Обвязка (для подключения оригинальной vorbisFile) получилась строчек 60.
Заняться серьезно (и добавить в него что-то полезное) времени сейчас нет.

На то, что получается (и как это делается), можно глянуть: http://listener.pisem.net/tmp/gta_patch_dll.zip

Offline

#21 06-04-2007 10:11

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

С твоей игра не запускается. Оригинальную переименовал в vorbisFileHooked.dll, и скопировал твою длл. Пишет при запуске: ошибка инициализации приложения.

Last edited by Seemann (06-04-2007 10:21)

Offline

#22 06-04-2007 11:16

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

2Seemann:
Угу. Протормозил. Оно динамически собрано и не может найти msvcr80. С этим я чуть позже разберусь, а пока  http://listener.pisem.net/tmp/gta_patch_dll_static.zip
(Мда. 90К вместо 7 - чувствуется разница).

Но, вообще-то, оно выкладывалось не ради кода, а ради исходников.

Offline

#23 06-04-2007 11:49

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Но, вообще-то, оно выкладывалось не ради кода, а ради исходников.

для меня си исходники что есть, что нет. я ж на дельфи... smile Правда, есть borland c++ builder 6, подойдет?

Offline

#24 06-04-2007 13:40

Seemann
Registered: 07-08-2006
Posts: 2,152

Re: Проект CLEO: новые опкоды

Написал asi-плагин для гта cа 1.0, который увеличивает максимальный размер майн.скм до 500.000 байтов. Теперь не нужно мучиться с оптимизацией. Брать на http://cleo.sannybuilder.com

Для работы нужен ASI Loader от Delfi, ссылка есть в этой теме, чуть выше

Offline

#25 06-04-2007 15:26

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Проект CLEO: новые опкоды

2Seemann:

для меня си исходники что есть, что нет. я ж на дельфи...

Это не есть гут. Чем более активная работа с памятью делается (чем сложнее структуры), тем тяжелее делать это из паскаля/дельфи.
BCB на данном этапе подойдет (с учетом того, что вместо __declspec нужно экспортируемые функции описать в .def-файле).

На одном из дальнейших этапов я хочу выносить функции наружу (т.е., подпихивать отреверсенные и дополненные варианты). На этом этапе - только MSVC (благо, он сейчас раздается свободно урезанный (Express) и триалом на полгода - самый полный (Team Edition)).

На вопросы по C/C++ я могу поотвечать по аське, но деньков через пять. (Если интересно - закину номер аськи в PM).

Offline

Board footer

Powered by FluxBB