#1 Re: Вопросы по скриптингу » Типы данных параметров опкодов » 07-03-2007 11:42

Я наконец разрадился на собственные форумы или вернее сервер сообщества, http://community.xnsnet.ru/ поэтому базовое место где будут новые творения будет здесь, не буду больше писать не по теме, это не означает что я вас не буду посещать, у вас есть много интересного, просто я наконец обосновался на своем собственном сервере, раньше что-то не получалось никак, желания не хватало, возможности были всегда:(

Реклама собственных сайтов крайне не желательна! Для этого - приват
-= Capushon =-

#2 Re: О сайте и форумах » Сайту требуется администратор! » 05-03-2007 13:16

Сочувствую, у меня тоже сайт в запустении, пожалуй еще большем, что-то никак руки не дойдут:(

#3 Re: Вопросы по скриптингу » Типы данных параметров опкодов » 05-03-2007 11:59

начало миссии/внешнего скрипта определяется командой DEFINE в начале исходника

Ладно, разберемся:)

у меня нет ни VS.NET ни желания в чем-то разбираться. У меня самого с мая прошлого года лежит исходник компилятора Sanny Builder 3 в 4.000 строк и я все никак не могу вернуться к нему...

Хотя выложить можешь, вдруг кто-то еще заинтересуется

Да, согласен, бывает и такое, так же как некоторые мои программки, к которым возвращаться все равно что соваться в пекло, с головой нырять...

Выложу, при первом полноценном билде, по которому можно будет сказать, да это полноценный разборщик, без непоняток и стопоров, сразу на GTAForums, а пока он всего лишь на половину работает, выкладывать нечего, только факт, а для факта хватит и рантайма:) Логика у меня странная временами, выкладываю только полноценные сурсы:) Наверное не хочу показаться ламером для всех:)

#4 Re: Вопросы по скриптингу » Типы данных параметров опкодов » 05-03-2007 09:30

Моя цель руководствуется прежде всего интересом в данном направлении:) Дописывать чужие творения очень сложно когда чего-то непонимаешь, согласись, проще написать что-то свое, тем более войти за счет этого в дело и даже возможно расширить кругозор не только свой:) А когда все понимаешь, сам знаешь все проще на порядок:)

Что касаемо пойнта, есть еще одно но, я слабо понимаю смысл того что Джон написал, может это как раз из-за того что я много другого пока не понимаю:) Вроде бы он и придерживается стандартов написания, но пишет на C# так как буд-то это C++, например сравниваю макросы С++ с его почерком, одно наименование процедуры MakeGlobal об этом кричит не говоря уже о сути операции в этой процедуре:)

На счет минусовых переходов, спасибо за подтверждение моей догадки, я как раз копался в хексе, и об этом думал:) Уже кое что:) Слава богу что скрипты до такой степени не соприкосаются между собой:)

Кстати если я понимаю что такое начало скрипта, то что ты имеешь ввиду под началом миссии?

Что касаемо C эквивалента скрипта, да мне тоже это нравится, если ты правельно понял, то я этот эквивалент хочу зарядить аж на уровень .NET, если ты смотрел пойнт в исходном коде в визуальной студии, то ты понимаешь что такое эквивалент в аналогичном исходном коде, цель даже не редактор, как Point, цель адаптировать скрипт к исходному коду для которого редактором будет сама визуальная студия, теперь ты пониял? А декомпилятор, заодно так, разберет скрипт который существует по заказу в этот редактор или в другой, поэтому я и пишу декомпилятор, чтобы удовлетворить самое необходимое на мой взгляд, а поддержать скажем твой редактор или любой другой не сложно, адаптер есть адаптер.

Ага а вот я и сабы оттестирую теперь в ammu.scm встретился, все же минусовой оффсет это весело:)

		[SaMethod( 0x0002, 1 )]
		public bool Goto( ScmInt32 iOffset ) {
			if ( iOffset < 0 ) {
				iOffset =~ iOffset.Value;
				iOffset++;
			}
			Offset = iOffset;
			return true;
		}

