2012-05-15 3 views
2

나는 프로그램, 즉,이 같은 구조에 정의되어있다c/C++로 최신 리눅스 코어 덤프를 검색하는 방법은 무엇입니까?</p> <pre><code>struct foo { int magic; int bar; }; </code></pre> <p>을 그리고이 구조체의 객체를 생성 할 때, 나는 항상 다음을 수행하십시오 :

object.magic = 654321; 

이 프로그램은 결국 코어 죽을 것이다 덤프가 생성되었습니다.

자동으로 모든 막대 값을 모두 계산하는 C++ 프로그램을 만들 수 있습니까? 예를 들어 합계를 계산할 수 있습니까?

추신. 지금까지 저는 코어를 바이너리로 열어서 654321을 16 진수로 변환 할 수 없다는 것을 조사했습니다 (16 진수 편집기에는 아무 것도 없습니다). Wikipedia는 현대의 유닉스 시스템이 ELF를 사용한다고 말합니다.하지만 유감스럽게도 필자는 미숙 한 프로그래머이므로 모든 헤더 시스템을 이해하지 못합니다.

전체 헤더 구조를 배우지 않고이 막대를 가져올 수있는 방법이 있습니까?

+1

마법 번호 '0x654321'을 (를) 작성하면 바이너리에서 "eC!"문자열을 검색 할 수 있습니다. 또는 "! Ce", 엔디안에 따라. –

+0

오브젝트가 힙에 있는지 확인하십시오. 스택에서 컴파일러가이 값을 최적화하지 않았을 수 있습니다. 또한 코어 파일의 크기가 무제한인지 확인하십시오. 아마도 잘 렸을 것입니다. –

답변

5

지금까지 내가 진 단순히 개방 코어를 할 수없는 16 진수 (16 진수 편집기에서 발견 아무것도)로 변환 654321 검색 것을 조사했습니다.

일부 일치 항목을 생성 할 것으로 예상됩니다. 검색을했을 때 바로 endianness을 받았는지 확인하십시오.

N.B. 어떤 방법을 사용하든이 방법은 근사치 일 것입니다. 이와 같은 검색을 통해 항상 foo의 모든 인스턴스를 찾을 수는 없습니다 (특히 프로세스가 중단 된 이벤트가 발생한 후).

+1

+1 엔디안. –

+0

감사합니다. endiannes에 대해 알지 못했습니다. 지금 그것이 작동합니다. – user1308345