Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


 
IP:176.32.36.96:7777 Ha6op adm,liderov + bonuse.

**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 28
  1. #1
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,527
    Репутация:
    2048 ±

    Об исходниках Open SA-MP

    Всем привет.

    Возможно, некоторые из вас уже слышали о таком проекте, как Open SA-MP. Этот проект задумывался, как своего рода замена для SA-MP. В какой-то момент разработчики Open SA-MP оказались неспособны заниматься его развитием, но в сети так и остались исходники проекта.
    Собственно, сами эти исходники можно найти по следующей ссылке:
    Многие утверждают, что исходники Open SA-MP получены на основе обратной разработки SA-MP, но это не совсем так.
    Да, отчасти это правда, что можно понять по некоторым комментариям в коде:
    А здесь, судя по названиям переменных и комментариям к ним, работали декомпилятором Hex-Rays Decompiler:
    Тем не менее, есть косвенные доказательства и того факта, что за основу были взяты оригинальные исходники SA-MP.
    Например, если открыть файл "Open SAMP/amx/amx.h", то можно найти в нём следующий комментарий:Разработчик Pawn изначально пользовался системой контроля версий SVN, которая автоматически добавляла в редактируемые файлы исходного кода дату и время регистрации изменений, а также номер ревизии. Очевидно, что в SA-MP Team тоже использовали SVN.


    Ещё можно кое-что найти в файле "amx.c":
    PHP код:
    op_jump_pri:
            
    // Kye SA-MP Team 9/9/2009 Unsecure opcode
        //PUSH((unsigned char *)cip-code);
        //cip=(cell *)(code+(int)pri);
        //NEXT(cip);
        
    assert(0);
        
    ABORT(amx,AMX_ERR_INVINSTR); 
    Примерно такой текст можно найти в обработчиках для опкодов CALL.PRI и JUMP.PRI. Вместо них поставлены заглушки, поднимающие ошибку времени выполнения в абстрактной машине, что делает эти опкоды нерабочими.
    В комментариях указано, что причина таких заглушек - якобы уязвимость опкодов.
    Действительно, такая уязвимость имела место - лично я не слышал ни об одном случае её применения на практике, но в теории опкоды CALL.PRI и JUMP.PRI могли использоваться для совершения атак (переход на специально подготовленный байт-код за пределами секции кода скрипта).
    Уязвимость была обнаружена после релиза Pawn 3.2 и исправлена в Pawn 3.3 (коммит от 08.12.2008) - уязвимые опкоды исключены из набора инструкций и добавлена статическая проверка байт-кода при его загрузке (в функции VerifyPCode). Похоже, Kalcor тоже решил удалить эти опкоды, поставив на их место заглушки, хотя проверку байт-кода добавить не удосужился (типично), тем самым оставив множество других потенциальных уязвимостей, которые до сих пор используются в сообществе SA-MP как "фичи".
    Если верить комментариям в коде Open SA-MP, исправление было совершено "9/9/2009", т.е. это было после выхода SA-MP 0.2x (20.11.2008) и перед релизом 0.3a (19.10.2009). Всё это подтверждает предположение о том, что Open SA-MP основывается на исходниках SA-MP позднее 0.2x (т.е. 0.3a или одной из бета-версий).

    Что интересно, в сервере SA-MP 0.2x CALL.PRI и JUMP.PRI тоже не работают, но это можно объяснить тем, что Kalcor просто подменил архив на files.sa-mp.com, не меняя дату. Подобная подмена уже имела место после релиза 0.3.7 R2-1.


    Ещё одна интересная деталь:
    PHP код:
        "GetPlayerInterior",                    funcGetPlayerInterior },                    // 105
        
    "SetPlayerAttachedObject",                    funcSetPlayerAttachedObject },                    // 106
        
    "RemovePlayerAttachedObject",                    funcRemovePlayerAttachedObject },                    // 107
        
    "SetPlayerAttachedObject",                    funcSetPlayerAttachedObject },                    // 108
        
    "IsPlayerAttachedObjectSlotUsed"funcIsPlayerAttachedObjectSlotUsed }, 
    Это отрывок таблицы нативных функций в Open SA-MP. Обратите внимание: запись для функции SetPlayerAttachedObject продублирована. Очевидно, это баг, связанный с невнимательностью при copy-paste.
    Если верить SA-MP wiki, функция SetPlayerAttachedObject была добавлена в 0.3c.
    И вот что можно найти, дизассемблировав сервер SA-MP 0.3c R1:
    Всё те же дублирующиеся записи.
    Скорее всего, эта ошибка была допущена кем-то из SA-MP Team ещё до того, как исходники попали в руки к разработчикам Open SA-MP, что говорит о том, что в Open SA-MP за основу были взяты исходники, как минимум, от 0.3c R1 (либо, опять же, одной из предрелизных версий).
    Конечно же, есть возможность того, что проект Open SA-MP на самом деле основывается на исходниках более ранней версии (0.3b или 0.3a), а функция SetPlayerAttachedObject была добавлена методом обратной разработки. Но тогда вряд ли можно было случайно повторить ту же самую ошибку с дублированием, а делать это специально - зачем? Для сохранения некой "совместимости"? Тоже вряд ли, виртуальная машина AMX просто игнорирует записи с одинаковыми именами при регистрации нативных функций, поэтому дублирование SetPlayerAttachedObject не дало бы абсолютно никакого эффекта (не считая 8 байт оперативной памяти, потрачeнных впустую из-за продублированной записи, но это уже мелочи).
    Иными словами, эта опечатка нежелательна, но всё же не критична. А раз так, то остаётся лишь один наиболее вероятный вариант: разработчики Open SA-MP просто не заметили той опечатки, поскольку функция SetPlayerAttachedObject уже была в утекших исходниках (0.3c) и её просто никто не трогал. Либо опечатку заметили, но забыли её исправить - или же просто проигнорировали в силу её незначительности. Кстати говоря, даже сам Kalcor до сих пор её не исправил.


    Подведём итоги. Прямые доказательства вряд ли возможны здесь в принципе, но всё же есть несколько косвенных зацепок, в итоге указывающих на то, что Open SA-MP основывается на оригинальных исходниках SA-MP, как минимум, версии 0.3c или одной из бета-версий.

    В этой теме я привёл исключительно своё мнение, но меня также интересует и ваше.
    Можно ли по исходникам Open SA-MP судить о качестве кода в самом SA-MP? Можно ли на их основе делать какие-либо выводы о работе тех или иных систем - PVar'ов, например? Или, возможно, я в чём-то ошибаюсь в этой статье?
    В любом случае буду рад услышать ваше мнение в комментариях.
    Последний раз редактировалось Daniel_Cortez; 03.01.2017 в 16:27. Причина: update
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  2. 10 пользователя(ей) сказали cпасибо:
    $continue$ (04.08.2016)Anton Styazhkin (04.08.2016)MacMailler (05.08.2016)Osetin (05.08.2016)Processing (11.08.2016)Profyan (04.08.2016)TheMallard (07.08.2016)VeFriger (04.08.2016)[ForD] (12.08.2016)_lizard (04.08.2016)
  3. #2
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Если даже он и на основе 0.3c,то какой смысл на основе него судить о коде и принципе работы SA:MP? Есть же в сети исходники более новой версии 0.3d. Смысл копаться в Open SA:MP,кстати с возможно сильно измененным кодом, если можно открыть оригинал(хотя в интернете много лжи)?
    или я что-то не понял и мне стоит прочитать все заново?



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


    Skype
    profan99
    VK
    click




  4. #3
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,527
    Репутация:
    2048 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    Есть же в сети исходники более новой версии 0.3d.
    Это и есть Open SA-MP. Суть в том, что были взяты исходники SA-MP 0.3c, а обратной разработкой добавлены только функции из 0.3d (их можно найти в func_amx.cpp, в самом конце таблицы нативных функций).

    UPD: Только что проверил, там добавлены не все функции 0.3d. Нет функций AttachObjectToObject, IsObjectMoving, IsPlayerObjectMoving, а также отсутствует коллбэк OnPlayerGiveDamage.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  5. Пользователь сказал cпасибо:
    Profyan (04.08.2016)
  6. #4
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,322
    Репутация:
    232 ±
    0.3d не официальная версия. Скорее всего полученная реверс-инжинирингом. Ну или люди присели, покурили и написали с нуля копию SA-MP
    Официальная версия слитых исходников - 0.2.2x (или что то в этом вроде)

    Цитата Сообщение от Profyan Посмотреть сообщение
    Есть же в сети исходники более новой версии 0.3d
    А, вообще Кую давно пара "вскрыть" исходный код SA-MP. Ибо многие баги бы фиксились pull request'ами.
    Последний раз редактировалось $continue$; 04.08.2016 в 21:11.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  7. #5
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,527
    Репутация:
    2048 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    0.3d не официальная версия. Скорее всего полученная реверс-инжинирингом. Ну или люди присели, покурили и написали с нуля копию SA-MP
    Официальная версия слитых исходников - 0.2.2x (или что то в этом вроде)
    Была утечка исходников 0.2x, их тогда adamix продавал. Но это ещё не значит, что не было других утечек и Open SA-MP не основывается на исходниках SA-MP 0.3*.



    Цитата Сообщение от $continue$ Посмотреть сообщение
    А, вообще Кую давно пара "вскрыть" исходный код SA-MP. Ибо многие баги бы фиксились pull request'ами.
    И тогда кто-нибудь форкнет проект, начнёт его активно развивать/продвигать и вся прибыль с проекта пойдёт к нему. Куй ленивый, но не дурак (ну или хотя бы не настолько дурак).
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  8. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    798
    Репутация:
    577 ±
    Если бы основа была 0.3c, то тогда бы им не пришлось реверсить 3D текст. Также в этих исходниках не хватает некоторых функций, реализации ShowPlayerDialog, например.

    Да и вообще, есть ли смысл в знании версии основы Open SA-MP? Исходники есть и кому-то они помогают (например они очень сильно помогают мне в разработке FCNPC).

    Надо понимать, что SA-MP начал разрабатываться более десяти лет назад и, как в любом проекте такого возраста, код и некоторые решения смотрятся довольно странно. Kye сам это понимает, о чём он дал понять в своём сообщении о 0.4. Хотя я не понимаю, почему 0.4 обязательно должна быть полностью переписана, ведь назвать так можно ту версию, в которой будет значительное количество нововведений, как это было с 0.2 и 0.3a.

  9. #7
    Аватар для VVWVV
    Проверенный

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    509
    Репутация:
    219 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Если бы основа была 0.3c, то тогда бы им не пришлось реверсить 3D текст. Также в этих исходниках не хватает некоторых функций, реализации ShowPlayerDialog, например.

    Да и вообще, есть ли смысл в знании версии основы Open SA-MP? Исходники есть и кому-то они помогают (например они очень сильно помогают мне в разработке FCNPC).

    Надо понимать, что SA-MP начал разрабатываться более десяти лет назад и, как в любом проекте такого возраста, код и некоторые решения смотрятся довольно странно. Kye сам это понимает, о чём он дал понять в своём сообщении о 0.4. Хотя я не понимаю, почему 0.4 обязательно должна быть полностью переписана, ведь назвать так можно ту версию, в которой будет значительное количество нововведений, как это было с 0.2 и 0.3a.
    Вы же сами на свой вопрос ответили, говоря о том, что SA-MP разрабатывался 10 лет. Вполне возможно, что его код написан так, что он сам не может разобраться в нём, поэтому и хочет переписать все заново. Вы же знаете его, о его ошибках и недочётах, которые он совершает уже очень длинный срок. Впрочем, не исключаю тот факт, что действительно существует какой-то "комитет", который решает о жизни новых версий.

    Данные исходники действительно помогают, но из-за недостатка некоторых функций приходится самому заглядывать в код.
    Последний раз редактировалось VVWVV; 06.08.2016 в 23:43.

  10. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    798
    Репутация:
    577 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Вы же сами на свой вопрос ответили, говоря о том, что SA-MP разрабатывался 10 лет назад. Вполне возможно, что его код написан так, что он сам не может разобраться в нём, поэтому и хочет переписать все заново. Вы же знаете его, о его ошибках и недочётах, которые он совершает уже очень длинный срок. Впрочем, не исключаю тот факт, что действительно существует какой-то "комитет", который решает о жизни новых версий.
    Не думаю, что есть проблема в непонимании собственного кода, ибо весь код выглядит очень простым.

  11. #9
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,527
    Репутация:
    2048 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Если бы основа была 0.3c, то тогда бы им не пришлось реверсить 3D текст.
    Да, действительно. Я проверил тот листинг в class_text3dlabels.cpp, функция C3DTextLabels::Create3DTextLabel располагается по адресу 0047ABE0, что соответствует версии 0.3c R2-2.
    Тем не менее, факт воссоздания с нуля это ещё не доказывает. Скорее всего, у них были исходники от 0.3c R1 и они просто синхронизировали изменения в реализации 3D-текста, произошедшие в R2. Вполне сходится с фактом дублирования SetPlayerAttachedObject - этот баг появился как раз в 0.3c R1 и, как я уже говорил ранее, если бы эта функция тоже добавлялась в Open SA-MP реверсингом, разработчики не могли бы не заметить то дублирование и у них не было бы ни одной причины намеренно повторять тот же самый баг в своей реализации.


    Цитата Сообщение от ziggi Посмотреть сообщение
    Также в этих исходниках не хватает некоторых функций, реализации ShowPlayerDialog, например.
    А это что?
    Btw, я уже говорил об отсутствующих функциях, но только из 0.3d.


    Цитата Сообщение от ziggi Посмотреть сообщение
    Да и вообще, есть ли смысл в знании версии основы Open SA-MP? Исходники есть и кому-то они помогают (например они очень сильно помогают мне в разработке FCNPC).
    Есть, чтобы знать, какие части исходников относятся к оригиналу (SA-MP), а какие были воссозданы.
    Иначе, если написать статью о том или ином функционале SA-MP, опираясь на исходники Open SA-MP, найдутся те, кто попытается поставить весь материал статьи под сомнение, аргументируя тем, что описываемый функционал добавлен разрабами Open SA-MP и нет никакой гарантии того, что он реализован точно так же, как в оригинале.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  12. #10
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    287
    Репутация:
    83 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Есть, чтобы знать, какие части исходников относятся к оригиналу (SA-MP), а какие были воссозданы.
    Иначе, если написать статью о том или ином функционале SA-MP, опираясь на исходники Open SA-MP, найдутся те, кто попытается поставить весь материал статьи под сомнение, аргументируя тем, что описываемый функционал добавлен разрабами Open SA-MP и нет никакой гарантии того, что он реализован точно так же, как в оригинале.
    Ну так выяснить это наверняка всё равно невозможно
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

 

 
Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •