97, 1/5 회원가입  로그인  
   shdac
   리버싱 초보입니다. IDA에 대한 질문있습니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=79 [복사]


같은 내용의 코드를 각각 리눅스와 윈도우에서 컴파일한뒤 각각의 OS에서 IDA를 실행시켜서 확인해보면 어셈블리 내용이 다르던데 이건 컴파일러도 다르고 운영체제도 달라서 그렇다고 이해하겠는데,
윈도우에서 한거는 main부분도 안나와서 어디가 프로그램의 시작인지 찾지도 못하겠습니다.
원래 이런건가요?

  Hit : 4593     Date : 2014/10/29 04:42



    
shdac 참고용 프로그램 코드입니다.
#include <stdio.h>
func(int a, int b, int c)
{
return (a+b+c);
}
int main()
{
int c=func(1,2,3);
return c;
}

컴파일러는 vs2008입니다.
2014/10/29  
$Zero 디버거는 모두 심볼이 있어야만 main함수를 찾아 갈 수 있습니다.
심볼이 없으면 IDA든 gdb든 ollydbg든 main함수를 찾아가기가 매우 어렵죠.
직접 만든 프로그램이시면 당연히 소스코드도 있고 컴파일 과정에서 디버깅에 사용되는 심볼파일들이 생성됩니다.
해당 심볼들이 IDA에 링크가 되어 있지 않아서 main을 못 찾는 거라 생각됩니다.
winDBG를 예로들면 일반적인 리버싱에선 직접 PE헤더의 EP RVA를 계산해서 디스어셈블 해야하는데 심볼파일을 링크할 경우 main함수의 디스어셈블을 곧바로 할 수 있지요.
디버거가 특정 함수를 바로 찾아가고 못찾아가고 하는 것은 심볼파일의 존재 여부와 링크 여부에 관련이 있습니다. 기본적으로 심볼이 없는 리버싱일 경우 그 어떤 디버거도 main함수를 곧바로 찾아가진 못합니다.
2014/10/30  
shdac 감사합니다. 심볼이라는 새로운 개념이 생겨서 혼란스럽지만 열심히 하겠습니다. 2014/11/01