2011-02-03 9 views
0

내 메모리의 어느 부분에서 힙, 스택 등이 거짓인지 어떻게 검사 할 수 있습니까? 현재 C로 프로그램을보고 있는데, .elf 파일을 보면 프로그램이 사용하는 메모리 주소를 볼 수 있지만 힙 또는 스택에 있는지 여부는 알 수 없습니다.C에서의 메모리 할당

+0

정확히 어떤 플랫폼을 사용하고 있습니까? –

답변

3

컴파일 된 코드 자체의 정적 분석을 통해 알기가 어렵습니다. 정적 초기화 된 데이터 영역과 정적 초기화되지 않은 (BSS) 섹션을 볼 수 있어야하지만, 스택, 힙 등과 관련하여로드되는 방식은 플랫폼의 실행 가능 로더에 따라 다릅니다.

0

임베디드 플랫폼에서 작업하는 경우에는 프로그램 작성과 함께 일부 링커 스크립트 (lcf 파일)를 사용하고, 모든 섹션 (스택, 힙, intvec, bss, 텍스트, 코드), 메모리에의 배치 (L1 캐시, L2 캐시 또는 DDR)와 보드에로드하는 동안의 시작/끝 어드레스.

lcf의 키워드를 올바르게 이해하려면 링커 설명서 (컴파일러 설치 디렉토리에서 찾을 수 있음)를 살펴보십시오.

섹션을 분석하는 또 다른 방법이 있습니다. 프로젝트의 "맵 파일"을 만들어서 통과하면됩니다. 프로그램의 모든 섹션과 해당 주소가 나열됩니다.

0

무료 디버거 인 ollydbg을 사용해 볼 수 있습니다. 이 단점 중 하나는 어셈블리 형식의 모든 것을 보여 주지만 스택, 힙, 심지어 레지스터에있는 내용까지 보여줍니다. 이것이 당신이 찾고있는 것인지 확실하지 않습니다.

+0

모든 플랫폼을 지원합니까? –

+0

유닉스 시스템에서 내가 그것을 썼을 때 나는 당신을 몰랐다. 사과드립니다. 그것은 불행히도 창문에서만 작동합니다. 하지만 대부분의 디버거/디스어셈블러가 본질적으로 같은 것을한다고 가정합니다. 그러나 이것은 제가 전에 사용했던 유일한 것입니다. –