objdump가 -S 옵션으로 소스 코드를 표시하는 방법은 무엇입니까?
바이너리에 소스 파일에 대한 참조가 있습니까?바이너리에서 문자열 실행을 시도했지만 나열된 소스 파일에 대한 참조를 찾을 수 없었습니다...
objdump
는 원본 파일 이름을 참조하는 바이너리로 컴파일된 DWARF 디버깅 정보를 사용합니다.objdump
는 명명된 소스 파일을 열어 소스를 로드하고 출력에 표시하려고 합니다.이진 파일이 디버깅 정보와 함께 컴파일되지 않은 경우 또는objdump
소스 파일을 찾을 수 없습니다. 그러면 출력에서 소스 코드를 얻을 수 없고 어셈블리만 가능합니다.
사용할 때 원본 파일 이름이 표시되지 않습니다.strings
DWARF는 압축을 사용하기 때문에 바이너리에서.
이진법의 왜소 정보는 명령어(명령어 포인터 또는 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
'programing' 카테고리의 다른 글
자식 요소를 끌 때 부모 요소 화재의 'drag 이탈' (0) | 2023.11.05 |
---|---|
"디스플레이: 테이블 셀;"이 있는 디브가 마진의 영향을 받지 않는 이유는 무엇입니까? (0) | 2023.11.05 |
Mysql FROM_UNIXTIME as UTC (0) | 2023.10.31 |
VB.net : SSL을 사용하도록 설정한 상태에서 mysql( mariadb)에 연결할 수 없습니다. (0) | 2023.10.31 |
AJAX jQuery.load 대 jQuery.get (0) | 2023.10.31 |