Если есть желание разобраться в .NET могу поделится проектным исходным кодом, скрывать то вобщем-то нечего, нужна VS.NET 2005 и немножко терпения, пока проект маленький, не такой громоздкий как Point разобраться еще можно, без больших проблемм.

#5 Re: Вопросы по скриптингу » Типы данных параметров опкодов » 05-03-2007 07:24

Кстати если сравнить мой текущий декомпилер с пойнтом, то я пошел дальше, я привел каждый тип данных к аналогичным структурным типам данных в .NET, для массивов соответственно классы. Так проще управлять типами и каждый тип можно в идеале контролировать. Вобщем новые билды штампую конвеером, как только внидряю что-то новое и протестированное соответственно, бурная деятельность у меня сейчас в этом направлении.

Пока что программа базируется здесь: http://gtamaps.net/forum/index.php?show … t&p=210354

Только ини файлы мне совсем ненравятся, для полного описания опкода и его параметров, включая всякую шнягу нужно несколько INI файлов, но если делать все по человечески достаточно перевести всю информацию в один XML файл и им управлять из программы, редактировать, дополнять и описывать все что надо. Пока что мне не до этого, но со временем думаю это сделать. А пока что я просто интерпритировал SASCM.INI методом быстрой правки, к тому который меня больше устраивает в форматировании.

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

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

Я ща вожусь с переходами:
jump - С самого начала прошел легко.
jamp_if_false - Сегодня включил, со вторым проходом, думал сначала в отдельном потоке проходить вторую часть кода, потом решил не плодить потоки ради такой мелочи, было бы на что поток открывать.

На счет gosub и return, я их учел, вход и выход из процедуры, но пока не вошел не в одну процедуру в исходном скрипте. Чтобы это оттестировать.

Предпологаю что надо печся об переходах в направлении: init_jump_table и jump_table_jumps

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

Вот еще вопрос, не совсем понял с минусовыми переходами, по сути я так понимаю это шаг назад на столько-то байт, но в имидже есть джамп который шагает слишком далеко назад выходя назад аж за нулевой оффсет, значит он шагает в main.scm на уровне вызова или я это неправельно понял? Я не подгружал скрипты из имиджа к основному скрипту, но уже думаю что это необходимо чтобы проверить целостность.

#6 Re: Вопросы по скриптингу » Типы данных параметров опкодов » 04-03-2007 23:17

Seemann wrote:

заглянул в проект Point и нашел все то же самое на .NET, только декомпилера нормального пока не изобрели, к сожалению...

Пойнт на самом деле имеет декомпилятор и он, без сомнения, - лучший на данный момент (хоть и не доделан).

Да я видел, частично изучил, сторону декомпилятора, я на C# пишу в основном, поэтому нет более понятного языка, синтаксис .NET 1.1 мало чем глобально отличается визуально от 2.0 кроме некоторых упрощений и ухищирений:)

Тем не менее по поводу декомпилятора, некоторые мысли: Дело в том что разборщик не только должен гарантировать успешный разбор всего что ему понятно, это илюзия автоматизма, разборщик должен позволять контролировать разбор, давая возможность пользователю самому видеть в чем могут быть изъяны и недоделки. Почти то же самое видеть код в хексе, но структурированном. Например IDA это гарантирует, но IDA не гарантирует всего, например он не гарантирует обработку и разбор того кода который выполняется, для этого есть только дамп, то есть он не проходит по стопам хода выполнения, если бы он это делал, сдвигать что-либо было бы бесполезно, он бы действительно показывал все, даже зашифрованный контент, но это ассемблер, а мы говорим о более простом, о скрипте.

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

Кроме того метки, условные переходы, они могут быть более внятно интерпретированы по точкам их расположения и перехода, то есть не просто пометить тереторию, вот сюда он ссылается, а структурировать територию, вот как он работает. Декомпилятор должен представить код наиболее близко к тому виду в котором он был написан, вы возможно подумаете что это невозможно, а в реале невозможно это не предствить. Программа не может быть структурирована в разборщике, только если сборщик не структурирован, например если писать на чистом ассемблере, тогда это невозможно или почти невозможно, а в итоге все зависит от оптимизации. Если оптимизатора нет, то нет ничего проще, сравнительно. А если еще разборщик будет говорить с пользователем, что ему делать, что ему не делать, давать возможность задавать параметры для разбора, то можно понять намного больше, чем без всего этого.

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

