2011-08-10 4 views
1

잘못된 코드를 조사하고 있습니다. 응용 프로그램 검증 힙 아래 전화 후 손상 보여줍니다 제발,와지도 파일을 사용하여 크래시 위치 찾기

AA!Class::Function+dbaf 

내가 가진 맵 파일은 어떻게 정보와지도 파일에 존재하는 정보를보다 사용하여 줄 번호에 도달하는 데 도움이.

선호로드 주소는 00400000

0002:00000dc4  [email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@[email protected]@Z 0049bdc4 

주 : 나는 클래스와 함수 이름을 익명으로 처리했다.

+0

12 번째 줄입니다. (답변에 익명의 줄 번호가 있습니다.) –

+0

@Kerrek, :) 나는 당신이 대답하는 것을 좋아했습니다. 우리 회사가 이걸 좋아하지 않을 수도 있기 때문에 익명으로 처리했습니다.이 사실을 이해하시기 바랍니다. 감사합니다. – Satbir

+0

@Sabir : 물론, 농담을 용서하십시오. 실제 문제는 코드를 게시하지 않고 충돌이 발생한 곳을 알아 내기 위해 디버깅을하는 경우 유용하다고 말하기가 거의 불가능하다는 것입니다. 시작을위한 디버그 기호로 컴파일하면 디버거가 이미 어디로 갈지 알려줄 것입니다. –

답변

1

지도 파일 만 있습니까? PDB가 없습니까? 전체 기호가 있다면 WinDBG에서 맵과 .pdbs (및 .exe)를 사용하십시오 (Windows에 있습니까?). 나는 당신이 당신이 어떻게 함수의 이름을 얻었는지를 보았다고 생각한다.

IF ... dbaf는 답변입니다. 그게 무엇과 같습니까? 오프셋은 잘못된 명령의 위치 여야합니다. 물론 각 명령어의 수 (어셈블리 명령어)를 알아야합니다.

+0

그는 pdb가 있습니다. 그렇지 않으면 AA! Class :: Function을 표시 할 수 없습니다. 그것은 아주 좋은 것은 아니지만, 0xdbaf는 오히려 큰 오프셋입니다. 그의지도는 아마도 너무 형편 없습니다. –

+0

AA! Class :: Function + dbaf는 힙 손상을보고하는 응용 프로그램 검증 프로그램의 결과 파일에 있습니다. 귀하의 답변에 감사드립니다. 심볼 파일을 사용하여 디버거에서 시도해 보겠습니다. – Satbir

0

맵 파일과 EIP (명령어 포인터, 코드가 손상된 주소) 만 있으면 오류가있는 코드로 건너 뛸 수 있다는 것을 기억합니다. 빠른 Google 검색은 나를이 웹 페이지로 안내했습니다 : Map Files And DLL Rebasing. 이상적인 상황에서 내가 기억하는 바로는 Visual C++ 디버거에서 직접 EIP 값을 변경할 수 있으며 해당 코드 줄로 점프합니다.

지금은 Visual C++ 6 시대에 아주 오래 전 이었지만 아직까지도 여전히 적용 가능한지 아직까지 알지 못합니다. 이미 지적했듯이 Visual C++에서 심볼과 프로그램 데이터베이스 옵션을 실제로 살펴 봐야합니다. 설치 및 사용 방법에 대한 많은 정보가 있습니다.