|  |
| |
| 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 |
|