Перейти к содержанию

IDA вопрос по структуре и не только


Рекомендуемые сообщения

Всех с наступившим новым годом!

 

Помогите пожалуйста  несколькими советами, имеем:
1. Две функции в игре.

2. Функция по имени (send_npc_02) формирует переменные и отправляет их в функцию по имени (send_NPC_01) 

Спойлер

---send_npc_02---


_BYTE __cdecl send_npc_02(_DWORD arg0)
{
  _DWORD eax1; // eax
  _BYTE result; // al
  _DWORD esi3; // esi
  _DWORD ebx4; // ebx
  _DWORD edi5a; // edi
  _DWORD edi5; // edi
  _DWORD eax9; // eax
  _BYTE zf12; // zf
  _DWORD var8; // [esp+0h] [ebp-8h]
  _DWORD var4; // [esp+4h] [ebp-4h]

  eax1 = dword_D8DA70;
  if ( !dword_D8DA70 )
    return 0;
  esi3 = 0;
  if ( dword_D8DA70 <= 0 )
    return 0;
  while ( 1 )
  {
    ebx4 = dword_D8DAC8[esi3];
    if ( ebx4 < 0x4000 )
      break;
LABEL_17:

    if ( ++esi3 >= eax1 )
      return 0;
  }
  edi5a = dword_D8DAA0[esi3];
  var8 = edi5a;
  var4 = *(_DWORD *)(sub_9C4310(dword_D8DAC8[esi3]) + 272);
  edi5 = sub_9C5BF0(edi5a);
  if ( !*(_DWORD *)(sub_9C4310(ebx4) + 28) )
  {
LABEL_16:
    eax1 = dword_D8DA70;
    goto LABEL_17;
  }
  if ( *(_WORD *)(edi5 + 200) )
  {
    send_NPC_01((int *)&stru_D83840, 32, 7, ebx4, 0, var8, var4);
    return 1;
  }
  if ( *(_BYTE *)(edi5 + 202) )
  {
    send_NPC_01((int *)&stru_D83840, 32, 3, ebx4, 0, var8, var4);
    return 1;
  }
  if ( *(_BYTE *)(edi5 + 183) != 1 )
  {
    eax9 = dword_D8DD58;
    if ( dword_D8DD58 == 55 )
      eax9 = 6;
    dword_D8DD58 = eax9;
    if ( dword_A72B54[eax9] != -1 )
    {
      zf12 = *(_BYTE *)(sub_9C5BF0(dword_A72B54[eax9]) + 183) == 6;
      eax9 = dword_D8DD58;
      if ( zf12 )
      {
        send_NPC_01((int *)&stru_D83840, 32, 14, dword_D8DD58 + 0x4000, ebx4, var8, var4);
        dword_D8DD58 = 55;
        return 1;
      }
    }
    if ( eax9 == 6 )
      eax9 = 55;
    dword_D8DD58 = eax9;
    if ( *(_BYTE *)(edi5 + 212) )
    {
      send_NPC_01((int *)&stru_D83840, 32, 8, ebx4, 0, var8, var4);
      return 1;
    }
    goto LABEL_16;
  }
  if ( !(unsigned __int8)sub_9C9A10(edi5, arg0) )
    return 0;
  send_NPC_01((int *)&stru_D83840, 32, 9, ebx4, 0, var8, var4);
  return 1;
}


 

 

Нас интересует кусок кода
 

Спойлер

send_NPC_01((int *)&stru_D83840, 32, 7, ebx4, 0, var8, var4);

 

Данная функция принимает 7 параметров, одним из которых является структура, у меня к сожалению не получилось найти ее в том виде, в котором она передается в функцию, если просто на нее тыкнуть, перекидывает в чистую структуру
Вот код send_npc_01

Спойлер

int __thiscall send_NPC_01(int *this, int ArgList, int a3, int a4, int a5, int a6, int a7)
{
  int result; // eax
  SOCKET v9; // [esp-10h] [ebp-18h]
  const char *v10; // [esp-Ch] [ebp-14h]
  int v11; // [esp-8h] [ebp-10h]
  int v12; // [esp-4h] [ebp-Ch]

  result = sub_9C7360(ArgList);
  if ( (_BYTE)result )
  {
    if ( ArgList == 32 )
    {
      sub_9A9820(a3 & 0x1F | 0x20);
      sub_9A98A0(a4);
      if ( a3 == 14 || a3 == 23 )
        sub_9A98A0(a5);
      sub_9A9860(a6);
      sub_9A9860(a7);
      result = send_01(v9, v10, v11, v12);
    }
    else
    {
      sub_9DCAA0(3, this[113], "`R*ERROR 4-%i", ArgList);
      result = send_01(v9, v10, v11, v12);
    }
  }
  return result;
}

 

 

 

На этой почве у меня 2 вопроса подскажите пожалуйста:
1 Как найти в IDA структуру в том виде в котором она попадает в функцию.

2 Возможно ли передать в функцию структуру в том виде который нужен мне.

Спасибо!

Ссылка на комментарий
Поделиться на другие сайты

В 02.01.2021 в 22:40, SeMgA сказал:

&stru_D83840

Это ты сам переименовал, или это IDA задетектил структуру сам? 
И я не совсем понял, что значил "чистая структура". 

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

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Xipho сказал:

Это ты сам переименовал, или это IDA задетектил структуру сам? 
И я не совсем понял, что значил "чистая структура". 

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

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

Я пытаюсь передать структуру из игры, но пока без успешно.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

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