2011-03-08 1 views
1

dwarf2에서 스택 풀기가 어떻게 매우 기본적인 ABI (Application Binary Interface) 시나리오의 인수 복구를 확실하게하는지 이해하지 못합니다. 처음 세 인수는 레지스터에 있어야하고 스택에 있어야한다고 ABI를 생각해보십시오. dwarf2 스택 풀기 메커니즘을 이해하면 CFI 테이블이 제대로 채워지면 현재 프레임의 호출 지점에서 레지스터 값을 가져올 수 있습니다. 그러나 이것은 호출자의 프롤로그에 올라가서 인수 레지스터의 내용이 무엇인지 알 수 없습니다. 그래서, 같은 시점에 여러 프레임에서 레지스터의 값을 찾는 방법이 있어야한다고 생각합니다. (.debug_frame 섹션으로 인코딩 된 테이블은 이전 프레임의 위치 만 제공합니다).stacking in dwarf2

이해하는데 문제가 있습니까? 그런 경우 dwarf2 디버깅 형식을 기반으로하는 디버거가 어떻게 작동합니까? 인수가 스택에 전달되는 아키텍처의 경우 프로그램의 모든 지점에서 값을 복구하는 데 문제가 없습니다 (모든 프레임에 대해).

답변

0

그 때 내 이해가 올바르지 않다고 생각합니다. dwarf2에서 stack unwinding이 작동하는 방식은 CFI (Call Frame Information)를 사용하는 것입니다. 이렇게하면 디버거가 이전 프레임 중 하나의 상태를 만들 수 있습니다. 해당 프레임의 위치 식을 사용하면 디버거가 인수의 위치를 ​​알 수 있습니다.