CryEngine SDK

Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции[?]
6
Поинты[?]
0
Здравствуйте!
Я скачал CryEngine SDK для исследования классов игры, нашел класс SSystemGlobalEnvironment, и он был не таким какой он на самом деле.
В SDK класс выглядит так:
C++:
struct SSystemGlobalEnvironment
{
    ISystem*                   pSystem;

    IGame*                     pGame;
    IGameFramework*            pGameFramework;
    INetwork*                  pNetwork;
    IRenderer*                 pRenderer;
    IInput*                    pInput;
    ITimer*                    pTimer;
    IConsole*                  pConsole;
    IScriptSystem*             pScriptSystem;
    I3DEngine*                 p3DEngine;
    ISoundSystem*              pSoundSystem;
    IMusicSystem*              pMusicSystem;
    IPhysicalWorld*            pPhysicalWorld;
    IMovieSystem*              pMovieSystem;
    IAISystem*                 pAISystem;
    IEntitySystem*             pEntitySystem;
    ICryFont*                  pCryFont;
    ICryPak*                   pCryPak;
    ILog*                      pLog;
    ...
А его правильная реализация(во всяком случае для Warface), которую я нашел в теме с классами и оффсетами для игры выглядит так:
C++:
class SSystemGlobalEnvironment {
public:
    char                            pad_0x0000[0x30];        // 0x0000
    IRenderer*                        m_pRenderer;            // 0x0030
    char                            pad_0x0034[0x10];        // 0x0034
    IPhysicalWorld*                    m_pPhysicalWorld;        // 0x0044
    char                            pad_0x0048[0x28];        // 0x0048
    IGame*                            m_pGame;                // 0x0070
    char                            pad_0x0074[0x14];        // 0x0074
    I3DEngine*                        m_p3DEngine;            // 0x0088
    ...
Например, IGame имеет оффсет 4, IRenderer оффсет 16, а правильно 0x70 и 0x30.

Почему так?
 
HVHLEGEND
Забаненный
Статус
Оффлайн
Регистрация
13 Май 2018
Сообщения
745
Реакции[?]
121
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ICoded тебе сюда ))
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
А его правильная реализация
странное суждение)) оба класса верные....
потому что в сдк у тебя просто перечисление общих данных, которые в памяти могут распологаться как угодно компилятору(есть у него такая функция при флагах оптимизации + авто выравнивание не отменяли(черти!!!!))). Так же делаем расчет, что скаченное тобой СДК не есть код ЛагФейса
 
Забаненный
Статус
Оффлайн
Регистрация
21 Авг 2018
Сообщения
157
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Код:
class SSystemGlobalEnvironment
{
public:
    char pad_0x0000[0x1C]; //0x0000
    ILog* pLog; //0x001C
    IAISystem* pAISystem; //0x0020
    char pad_0x0024[0x4]; //0x0024
    INetwork* pNetwork; //0x0028
    IScriptSystem* pScriptSystem; //0x002C
    IRenderer* pRenderer; //0x0030
    IParticleManager* pParticleManager; //0x0034
    char pad_0x0038[0xC]; //0x0038
    IPhysicalWorld* pPhysicalWorld; //0x0044
    IInput* pInput; //0x0048
    IRenderAuxGeom* pAuxGeomRenderer; //0x004C
    char pad_0x0050[0xC]; //0x0050
    ICryPak* pCryPak; //0x005C
    char pad_0x0060[0x4]; //0x0060
    IFrameProfileSystem* pFrameProfileSystem; //0x0064
    ITimer* pTimer; //0x0068
    IConsole* pConsole; //0x006C
    IGame* pGame; //0x0070
    char pad_0x0074[0x4]; //0x0074
    IEntitySystem* pEntitySystem; //0x0078
    ISoundSystem* pSoundSystem; //0x007C
    ISystem* pSystem; //0x0080
    ICharacterManager* pCharacterManager; //0x0084
    I3DEngine* p3DEngine; //0x0088
    char pad_0x008C[0x1C]; //0x008C
    IHardwareMouse* pHardwareMouse; //0x00A8
    char pad_0x00AC[0x34]; //0x00AC
    __int32 dwThreadId; //0x00E0
    char pad_0x00E4[0x4]; //0x00E4
    char* CmdLine; //0x00E8
    char pad_0x00EC[0x98]; //0x00EC
    __int32 os_ver; //0x0184
    __int32 os_64; //0x0188
    char pad_0x018C[0xBE]; //0x018C
    __int8 bEditor; //0x024A
    __int8 bEditorGameMode; //0x024B
    char pad_0x024C[0x2C]; //0x024C

}; //Size=0x0278
 
Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции[?]
6
Поинты[?]
0
странное суждение)) оба класса верные....

потому что в сдк у тебя просто перечисление общих данных, которые в памяти могут распологаться как угодно компилятору(есть у него такая функция при флагах оптимизации + авто выравнивание не отменяли(черти!!!!))). Так же делаем расчет, что скаченное тобой СДК не есть код ЛагФейса
Спасибо. Оригинальный SDK с GitHub'a CryTek, не знаю кто такой ЛагФейс.
Код:
class SSystemGlobalEnvironment
{
public:
    char pad_0x0000[0x1C]; //0x0000
    ILog* pLog; //0x001C
    IAISystem* pAISystem; //0x0020
    char pad_0x0024[0x4]; //0x0024
    INetwork* pNetwork; //0x0028
    IScriptSystem* pScriptSystem; //0x002C
    IRenderer* pRenderer; //0x0030
    IParticleManager* pParticleManager; //0x0034
    char pad_0x0038[0xC]; //0x0038
    IPhysicalWorld* pPhysicalWorld; //0x0044
    IInput* pInput; //0x0048
    IRenderAuxGeom* pAuxGeomRenderer; //0x004C
    char pad_0x0050[0xC]; //0x0050
    ICryPak* pCryPak; //0x005C
    char pad_0x0060[0x4]; //0x0060
    IFrameProfileSystem* pFrameProfileSystem; //0x0064
    ITimer* pTimer; //0x0068
    IConsole* pConsole; //0x006C
    IGame* pGame; //0x0070
    char pad_0x0074[0x4]; //0x0074
    IEntitySystem* pEntitySystem; //0x0078
    ISoundSystem* pSoundSystem; //0x007C
    ISystem* pSystem; //0x0080
    ICharacterManager* pCharacterManager; //0x0084
    I3DEngine* p3DEngine; //0x0088
    char pad_0x008C[0x1C]; //0x008C
    IHardwareMouse* pHardwareMouse; //0x00A8
    char pad_0x00AC[0x34]; //0x00AC
    __int32 dwThreadId; //0x00E0
    char pad_0x00E4[0x4]; //0x00E4
    char* CmdLine; //0x00E8
    char pad_0x00EC[0x98]; //0x00EC
    __int32 os_ver; //0x0184
    __int32 os_64; //0x0188
    char pad_0x018C[0xBE]; //0x018C
    __int8 bEditor; //0x024A
    __int8 bEditorGameMode; //0x024B
    char pad_0x024C[0x2C]; //0x024C

}; //Size=0x0278
Спасибо.
 
Забаненный
Статус
Оффлайн
Регистрация
21 Авг 2018
Сообщения
157
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
30 Янв 2018
Сообщения
79
Реакции[?]
6
Поинты[?]
0
Понял, спасибо.

А как на счет функций и их индексов в виртуальной таблице?
Ситуация та же?
Если да - то как находят индексы функций в виртуальной таблице? Реверсинг?
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Сверху Снизу