Русское сообщество по скриптингу

AMX Disassembler

Файлы и модули, которые пригодятся при скриптинге для AMX Mod X или SourceMod.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено выкладывать файлы или модули для AMXX/SM, которые пригодятся при программировании.

AMX Disassembler

Сообщение Lt.RAT » 26 дек 2009, 17:58

AMX Disassembler изначально написанн Wraith`ом.
Забросил он свой дизассемблер, который потдерживал все типы AMX/AMXX/RAMX файлов, в 2005 году до выхода последнего (v8) формата файла AMXX. В котором разработчики полнуюстью переделали потдержку встроенного режима отладки.

Выкладываемая версия дизассемблера является усовершенствованной:
+: потдерживается новый формат отладочной информации
+: частично исправлен баг с неопределением строк
+: исправлен баг с неправильным определением вызовов функций
+: полнуюстью изменена система анализа data секции файлов, что позволяет довольно хорошо прогнозировать используемые переменные/массивы итп в плагинах скомпилированных с ключем -d0
+: обход защит используемых DJ_WEST`ом (придумает новую - пишите :) )
+: более подробные комментарии к коду (в плагинах скомпилированных с ключем -d0)
+: исправленные описания используемых опкодов

-: неправильное отображение строк с недефолтной кодировкой
-: возможно неправильное определение переменные/массивы итп в плагинах скомпилированных с ключем -d0
-: плохая потдержка x64 формата файлов (хотя AMXX на самом деле их не потдерживает). Да и данный баг был в более ранних версиях.
-: возможность вылета с ошибкой StackOverflow
-: из-за увеличенного кол-ва информации для анализа - долгая загрузка больших плагинов.
-: не потдерживает Compact

На всех своих тестовых плагинах багов не наблюдаю (в x32 версии файлов), но это не значит что их нет :)

Выкладываю версию для теста... Пока без исходников...

ЗЫ ознакомился с CompuPhase`овским компилятором... он генерит файлы уже версии 10 v10, АМХХ`овский компилятор же застрял увы на 8ой... судя по changelog`у довольно много багов там поправили.
Последний раз редактировалось Lt.RAT 13 янв 2010, 18:54, всего редактировалось 2 раз(а).
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: AMX Disassembler

Сообщение Lt.RAT » 07 ноя 2011, 17:18

DJ_WEST, естественно они правы, но пугает, то как это было сделано.
Endi писал(а):Просто какое ему вообще дело до UCP?

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

По поводу усложнения декомпила. Самый сложный путь - это написание собственного компилятора, генерируемый код которого бы их декомпилятор не понимал. В pawn есть ряд опкодов, которые не могут быть представлены в синтаксисе языка Pawn, что тоже можно использовать для сокрытия кода. Анализ многомерных массивов тоже представляет сложность. А самое главное декомпил сам по себе возможен, только из-за генерируемого не оптимизированного кода. Стоит только начать оптимизировать код на уровне опкодов и все на порядок усложняется.

Они хотят уходить в запуск через исходники? Никто не отменял обфускацию исходного кода. Один из самых простых способов я как-то выкладывал:
[pawn]
  1.  

  2. #include <amxmodx>

  3.  

  4. static data[ 30 ] = {

  5.   84, 101, 115, 116, 0,

  6.   48, 46, 48, 46, 49, 0,

  7.   76, 116, 46, 82, 65, 84, 0,

  8.   68, 66, 71, 58, 32, 115, 117, 99, 99, 101, 115, 0

  9.    }

  10.  

  11. #pragma unused data

  12.  

  13.  // G:\scripting\ztest.sma

  14. public _:plugin_init(  )  {

  15.     #emit     break    

  16.     #emit     break    

  17.     #emit     push.c                44

  18.     #emit     push.c                20

  19.     #emit     push.c                 0

  20.     #emit     push.c                12

  21.     #emit     sysreq.c               0

  22.     #emit     stack                 16

  23.     #emit     break    

  24.     #emit     push.c                72

  25.     #emit     push.c                 4

  26.     #emit     sysreq.c               1

  27.     #emit     stack                  8

  28.     #emit     zero.pri  

  29.     #emit     retn      

  30. }

  31.  

  32. @__FillNativeSection() {

  33. register_plugin(_:"",_:"",_:"");

  34. log_amx(_:"");

  35. data[0] = 0;

  36. }

  37.  

  38. /*

  39. #include <amxmodx>

  40.  

  41. public plugin_init()

  42. {

  43.         register_plugin("Test", "0.0.1", "Lt.RAT");

  44.  

  45.         log_amx("DBG: succes");

  46. }

  47. */

  48.  
[/pawn]
Хотя конечно отключат такие встроенные возможности. Но без изменения условий лицензии им это будет делать весьма не просто.

Собственно этот пример был показан для того, чтобы показать как можно производить оптимизации кода встроенными средствами. Но дурить декомпилятор не просто, надо представлять какие конструкции после оптимизации не могут быть обработаны для получения исходников в синтаксисе Pawn.
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: AMX Disassembler

Сообщение ejik » 01 дек 2011, 23:14

Lt.RAT, а как работать с метками? К примеру
[pawn]
  1.      #emit     push.c               0x5

  2.     #emit     break    

  3.     #emit     load.s.pri          0xFFFFFFF3

  4.     #emit     eq.c.pri             0x5

  5.     #emit     jzer           jump_0000

  6.     #emit     break    

  7.     #emit     zero.pri  

  8.     #emit     stack                0x4

  9.     #emit     retn      

  10.     #emit     jump_0000:

  11.     #emit     break    

  12.     #emit     const.pri            0x1

  13.     #emit     retn  

  14. /*

  15.         new i = 5

  16.    

  17.         if ( i == 5 )

  18.                 return 0

  19.        

  20.         return 1;

  21. */
[/pawn] не комлириуется, говорит jump_0000 не определен
Аватара пользователя
ejik
 
Сообщения: 249
Зарегистрирован: 01 июл 2010, 14:07
Благодарил (а): 83 раз.
Поблагодарили: 83 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: AMX Disassembler

Сообщение Lt.RAT » 02 дек 2011, 21:00

В свое время была вот такая темка: Вы должны зарегистрироваться, чтобы видеть ссылки.
Как выяснилось в таком режиме работать с символьными метками он умеет, но если они были объявлены выше по коду. (В приведенном выше коде, метка ниже вызова, т.е. не найдет и надо убрать перед самой меткой директиву #emit т.е. используются метки как для goto) Но там это не единственное ограничение. Вприницпе можно доработать работу #emit директивы, но с этим есть определенные сложности как технического так и "социального" характера.
Так или инчае полноценно в таком виде код не написать. Но возможно производить некоторые оптимизации, запутывание кода.

Данная директива является отладочной, и отключается одним дефайном. Что-то мне кажется, что разработчики SM и AMXX могут в срочном порядке побежать и начать отключать ее :)

Поэтому я решил что нужен собственный компилятор с языка ассемблера Pawn`а, синтаксис которого бы задавался конфигурационными файлами, (для одновременной потдержки и AMXX и SM плагов) и декомпилятор в его код. То и другое реализуется достаточно просто. Все это делаю пока один и достаточно неспеша и некоторая помощь со стороны может значительно ускорить этот процесс.
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: AMX Disassembler

