obj 파일의 이진 명령어의 레지스터가 어떤 변수인지 알아야합니다. 한마디로
: 가정하자 objdump를이 같은 OBJ 파일의 미리보기 제공 : 각 명령의 변수에 레지스터에서 매핑 예gcc는 어떤 변수에서 컴파일 된 레지스터를 알려주는 것입니까?
MOV R1 5 # move 5 to register R1
SW R2 SP[-20] # store the value of R2 to address SP-20
우리는 어떻게 알 수 R1 저장 변수가 , 말, var1 소스 코드에서? 그리고 R2 상점 var2?
나는 의 독자를 알고 있습니다., 불행히도 헛된 것입니다.
(원본과 바이너리 간의 라인 매핑을 제공 할 수 있지만 더 이상 도움이되지 않습니다.)
그런 다음 gcc와 링커의 디버깅 옵션을 검색했습니다. 유용한 정보를 찾았지만 여전히 문제를 해결하지 못했습니다. 모든 변수를 추적 할 수 있습니다 -fdump-RTL-vartrack
- 옵션 및 유용 할 것으로 보인다
내가 찾은 정보입니다. 하지만이 옵션으로 컴파일 할 때 예상되는 .vartrack 덤프 파일을 찾지 못했습니다. - 옵션 * fdump-rtl-vartrack-uid에는 각 변수의 고유 ID (DECL_UID)가 표시됩니다. 하지만이 오류가 발생했습니다 : cc1 : 오류 : 인식 할 수없는 명령 줄 옵션 "-fdump-tree-uid"
- 옵션 fdump-rtl-lreg 덤프 로컬 레지스터 할당,하지만 어떻게 말해 줄 수 없어 reg로부터 변수에의 매핑.
경험이나 아이디어가있는 사람이 있습니까?
감사합니다.
해킹 ...
왜 알아야합니까? – delnan
@delnan : 곧 특정 지시 사항에 대한 변수를 추적하거나 추적해야합니다. 하지만이 매핑을 얻을 수 있다면 훨씬 더 많은 작업을 수행 할 수 있습니다. – lukmac