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