#7 Re: Вопросы по скриптингу » Типы данных параметров опкодов » 04-03-2007 08:12

Seemann wrote:

Зачем изобретать велосипед, формат SCM уже давно известен и описан
http://www.gtamodding.com/index.php?tit … verview%29

Да, спасибо, аналогично этому я почти в тоже самое время заглянул в проект Point и нашел все то же самое на .NET, только декомпилера нормального пока не изобрели, к сожалению... А эту страницу я как-то видел, только ведь без необходимости на нее не обратишь внимания:) Толку от нее если незнаешь к чему применить:) Уж теперь я знаю, спасибо:)

Чувствую себя детем малым в этой теме, но ничего не поделаешь, всегда нужно побыть детем, чтобы вырасти:) Рядом с большими дядьками, которые съели все овощи и фрукты раньше:) А я уже думал мне самому до всего доходить придется, без док, я могу, только время не резиновое, поэтому еще раз спасибо:)

#8 Вопросы по скриптингу » Типы данных параметров опкодов » 04-03-2007 06:36

xnsnet
Replies: 10

Если не секрет, хотелось бы узнать про типы данных параметров опкодов, я конечно понимаю что этот вопрос слабо относится к программированию в SB, если только в HEX блоках, но все же.

На данный момент я определил следующие типы, те на которые наткнулся, при написании декомпилятора, и конечно могу и ошибаться по поводу их назначения, тем более что могу путать целые числа с числами с плавающей точкой:

0x00 = Пустышка, для завершения блока параметров, переменной длинны
0x01 = 32 бит целое число
0x02 = 16 бит целое число
0x03 = ?
0x04 = 8 бит целое число
0x05 = 16 бит целое число ?
0x06 = 32 бит с плавающей точкой
0x07 = ?
0x08 = ?
0x09 = Короткая строка 8 байт
0x0A = Длинная строка 16 байт
0x0B = ?
0x0C = ?
0x0D = ?
0x0E = Строка с байтовым указателем длины
0x0F = ?

#9 Re: Вопросы по скриптингу » Выключение путей » 04-03-2007 00:06

Продолжение: http://gtamaps.net/forum/index.php?show … t&p=210354
Не стал писать здесь, дабы совсем не отходить от темы в другую сторону... Декомпилер клепаю, в бильдер заодно:)

#10 Re: Вопросы по скриптингу » Выключение путей » 28-02-2007 15:13

Seemann wrote:

Сделай. Я .NET не знаю

Все определяется желанием и необходимостью smile

Я не говорю о том что твоя программа плохая, она отличная, ты молодец, твой труд ценится, для меня тем, что это хороший пример для разбора и последующего развития, забирать место под солцем у кого-то и в мыслях нет, но развитие есть и должно быть, кроме того всегда найдутся люди которые воспользуются именно твоей разработкой, а не моей например smile Да и важно ли вообще кто и что написал, главное полезность и удовлетворение потребностей для нас самих, а заодно и для всех кто мимо проходил и решил поучавствовать, вот что важно:)

Для начала надо это еще разработать, чтобы это вообще могло с чем то или кем то конкурировать, а вот для развития это надо поддерживать и развивать, а кто это будет развивать кроме нас, все участники хороши, если они полезны, поэтому мое дело начать, а уже за поддержкой и развитием мне не к кому на данный момент обратится кроме как к вам, поэтому надеюсь что лично Ты и посетители этого форума, сможем плодотворно сотрудничать:)

Мне нужны мнения спецов по поводу того что я сделаю, правельно я это делаю или неправельно, а лучших спецов кроме как здесь мне не найти, с англоязычным и другим населением мне трудно общаться, я всех могу лишь учитывать, лишь способом написания, например поддерживая Unicode и другие стандарты и т.д.

Вот:) Вобщем, это все что я хотел сказать на данный момент:)

