ARM 기본 프로그램 Hello
#include <stdio.h>
int main(int argc, char* argv[]){
printf("Hello
");
return 0;
}
기본 프로그램 코드는 다음과 같습니다.1 EXPORT main
2 main
3 var_C= -0xC
4 var_8= -8
5 STMFD SP!, {r11, LR}
6 ADD R11, SP, #4
7 SUB SP, SP, #8
8 STR R0, [R11,#var_8]
9 STR R1, [R11,#var_c]
10 LDR R3, =(aHelloArm - 0x8300)
11 ADD R3, PC, R3 ; "Hello"
12 MOV R0, R3 ; s
13 BL puts
14 MOV R3, #0
15 MOV R0, R3
16 STB SP, R11, #4
17 LDMFD SP!, {R11, PC}
정의:
ARM 어셈블리 명령으로 구성된 어셈블리 코드를 원본 프로그램의 어셈블러 코드라고 합니다.
역방향 원생 프로그램은 이러한 어셈블리 코드를 읽으며 원생 프로그램의 기능과 절차를 이해하는 것이다.
첫 번째 줄의 "EXPORT main"은 이main 함수식이 프로그램에서 내보낸 것을 나타낸다.
두 번째 줄의main은 함수의 이름입니다.(JDA Pro는 원본 프로그램의 모든 함수와 해당 이름을 자동으로 인식합니다.)
세 번째 줄은 IDA Pro가 식별하는 스택 변수입니다.IDA Pro는 함수에 할당된 스택 공간을 통해 스택 변수를 식별합니다.
이 인스턴스는 "SUB SP, SP, #8"행의 명령에 따라 수행됩니다.
여기서 SUB는 명령 조작 코드로 감법 조작을 나타내고 SP는 창고 명령 레지스터이다.
이 명령의 의미는 SP 레지스터의 값을 8에서 빼서 SP 레지스터에 다시 부여하는 것입니다.
퇴고에 8바이트의 공간을 분배하는 역할, 즉 퇴적 변수 varC와 var8의 공간.
5-17줄은main 함수 명령 부분이다.전체 코드는 8개의 지령과 관련이 있는데, 다음은 그것들의 기능을 간단하게 소개한다.
5행의 STMFD와 17행의 LDMFD는 스택 주소 지정 명령입니다.
STMFD 명령은 레지스터의 값을 창고에 눌러 넣는 데 사용됩니다.
이 실례는 원시 레지스터의 값을 보호하기 위해서입니다. (이 레지스터들은 아래에서 사용할 수 있기 때문에, 이 레지스터의 값은 사용하기 전에 저장하고 프로그램이 돌아올 때 복원해야 합니다.)
LDMFD 명령은 스택에서 레지스터의 값을 복원하는 데 사용되며 STMFD와는 정반대입니다.
6행의 ADD와 16행의 SUB는 산술 명령입니다.
ADD는 덧셈 명령으로'ADD R11, SP, #4'는 SP 레지스터의 값을 4를 더한 후 R11 레지스터에 부여하는 것이다.
SUB는 마이너스 명령으로, 16행의 코드 기능은 6행과 정반대다.
8-9행의 STR 및 10행의 LDR은 스토리지 액세스 명령입니다.
메모리란 메모리 주소를 가리키며 통상적으로 메모리 단원 또는 메모리 단원이라고도 부른다.
스토리지에 대한 액세스에는 스토리지에서 데이터를 읽고 쓰는 작업이 포함됩니다.
ARM 명령에서 스토리지는 중괄호 "[]"쌍으로 표시됩니다.
STR은 메모리 명령을 쓰는 것이고,
예를 들어 "STR R0, [R11, #var 8]"은 R0 레지스터의 값을 스택 변수 var 에 저장합니다.8 중,
9행의 STR R1, [R11, #var C]는 R1 레지스터의 값을 스택 변수 var 에 저장합니다.C중.
12번째 행의 MOV는 데이터 처리 명령입니다.
이것은 레지스터 간의 데이터 전송에 사용된다. 예를 들어 'MOV R0, R3' 은 R3 레지스터의 값을 R0 레지스터에 부여하는 것을 나타낸다.
13번째 행의 BL은 링크가 있는 점프 명령입니다.
다른 프로그래밍 언어에서 하위 프로그램 호출과 같은 기능을 완성합니다. 예를 들어 'BL puts' 는puts 함수를 호출하는 것입니다.
puts는 표준 입력 출력 함수에서 printf의 실현을 위해 표준 출력 장치에 지정한 내용을 출력하는 역할을 하고 이 실례에서 출력된 내용은'Hello'문자열이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.