programing

objdump가 -S 옵션으로 소스 코드를 표시하는 방법은 무엇입니까?

newstyles 2023. 11. 5. 11:03

objdump가 -S 옵션으로 소스 코드를 표시하는 방법은 무엇입니까?

바이너리에 소스 파일에 대한 참조가 있습니까?바이너리에서 문자열 실행을 시도했지만 나열된 소스 파일에 대한 참조를 찾을 수 없었습니다...

objdump는 원본 파일 이름을 참조하는 바이너리로 컴파일된 DWARF 디버깅 정보를 사용합니다.objdump는 명명된 소스 파일을 열어 소스를 로드하고 출력에 표시하려고 합니다.이진 파일이 디버깅 정보와 함께 컴파일되지 않은 경우 또는objdump소스 파일을 찾을 수 없습니다. 그러면 출력에서 소스 코드를 얻을 수 없고 어셈블리만 가능합니다.

사용할 때 원본 파일 이름이 표시되지 않습니다.stringsDWARF는 압축을 사용하기 때문에 바이너리에서.

이진법의 왜소 정보는 명령어(명령어 포인터 또는 IP)와 소스 파일 및 줄 번호 간의 매핑을 저장합니다.소스 파일은 완전한 경로를 사용하여 지정되므로 바이너리를 이동하더라도 찾을 수 있습니다.이 정보를 보려면 사용할 수 있습니다.objdump --dwarf=decodedline <binary>(이진법은 당연히 다음과 같이 컴파일되어야 합니다.-g).

한번 말씀해주시면objdump -S <binary>이 난쟁이 정보를 이용해 분해와 함께 소스코드를 알려줍니다.

제가 알기로는 다음과 같습니다.objdump이진 코드에서 소스 코드를 표시하려면 DWARF 디버깅 정보를 이진 코드로 컴파일해야 한다는 전제 조건이 있습니다. (에 의해)gcc -g sourcefile아니면gcc -gdwarf-2 sourcefile) 그리고 이 DWARF 정보를 처리함으로써objdump@vlcekmi3 와 @vkrnt 가 대답한 것처럼 소스 코드를 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/2511018/how-does-objdump-manage-to-display-source-code-with-the-s-option