#11 Re: Вопросы по скриптингу » Выключение путей » 28-02-2007 14:24

Кстати знаешь как я вижу скриптинг smile

Например, то что у тебя реализовано это накладно для разработки, фактически твоя программа и декомпилятор и компилятор, проверка синтаксиса компилятором, упирается в возможности разработчика. А если проверку возложить
на сам код, то есть обеспечить классами и возможностями для компиляции самому коду. А значит все что нужно сделать это декомпилятор в исходный код .NET который обеспечен возможностями компиляции, то есть в единую структуру, которая будет лишь дополнением. А значит и придумывать язык программирования не понадобится, декомпилируй хоть в C#, VB, MС++ и не паришься с изучением новых языков. А просто изучаешь возможности класса, просто один класс имеет процедуры, функции, операторы и другие классы, которые либо в реальном времени работают, либо обеспечивают слепок для компиляции. Рефлекторные возможности .NET позволяют делать слепок кода из самого кода, вот в чем разница. Единственное условие этого, это иметь внутренние возможности, а раз игровой скрипт не имеет этих возможностей, значит нужно сделать обертку в том языке который имеет эти возможности и все само собой образуется.

#12 Re: Вопросы по скриптингу » Выключение путей » 28-02-2007 12:33

Я хочу сделать его более открытым для программирования, написать .NET адаптер для использования, от него уже и идти.
Не SAMP разуется, а GTA SA самповый исходник мне разве что посредственно нужен чтобы понять что надо повырубать чтобы вообще все очистить, как это и сделано, мне до SAMP и до MTA глубоко фиолетово, что у них сделано, если бы они сделали как мне надо, таких бы проблемм не возникало.

Почему .NET очень просто, потому что он открыт даже скомпилированный, ну скажем все на таких же опкодах, только масса умельцем давно написали таки программы как рефлектор, декомпилятор, я тоже когда-то писал. Короче, хоть компиль хоть не компиль, только вот есть и приэмущества, управляемая среда. А значит ошибки легко отследить. Да и структура позволяет детально описывать все, все это прекрасно видно, короче я на этом деле сижу уже около шести лет, ну а в программировании около десяти лет. Короче я знаю одно, .NET как не закрывай, он все равно открыт, это его плюс, хотя тоже есть масса ухищирений для запутывания следов, но ломать его бесполезно, в памяти все постоянно двигается, нет ничего постоянного, поэтому все только методом разбора.

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

На основе подобной открытой среды, можно не только более качественные скрипты писать, а еще и мультиплеер делать всем скопом, короче программеров которые пишут на .NET и хотели бы использовать подобное ядро, посчитать будет сложно, их куда больше чем можно представить.

Короче цель, ядро, которое так же можно будет легко увидеть в исходном коде и при желании даже повторить или сделать лучше, но думаю как раз этого никто делать не станет. Сколько надо знать чтобы написать подобное ядро, вот в чем вопрос, кому это дано, у кого достаточно терпения для этого, вот о чем я, развитие всего этого идет очень медленно, мы не имеем контроля, мы имеем куски отрытого исходного кода который еще попробуй урвать, в большинстве для того чтобы чего-то достич в разработке приходится много всего изучать, чтобы что-то написать, то что например хотелось бы сделать мне. Написать тот же мультиплеер, не на основе C++ скриптов павна или люа, которые даются серверному разработчику, и при этом невозможно усовершенствовать сам сервер, чтобы он не глючил. Открытый код, именно открытый код сложнее всего взломать, читерить использовать, потому что всегда найдется тот кто его усовершенствует.

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

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

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

Бессмысленно писать то что уже есть и все что нужно доступно, есть смысл писать только то что недоступно, и сделать доступным. Логика не только у меня такая, она такая у всех, когда ты во что-то упираешься, ты начинаешь думать как это обойти.

#14 Re: Вопросы по скриптингу » Выключение путей » 27-02-2007 19:31

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

