> 백엔드 개발 > C++ > GCC와 objdump를 사용하여 C/C에서 어셈블리 코드를 생성하는 방법은 무엇입니까?

GCC와 objdump를 사용하여 C/C에서 어셈블리 코드를 생성하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-27 02:48:14
원래의
541명이 탐색했습니다.

How to Generate Assembly Code from C/C   using GCC and objdump?

GCC의 C/C 소스에서 어셈블러 코드를 출력하는 방법

컴파일된 코드를 분석할 때는 생성된 어셈블리 코드에 접근하는 것이 필수적입니다. GCC에서는 "-S" 옵션을 사용하여 이를 수행할 수 있습니다.

-S 옵션 사용

기본적으로 "-S"는 소스 파일에서 초기 컴파일을 수행하지만 어셈블러를 호출하기 전에 중지됩니다. "-fverbose-asm"과 결합된 이 옵션은 C 코드를 어셈블리 코드와 주석으로 연결합니다. 특히 최적화 수준 -O0에서 유용합니다.

gcc -S helloworld.c
로그인 후 복사

출력 파일 사용자 정의

출력 파일은 일반적으로 .s 확장자를 사용하여 소스 파일 이름을 따서 명명됩니다. 출력 파일의 위치를 ​​사용자 정의하려면 "-o" 옵션을 사용하세요.

gcc -S -o my_asm_output.s helloworld.c
로그인 후 복사

또는 "-o -"를 사용하여 콘솔에 출력할 수도 있습니다:

gcc -S -o - helloworld.c | less
로그인 후 복사

실행 가능한 개체에 대한 어셈블리 액세스

원본 소스 코드가 없지만 객체 파일의 경우 "--disassemble" 옵션(-d)과 함께 objdump를 사용합니다.

objdump -S --disassemble helloworld > helloworld.dump
로그인 후 복사

소스 라인 참조가 있는 향상된 디스어셈블리 출력을 위해 원래 컴파일(-g)에서 디버깅을 활성화합니다.

추가 Objdump 옵션

더 많은 작업을 위해 이러한 objdump 옵션을 사용하는 것을 고려해보세요. 자세한 분석:

  • -rwC: 기호 재배치, 줄 바꿈 비활성화 및 C 이름 정리
  • -Mintel: x86 디스어셈블리를 위한 Intel 구문

예를 들어 다음 명령은 풍부한 분해를 제공합니다. 출력:

objdump -drwC -Mintel -S foo.o | less
로그인 후 복사

"-r"은 자리 표시자와 함께 .o 파일에 기호 참조를 표시하는 데 중요합니다.

위 내용은 GCC와 objdump를 사용하여 C/C에서 어셈블리 코드를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