IDA에서의 디컴파일 관련 질문입니다.

안녕하세요, 제가 IDA를 써서 main 함수를 디컴파일하면 아래 코드가 나오는데요. 저 sub_1380 함수가 인자를 3개 받는 걸로 알았는데 디컴파일된 결과에서는 v5와 v6 값만 받고 있습니다. flag인 a2[3]는 아예 사용을 안 하는 것이 이상해서 질문 드립니다. 도움 주셔서 감사합니다!

__int64 __fastcall main(int a1, char **a2, char **a3)
{
  unsigned int v3; // r12d
  FILE *v5; // r13
  FILE *v6; // rbp
  int v7; // eax
  __int64 v8; // rbx
  int i; // r14d
  __int64 v10; // [rsp+8h] [rbp-40h]

  if ( a1 == 4 )
  {
    v5 = fopen(a2[1], "r");
    v6 = fopen(a2[2], "w");
    v7 = strlen(a2[3]);
    if ( v7 > 0 )
    {
      v8 = 0LL;
      v10 = (unsigned int)(v7 - 1);
      while ( 1 )
      {
        for ( i = 0; i != 8; ++i )
          sub_1380(v5, v6);
        if ( v10 == v8 )
          break;
        ++v8;
      }
    }
    do
      v3 = sub_1380(v5, v6);
    while ( v3 );
    fclose(v5);
    fclose(v6);
  }
  else
  {
    v3 = 1;
    __printf_chk(1LL, "How to use: %s [input_mp3_file] [output_filename] [flag]\n", *a2);
  }
  return v3;
}
#reversing
작성자 정보
답변 1

안녕하세요. IDA가 함수 파라미터를 잘못 해석하는 것은 생각보다 흔한 일입니다. 위 상황에서도 디컴파일러가 잘못 해석했을 확률이 높아 보입니다. IDA Pro 8.4 기준 원하는 함수에 들어가셔서 함수에 커서를 두신 후 y를 누르시면 함수의 calling convention 및 파라미터 등의 스펙을 직접 수정 가능하며, Keypad +, Keypad -를 이용하여 함수 파라미터를 추가 및 삭제할 수 있습니다. 수정 후에도 현상이 지속된다면 f5를 눌러서 디컴파일 창을 새로고침하시면 해결되실 겁니다.

2024.12.16. 14:52
질문에 대한 답을 알고 계신가요?
지식을 나누고 포인트를 획득해보세요.
답변하고 포인트 받기