К сожалению он его не декомпилирует хотябы частично, показал бы хоть то что сумел разобрать декомпилятор, я бы все прекрасно понял где стопорится, но все время грешит на то что имидж неверный, переправил все что только можно и ини файлы многократно переделывал, увеличивал размерность параметров уменьшал, хоть на имидж не грешит зато грешит то на другое, то на совсем непонятно что, байтовая позиция совсем не меняется в этом случае или вообще полный бред... И дебуг включал выключал и параметры отладки самые разные задавал через консоль. И байты перебирал по близким подобиям. На других скриптах конечно работает, те что декомпилятся только с отладкой и незвестным... Это да все как надо... Но здесь заведомо что-то совсем неверно.

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

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

P.S.: Я про то, что мне досталось из: samp.saa Вобщем ладно, спасибо вам всем за посильную помощь, дальше я буду пробовать это дело на корню заломать своими методами с помощью вашей информации, заодно и обертку напишу все равно надо, чтобы генерация скрипта автоматическая была. За информацию, прежде всего огромная благодарность!:)

P.P.S.: Извиняюсь за бардакт в посте, просто в таких ситуациях у меня бардакт в голове начинается:)

#15 Re: Вопросы по скриптингу » Выключение путей » 27-02-2007 14:19

Да ты был прав, это дейтвительно гаражи, переменные для повторного использования
об этом здесь уже писали: http://www.gtaforums.com/index.php?show … 020&st=40#

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

Ага вот что я еще нашел: http://www.gtaforums.com/index.php?showtopic=207114

Значит это активация и деактивация гаражей... Опкоды 0299 активация гаража, 02B9 деактивация и они уже прописаны в бильдере, так в чем же тогда причина... Ладно, пока пытаюсь разобраться:)

#16 Re: Вопросы по скриптингу » Выключение путей » 27-02-2007 09:23

Seemann wrote:

2xnsnet:

Что за дела товарищи, неизвестный опкод 4209 по адресу 63262 у сампового файлика

Это давно известный факт. Майн.скм у них использует один опкод, который отличается от стандартного по количеству параметров (что-то с гаражами связано). Видимо сделано для защиты от декомпиляции, либо они редактировали опкоды в exe под себя.

Ясно, спасибо! А этот факт излечим? Есть ли информация по этому вопросу или только самому влезть в HEX и излечить эту проблемму?

Это вставка очевидно по четырем словам в хексе, а так как скрипт опознается игрой в порядке вещей без самой библиотеки сампа, которая в памяти игру под себя меняет, в этом случае обязательно было бы крушение игры, а раз его нет, значит надо определять что это вообще, но это явно не здоровый опкод, который является частью слова в одном байте:)))) Кроме того тогда их пять, а не один:) Бредят люди, ладно сломаем, дело терпения:) В крайнем случае, не так уж это и важно, важнее пожалуй сам факт чистоты игры, но ради интереса, взломать конечно важно:)

#17 Re: Вопросы по скриптингу » Выключение путей » 27-02-2007 08:51

Что за дела товарищи, неизвестный опкод 4209 по адресу 63262 у сампового файлика:) Мне казалось бильдер знает все опкоды:) Ага понятно, это опкод SAMPa или вернее их модификации, потому как в базе данных таких опкодов нет:)

#18 Re: Вопросы по скриптингу » Выключение путей » 27-02-2007 07:58

Это способ для вырезания путей, смотрите в теме на этой странице привязку saapack_10.zip: http://gtamaps.net/forum/index.php?show … 638&st=120

Исходные файлы в которых конфиги сконфигурированы без сцен и других ненужных объектов, все это распаковываем из клиентского файла samp.saa и получаем то чего вы так мучительно пытались обойти стандартными способами. На самом деле это путь к редактированию SAMP режима, но если смотреть дальше, то это путь к написанию мультиплеера или других полезностей:) А главное это то чего мне нехватало:) Спасибо этому форуму за поддержание направления действий и боевого духа:)

#19 Re: Вопросы по скриптингу » Выключение путей » 26-02-2007 22:40

К сожалению это не выключает всех объектов и сцен, а всего лишь часть, хоть и большую, а вот как добится полного подобия SAMP чтобы не одного лишнего объекта, не говоря уж о людях и машинах и т.д. Этого я пока не понимаю...

Board footer

Powered by FluxBB