programing

GCC 어셈블러 출력 읽기

oldcodes 2023. 7. 3. 23:09
반응형

GCC 어셈블러 출력 읽기

저는 조립에 대한 아주 초보적인 이해를 얻는 것을 고려하고 있습니다.저의 현재 목표는 간단합니다. x86/x86-64용 -S 스위치로 C/C++을 컴파일할 때 GCC 어셈블리 출력에 대한 매우 기본적인 이해입니다.

단 하나의 기능을 보고 GCC가 제가 사라질 것으로 예상되는 것들을 최적화하는지 확인하는 것과 같은 간단한 일을 할 수 있을 정도입니다.

GCC와 관련된, 특히 읽기 목적의 어셈블리에 대한 진정으로 간결한 소개와 어셈블리를 일상적으로 읽는 사람이 알아야 할 가장 중요한 지침 목록을 가지고 있거나 알고 있는 사람이 있습니까?

GCC를 사용해야 합니다.-fverbose-asm선택.컴파일러가 원래 C/C++ 코드에 대한 어셈블리 코드의 관계를 더 쉽게 이해할 수 있도록 추가 정보(주석 형식)를 출력하도록 합니다.

gcc 또는 clang을 사용하는 경우 -masm=intel 인수는 컴파일러에게 AT&T 구문이 아닌 Intel 구문으로 어셈블리를 생성하도록 지시하고 --save-temps 인수는 컴파일러에게 GCC가 호출되는 디렉터리에 임시 파일(처리되지 않은 소스, 어셈블리 출력, 연결되지 않은 개체 파일)을 저장하도록 지시합니다.

x86 어셈블리를 피상적으로 이해하는 것은 모든 리소스를 활용할 수 있기 때문에 쉬울 것입니다.이러한 리소스 중 하나가 있습니다. http://www.cs.virginia.edu/ ~sk/cs216/sk/x86.sk.

또한 disasm과 gdb를 사용하여 컴파일된 프로그램이 무엇을 하는지 볼 수 있습니다.

저는 보통 새 장치를 사용할 때 프로세서 설명서를 검색한 다음 모르는 장치를 발견하면 작업 코드를 검색합니다.

인텔에서는 다행히도 작업 코드가 어느 정도 합리적입니다.파워피씨는 아닌 것 같아요. MIPS가 제일 좋았어요.MIPS를 위해서는 이웃의 작은 참고서를 빌렸고, PPC를 위해서는 검색하기 쉬운 PDF로 된 IBM 문서를 가지고 있었습니다. (그리고 인텔의 경우, 대부분은 제가 정확하게 추측하고 있는지 확인하기 위해 레지스터를 봅니다! 헤)

기본적으로 조립 자체가 쉽습니다.기본적으로 메모리와 레지스터 간의 데이터 이동, 레지스터의 데이터 작동, 프로그램 카운터 변경 등 세 가지 작업을 수행합니다.선택한 언어와 어셈블리 간의 매핑에는 약간의 학습(예: 가상 함수 호출을 인식하는 방법 학습)이 필요하며, 이를 위해 "통합된" 소스 및 분해 뷰(Visual Studio에서 볼 수 있는 것과 같은)가 매우 유용합니다.

고급 언어와 달리 어셈블리를 읽을 수 있는 것과 쓸 수 있는 것 사이에는 큰 차이가 없습니다.명령어는 CPU opcode와 일대일 관계가 있습니다. 코드 라인이 무엇을 하는지 이해하면서 건너뛸 수 있는 복잡성이 없습니다.("$var 인쇄"라고 적힌 줄을 볼 수 있고 화면에 출력하는 방법을 알거나 신경 쓸 필요가 없는 고급 언어와는 다릅니다.)

그래도 어셈블리어를 배우고 싶다면 제프 던트만의 "어셈블리 언어 단계별: Linux를 사용한 프로그래밍"이라는 책을 읽어 보십시오.

분명 입문서와 웹사이트가 있을 것입니다. 하지만 그것을 배우는 꽤 효율적인 방법은 실제로 인텔 레퍼런스를 얻은 다음 좋아하는 고급 언어로 간단한 것(정수 수학과 부울 논리와 같은)을 수행하고 결과 이진 코드가 무엇인지 알아보는 것입니다.

"독서 모임" ㅋㅋ (웃음)

런타임에 gdb를 따르는 것으로 시작하겠습니다. 무슨 일이 일어나고 있는지 더 잘 알 수 있습니다.하지만 아마 저만 그런 것 같아요.함수를 분해합니다(함수를 분해합니다). 그러면 한 단계씩 수행할 수 있습니다.

최적화를 확인하기 위해 이 작업을 수행하는 경우에는 걱정할 필요가 없습니다.

컴파일러는 잘 합니다.

어쨌든 당신은 그것이 무엇을 하고 있는지 이해할 수 없을 것입니다 (아무도 할 수 없습니다)

언급URL : https://stackoverflow.com/questions/2611359/learning-to-read-gcc-assembler-output

반응형