Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagecpp
titlemain()
__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  __int64 result; // rax@3
  __int64 v4; // rbx@3
  __int64 v5; // [rsp+8h] [rbp-18h]@1

  v5 = *MK_FP(__FS__, 40LL);
  alarm(0xB4u);
  setvbuf(stdout, 0LL, 2, 0LL);
  while (MainFunction());
  result = 0LL;
  v4 = *MK_FP(__FS__, 40LL) ^ v5;
  return result;
}

MainFunction(0x401738)

  • 해당 함수는 다음과 같은 기능을 합니다.
    • DefaultSet() 함수를 통해 게임 진행시 필요한 변수의 초기화를 선언합니다.

    • "operator new(8uLL)" 코드를 이용하여 vtable정보를 저장할 Heap 영역을 할당합니다.

      • 할당된 Heap의 크기는 0x20byte 입니다.
    • 할당된 Heap 영역의 주소값은 Computer, Human Class 변수에 저장합니다.
    • while()을 통해 게임을 플레이하기 위한 기능을 실행합니다.

    • gettimeofday() 함수를 이용하여 플레이어의 게임 플레이 시간을 계산합니다.

    • rowNumber, colNumber 의 값이 -1과 같다면 게임을 종료합니다.

    • rowNumber, colNumber 의 값이 -2일 경우에는 게임 턴을 한차례 돌리는 regret()함수를 호출합니다.
    • 그외의 rowNumber, colNumber 값이 입력 되면 플레이어의 플레이시간을 저장합니다.
      • 총 플레이시간이 0.0보다 작으면 게임을 종료합니다.
      • 총 플레이시간이 0.0보다 크면 SetMarkForBoard()함수를 이용하여 게임 보드 rowNumber,colNumber 위치에 표시합니다.

...

Code Block
languagecpp
titlestruct GameInfo{ ... }
struct GameInfo
{
  _QWORD board[12];
  _DWORD rowNumber;
  _DWORD colNumber;
  _QWORDDWORD player;
  _DWORD tmp;
  double playTimeForCom;
  double playTimeForHum;
};

...