А как структуры то достать

Статус
В этой теме нельзя размещать новые ответы.

MrKirill1232

Прославленный
Проверенный
Победитель в номинации 2023
Мастер реакций
Неукротимое пламя
Медаль Благодарности
Победитель в номинации 2022
Старожил I степени
Сообщения
1 814
Розыгрыши
0
Решения
35
Репутация
1 062
Реакции
1 435
Баллы
1 408
Привет!
Завалялся у меня дамп engine.dll (декомпилированный так сказать), и теперь думаю, а как структуру пакета от туда достать :(
Смотрю - а там коды какие-то, ищу по кодам - фигня какая-то...
Если есть гайд где-то - прошу ссылку.
( искомый пакет - S_EX_DIE_INFO )
 
Решение
Там сборная структура пакета
sub_204F5950 - эта ф-ция считывает инфу из пакетов
- первая > v35 = sub_204F5950(*(char **)(a1 + 72), a2, (int)"h", (unsigned int)&v33); считывает H - это скорее всего размер следующего блока(в цикле)

считываем второй блок (столько раз, сколько в H)
v35 = sub_204F5950(*(char **)(a1 + 72), v35, (int)&dword_20ADB750, (unsigned int)&v30);
dword_20ADB750 - если перейти, тут будет структура этого блока, скорее всего DDD

v36 = sub_204F5950(*(char **)(a1 + 72), v35, (int)"h", (unsigned int)&v34); тут опять идет H........
ну вы поняли
а датник как разобрать :0
  • Можете еще помочь, только теперь в этих ваших датниках
    dyepotential_ClassicAden-eu.dat - хочу структуру в эдитор нарисовать... Вообще не понимаю что за данные.
    Пишет что везде "char" использует
    Ну я CHAR и прописал :)
    Ну что-то пошло не по плану :0
    1637486568362.png
    C:
    //----- (20312890) --------------------------------------------------------
    char *__thiscall sub_20312890(char *this)
    {
      char *v1; // esi@1
      signed int v2; // ebx@1
      _WORD *v3; // eax@1
      _WORD *v4; // edi@1
      int v5; // eax@4
      _WORD *v6; // eax@6
      int v7; // eax@9
      _WORD *v8; // eax@11
      int v9; // eax@14
      _WORD *v10; // eax@16
      int v11; // eax@19
      _WORD *v12; // eax@21
      int v13; // eax@24
      _WORD *v14; // eax@26
      int v15; // eax@29
      _WORD *v16; // eax@31
      int v17; // eax@34
      int v19; // [sp+0h] [bp-90h]@1
      char v20; // [sp+Ch] [bp-84h]@32
      char v21; // [sp+18h] [bp-78h]@27
      char v22; // [sp+24h] [bp-6Ch]@22
      char v23; // [sp+30h] [bp-60h]@17
      char v24; // [sp+3Ch] [bp-54h]@12
      char v25; // [sp+48h] [bp-48h]@7
      char v26; // [sp+54h] [bp-3Ch]@2
      char *v27; // [sp+6Ch] [bp-24h]@1
      _WORD *v28; // [sp+74h] [bp-1Ch]@1
      _WORD *v29; // [sp+78h] [bp-18h]@2
      unsigned int v30; // [sp+7Ch] [bp-14h]@1
      int *v31; // [sp+80h] [bp-10h]@1
      int v32; // [sp+8Ch] [bp-4h]@1
    
      v31 = &v19;
      v1 = this;
      v27 = this;
      v2 = 0;
      v30 = 0;
      sub_20262F70(this);
      v32 = 0;
      *(_DWORD *)v1 = &off_20BCB264;
      LOBYTE(v32) = 1;
      sub_20101D40(16);
      v4 = v3;
      v28 = v3;
      LOBYTE(v32) = 2;
      if ( v3 )
      {
        v1500AA80(&v26, L"dyepotential_begin");
        LOBYTE(v32) = 3;
        v2 = 1;
        v30 = 1;
        v29 = sub_20262B60(v4, (int)&v26, 99);
      }
      else
      {
        v29 = 0;
      }
      v32 = 4;
      v5 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v5) = v29;
      *((_DWORD *)v1 + 10) = v5;
      v32 = 1;
      if ( v2 & 1 )
      {
        v2 &= 0xFFFFFFFE;
        v30 = v2;
        v1500AD30(&v26);
      }
      sub_20101D40(16);
      v28 = v6;
      LOBYTE(v32) = 5;
      if ( v6 )
      {
        v1500AA80(&v25, L"dyepotential_id");
        LOBYTE(v32) = 6;
        v2 |= 2u;
        v30 = v2;
        v29 = sub_20262B60(v28, (int)&v25, 100);
      }
      else
      {
        v29 = 0;
      }
      v32 = 7;
      v7 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v7) = v29;
      *((_DWORD *)v1 + 11) = v7;
      v32 = 1;
      if ( v2 & 2 )
      {
        v2 &= 0xFFFFFFFD;
        v30 = v2;
        v1500AD30(&v25);
      }
      sub_20101D40(16);
      v28 = v8;
      LOBYTE(v32) = 8;
      if ( v8 )
      {
        v1500AA80(&v24, L"dye_slot_id");
        LOBYTE(v32) = 9;
        v2 |= 4u;
        v30 = v2;
        v29 = sub_20262B60(v28, (int)&v24, 100);
      }
      else
      {
        v29 = 0;
      }
      v32 = 10;
      v9 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v9) = v29;
      *((_DWORD *)v1 + 12) = v9;
      v32 = 1;
      if ( v2 & 4 )
      {
        v2 &= 0xFFFFFFFB;
        v30 = v2;
        v1500AD30(&v24);
      }
      sub_20101D40(16);
      v28 = v10;
      LOBYTE(v32) = 11;
      if ( v10 )
      {
        v1500AA80(&v23, L"effect_name");
        LOBYTE(v32) = 12;
        v2 |= 8u;
        v30 = v2;
        v29 = sub_20262B60(v28, (int)&v23, 115);
      }
      else
      {
        v29 = 0;
      }
      v32 = 13;
      v11 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v11) = v29;
      *((_DWORD *)v1 + 13) = v11;
      v32 = 1;
      if ( v2 & 8 )
      {
        v2 &= 0xFFFFFFF7;
        v30 = v2;
        v1500AD30(&v23);
      }
      sub_20101D40(16);
      v28 = v12;
      LOBYTE(v32) = 14;
      if ( v12 )
      {
        v1500AA80(&v22, L"skill_id");
        LOBYTE(v32) = 15;
        v2 |= 0x10u;
        v30 = v2;
        v29 = sub_20262B60(v28, (int)&v22, 100);
      }
      else
      {
        v29 = 0;
      }
      v32 = 16;
      v13 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v13) = v29;
      *((_DWORD *)v1 + 14) = v13;
      v32 = 1;
      if ( v2 & 0x10 )
      {
        v2 &= 0xFFFFFFEF;
        v30 = v2;
        v1500AD30(&v22);
      }
      sub_20101D40(16);
      v28 = v14;
      LOBYTE(v32) = 17;
      if ( v14 )
      {
        v1500AA80(&v21, L"max_skill_level");
        LOBYTE(v32) = 18;
        v2 |= 0x20u;
        v30 = v2;
        v29 = sub_20262B60(v28, (int)&v21, 100);
      }
      else
      {
        v29 = 0;
      }
      v32 = 19;
      v15 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v15) = v29;
      *((_DWORD *)v1 + 15) = v15;
      v32 = 1;
      if ( v2 & 0x20 )
      {
        v2 &= 0xFFFFFFDF;
        v30 = v2;
        v1500AD30(&v21);
      }
      sub_20101D40(16);
      v28 = v16;
      LOBYTE(v32) = 20;
      if ( v16 )
      {
        v1500AA80(&v20, L"dyepotential_end");
        LOBYTE(v32) = 21;
        v2 |= 0x40u;
        v30 = v2;
        v29 = sub_20262B60(v28, (int)&v20, 101);
      }
      else
      {
        v29 = 0;
      }
      v32 = 22;
      v17 = v1500A700(v1 + 4, 1, 4);
      *(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v17) = v29;
      *((_DWORD *)v1 + 16) = v17;
      v32 = 1;
      if ( v2 & 0x40 )
      {
        v30 = v2 & 0xFFFFFFBF;
        v1500AD30(&v20);
      }
      return v1;
    }
    // 20101D40: using guessed type double __cdecl sub_20101D40(_DWORD);
    // 20BA5788: using guessed type wchar_t aSkill_id[9];
    // 20BA872C: using guessed type wchar_t aEffect_name[12];
    // 20BB60A8: using guessed type wchar_t aMax_skill_leve[16];
    // 20BB96EC: using guessed type wchar_t aDyepotential_b[19];
    // 20BB9778: using guessed type wchar_t aDye_slot_id[12];
    // 20BB9790: using guessed type wchar_t aDyepotential_i[16];
    // 20BB97D0: using guessed type wchar_t aDyepotential_e[17];
    // 20BCB264: using guessed type int (__stdcall *off_20BCB264)(char);
    По логике, структура должна выглядеть как-то так...
    XML:
    <for name="dyepotential" size="#data" hidden="false">
                <node name="dyepotential_id" reader="UINT" />
                <node name="dye_slot_id" reader="UINT" />
                <node name="effect_name" reader="UNICODE" />
                <node name="skill_id" reader="UINT" />
                <node name="max_skill_level" reader="UINT" />
            </for>
    Но это не так :(
     
    Статус
    В этой теме нельзя размещать новые ответы.
    Назад
    Сверху Снизу