Сообщение Fedcomp » 02 дек 2011, 23:41

#emit работает для amxmodx плагинов?
если да то ты ооооочень мне помог. В таком случае можно поиграться с декомпилятором и получать полностью компилируемые заново плагины. А то до этого приходилось код каждой функции писать между /* */

просто я уже написал для себя обработчик вывода от amxxdump.
Теперь кстати говоря потихоньку переписываю сам amxxdump на php, но медлененько так.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: AMX Disassembler

Сообщение Lt.RAT » 03 дек 2011, 02:26

Работает, если компилятор с ним скомпилен. Насчет SM не знаю но в АМХХ все с отладочными директивами. Только как я писал - весьма ограничена возможность использования символических имен, а это любые ветвления, циклы, вызовы локальных функций, тот же switch и может ченить еще. Но всетаки частично упрощает всякую фигню.

Я пробовал строить дерево переходов, и перекидывать куски кода (обрамляя их goto label) так, чтобы символические имена сначала назначались а потом уже использзовались. Собственно мой код фэйлился там на какихто конструкциях, но думаю что реализуемо. Была еще какаято неразрешаемая задача, уж не помню. Если заставить его вызывать локальные функции, то вполне реализуемо. Пока эту фичу не отрубили :)
Аватара пользователя
Lt.RAT
 
Сообщения: 301
Зарегистрирован: 30 сен 2009, 01:44
Благодарил (а): 4 раз.
Поблагодарили: 151 раз.
Языки программирования: Counter-Strike 1.6

Re: AMX Disassembler

Сообщение Fedcomp » 03 дек 2011, 17:34

и толпы школьников "ВО! СМОТРИТЕ AMXMODX 1.8.3 ВЫШЕЛ ОН КРУЧЕ ДА" не помчатся как дебилы обновлять его .....
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: AMX Disassembler

Сообщение fl0wer » 03 дек 2011, 17:37

Fedcomp писал(а):и толпы школьников "ВО! СМОТРИТЕ AMXMODX 1.8.3 ВЫШЕЛ ОН КРУЧЕ ДА" не помчатся как дебилы обновлять его .....

Почему "как"?
Аватара пользователя
fl0wer
 
Сообщения: 1687
Зарегистрирован: 27 фев 2011, 21:35
Откуда: Россия, Ижевск
Благодарил (а): 240 раз.
Поблагодарили: 508 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++, Java, PAWN

Re: AMX Disassembler

Сообщение Pyxamov » 16 янв 2019, 03:00

Здравствуйте, форумчане... У-меня дело такое... Я, ищу хорошего, опытного человека, кто сможет перевести код из amxdisassembler'а в pawno... Есть такие ? Кто может этим заняться... :( :(
Аватара пользователя
Pyxamov
 
Сообщения: 2
Зарегистрирован: 13 янв 2019, 03:21
Откуда: Tatarstan
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawno

Re: AMX Disassembler

Сообщение KOTOKU » 18 янв 2019, 06:03

Pyxamov писал(а):Здравствуйте, форумчане... У-меня дело такое... Я, ищу хорошего, опытного человека, кто сможет перевести код из amxdisassembler'а в pawno... Есть такие ? Кто может этим заняться... :( :(

Pawno? Ты что из Samp пришел? Тут только CS 1.6 и Source
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: AMX Disassembler

Сообщение Pyxamov » 21 янв 2019, 18:00

Допустим из-сампа... Меня интересует - найдётся такой человек... Твой ответ - мне ничем не-помогает.
Аватара пользователя
Pyxamov
 
Сообщения: 2
Зарегистрирован: 13 янв 2019, 03:21
Откуда: Tatarstan
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawno

Пред.

Вернуться в Файлы и модули

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2