ARM 어셈블리 코드 작성


20

Raspberry Pi를 얻은 후 ARM 어셈블리 코드 작성 방법을 배우고 싶었습니다. 내 질문은 무엇을 시작해야합니까? 나는 이미 컴파일러가 설치되어 있다고 가정하지만 그것이 무엇인지 모르겠습니다 (gcc)? 도움을 주셔서 감사합니다!


여기에 조립 ARM에 대한 또 다른 (무료) 책 : yurichev.com/writings/RE_for_beginners-en.pdf은
데니스 Yurichev

답변:


19

작성하고자하는 어셈블러의 양에 따라 다릅니다. C 코드에 포함 된 작은 스 니펫 만 작성 gcc하려면 실제로 찾고있는 것보다 . asmC 에서 지시문 을 사용하는 방법의 예는 다음의 인라인 asm 참조를 참조하십시오. ARM GCC 인라인 어셈블러 설명서

반면에 작은 스 니펫 이상을 작성하려면 전체 어셈블러를 사용하는 것이 좋습니다. 이 중 하나로 사용할 수 있습니다 as, gas또는 둘 다 (별칭).

마지막으로 ARM 명령어 세트에 대해 조금 배워야합니다. ARM1176JZF-S 기술 참조 매뉴얼에 편리한 참조 자료가 있습니다 .

NB RPi가 armv6 명령어 만 지원하는 것을 기억하십시오. 따라서 armv7의 어떤 것도 사용하지 마십시오.

행운을 빕니다!! :)


4

오래 전에 ARM 어셈블리 코드로 모험을 시작했으며 여기에 내 리소스가 있습니다.

  • 케임브리지 대학교는 Baking Pi 에서 매우 훌륭한 튜토리얼을 발표했습니다 . 여기에는 고유 한 OS 용 템플릿, 모든 자습서에 대한 전체 코드 예제 및 코드 작성 및 실행 방법에 대한 모든 지침이 포함되어 있습니다.
  • 또한이 무거운 책은 모든 기반을 다루어야합니다. ARM 시스템 개발자 안내서 .

3

커맨드 라인 인터페이스에 익숙하지만 GUI의 편의에 저항 할 수는 없습니다. 얼마 전, CodeBlocks IDE를 사용하여 Raspberry Pi에서 ARM 어셈블리 언어 프로그램을 개발할 수 있음을 발견했습니다. 그래서 튜토리얼을 작성하고 Mazidi ARM Assembly 책 웹 사이트에서 작성한 Raspberry Pi 어셈블리 프로그래밍 튜토리얼에 추가했습니다.

http://www.microdigitaled.com/ARM/ARM_ASM_books.htm

웹 사이트에서 "Raspberry Pi GUI를 사용한 ARM 어셈블리 프로그래밍"링크를 클릭하십시오.

도움이 되었기를 바랍니다.


1

GCC가 기본적으로 설치됩니다. Raspberry Pi를 처음 사용하는 경우 ARM 어셈블리보다 쉬운 프로그래밍 언어를 살펴 보는 것이 좋습니다. 어셈블리 용 IDE가 없으므로 텍스트 편집기를 사용하여 터미널을 통해 어셈블리해야합니다. 사용 편의성을 위해 Gedit를 권장합니다. 어셈블리의 구문 강조를 얻으려면 github, 특히 shinyquagsire23의 페이지로 이동해야했습니다. 매우 예쁘다. 내가 찾은 최고의 자료는 Bruce Smith의 "Raspberry Pi Assembly Language : Raspbian Beginners"입니다. 아마존에서 찾을 수 있습니다. 그는 내가 찾은 가장 명확하고 간단한 방법 중 하나로 조립을 설명합니다.


1

실행 가능한 예제로 학습

나는 노력하고있다 : https://github.com/cirosantilli/arm-assembly-cheat

풍모:

  • QEMU 사용자 모드를 사용하는 Linux 호스트에서 정확히 동일한 어셈블리를 실행할 수 있으므로 Pi에서 네이티브로 가기 전에 호스트에서 더 빨리 물건을 시험해 볼 수 있습니다.
  • ARMv7 및 ARMv8을 모두 포함합니다.
  • 호스트와 네이티브 모두에서 좋은 GDB 설정
  • 실패한 조립 라인 번호를 나타내는 어설 션이 있음
  • IO 용 C 표준 라이브러리를 사용하여 이론적으로 OS를 이식 가능하게 printf하며 다음과 같은 장점을 쉽게 재사용 할 수 있습니다.memcpy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.