C ++ 프로그램의 어셈블리 코드를 어떻게 볼 수 있습니까?
이를 위해 가장 많이 사용되는 도구는 무엇입니까?
C ++ 프로그램의 어셈블리 코드를 어떻게 볼 수 있습니까?
이를 위해 가장 많이 사용되는 도구는 무엇입니까?
답변:
프로그램을 직접 빌드하는 경우 컴파일러에게 어셈블리 소스를 방출하도록 요청할 수 있습니다. 대부분의 UNIX 컴파일러에는 -S
스위치를 사용하십시오 .
GNU 어셈블러를 사용하는 경우 컴파일 -g -Wa,-alh
하면 stdout에 혼합 소스 및 어셈블리가 제공됩니다 ( -Wa
컴파일러 드라이버에게 옵션을 어셈블러에 전달 -al
하고 어셈블리 목록을 켜고 -ah
"고수준 소스"목록을 추가하도록 요청).
g++ -g -c -Wa,-alh foo.cc
Visual Studio의 경우을 사용하십시오 /FAsc
.
바이너리를 컴파일했다면
objdump -d a.out
UNIX (또한 Cygwin에서 작동)에,dumpbin /DISASM foo.exe
Windows에서.디버거도 분해하여 표시 할 수 있습니다.
disas
GDB에서 명령 사용이 사이트는 현재 나를 위해 일하고 있습니다 (2017) : https://godbolt.org/
다른 사람이 언급했듯이 플랫폼의 디버거는 좋은 출발점입니다. 모든 디버거 및 디스어셈블러의 착암기에 대해서는 IDA Pro를 살펴보십시오 .
Unix / Linux 플랫폼 (Cygwin 포함)에서는을 사용할 수 있습니다 objdump --disassemble <executable>
.
32 비트 PE 파일 용 PE 탐색기 디스어셈블러 다른 사람들을위한 IDA.
이 사이트를 시험해 볼 수도 있습니다 : http://assembly.ynh.io/
여기에서 C 또는 C ++ 코드를 붙여넣고 파란색 버튼을 눌러 어셈블리에 해당하는 버전을 볼 수 있습니다.
Visual Studio에서는 C ++ 프로젝트에 대한 어셈블러 목록을 생성 할 수 있습니다.
프로젝트 속성으로 이동 한 다음 C ++ / 출력 파일로 이동하여 어셈블러 출력 설정 및 ASM 목록 위치를 파일 이름으로 설정하십시오.
Eclipse 사용자 인 경우 디스 어셈블리보기를 사용할 수 있습니다 .
디스 어셈블리보기는로드 된 프로그램을 비교하기 위해 소스 코드와 혼합 된 어셈블러 명령어로 표시합니다. 현재 실행중인 선은 화살표 마커로 표시되고 뷰에서 강조 표시됩니다. 분해보기에서 다음 작업을 수행 할 수 있습니다.
- 어셈블러 명령어 시작시 중단 점 설정
- 중단 점 활성화 및 비활성화 및 속성 설정
- 프로그램의 분해 지침을 단계별로 수행하십시오.
- 프로그램의 특정 지침으로 이동
Alt +8