Diassembly 분석

kenGwon·2024년 2월 13일
0

[Embedded Linux] BSP

목록 보기
8/36

분석을 위해서는 교수님 PPT "DSA202v01_ARM프로세서의_이해.ppt"의 내용을 구석구석 참고해야 한다.

Disassembly 분석

디샘블이라는 것은 기계어를 다시 어셈블리어로 바꾸는 것을 말한다.
그래서 우리는 .o 확장자의 오브젝트 파일에 대해서 디샘블을 할 것이다.
아래는 디셈블 하는 코드이다.

~/pi_bsp/u-boot/arch/arm/cpu/armv7$ arm-linux-gnueabihf-objdump -S start.o > start.txt

화면에 출력될 것을 txt 파일로 저장하겠다는 것이다.

위 명령어로 생성된 start.txt파일에는 어셈블리어가 기계어로 어떻게 번역되었는지에 대한 정보가 쫙 담겨있다.

215번째 라인을 보면 우리가 작성한 부분에 대한 것을 확인할 수 있다. 여기서 우리가 해석해 볼 것은 232번째 라인의 "mov r2, #8"가 번역되어 생성된 기계어인 "e8: e3a02008"인 것이다.

mov r2, #8 --> 0xe3a02008

  • mov 뒤에 조건을 나타내는 것이 없다는 것은 따로 조건필드를 사용하지 않고 항상 실행하겠다는 것을 의미한다. (만약 조건이 붙었다면 bne처럼 접미사가 붙었을 것이다: b not equal)
  • 즉 무조건 r2에 #8을 저장하라는 것이다. 접미사가 없는 경우에는 맨 뒤에 AL(always)라는 조건필드 니모닉 코드가 생략되어 있는 상태이다.


  • "0xe3a02008" 를 이진수로 나타내면,
    "1110 0011 1010 0000 0010 0000 0000 1000" 이다.
  • 위 이진수를 바탕으로 조건필드를 계산해보자.
  • 첫번째 그림을 바탕으로 첫번째 생략되어 있던 AL이 1110이라는 조건필드로 들어갔다는 것을 알 수 있다.
  • 그럼 이제 나머지 영역에 대해서 두번째 그림으로 기계어를 해석해보겠다.
  • 우선 조건필드 위에 오는 0011을 두번째 그림 어디 부분에 해당할 수 있는지 유추해보겠다.
    • 모든 가능성 중에서 0011이 포함될 수 있는 명령어는 가장 처음에 있는 "Data processing/PSR Transfer"밖에 없다는 것을 알 수 있다.
    • 그럼 이제 그 "Data processing/PSR Transfer" 아래에 뭐가 있는지를 알아야 한다.
    • 그래서 위 그림에서 Data processing 명령 부분에 있는 여러개의 명령중에 하나일 것이라는 유추가 가능하다. (우리는 정답을 알고 있는데, 정말로 MOV가 있는 것을 확인할 수 있다.)
      • 그럼 이제 데이터처리 명령어 구조 안에서 그 다음 값들이 뭘 의미하는지 유추해보자.

      • 데이터 처리 명령어의 구조를 참조하여 아직 해석이 필요한 나머지 부분에 대한 해석을 시작하겠다.
      • 1110 "001"1 1010 0000 0010 0000 0000 1000 여기서 우리의 코드가 OP2 immediate 상수에 해당한다는 것을 확인할 수 있다.
      • 그러면 이제 OpCode에 해당하는 "1 101"이 어떤 명령에 해당하는지를 알아봐야 한다.
        • 위 그림을 통해 우리의 명령어가 MOV에 해당한다는 것을 알게 되었다.
        • 그러면 이제 unset/set을 표현하는 set condition code가 0이라는 것을 통해 우리의 코드가 set condition이라는 것을 알 수 있다.
          • 그러면 이제 이어서 남은 부분인 "0000 0010 0000 0000 1000"을 해석해야 한다. `
          • 우리는 Source register를 사용하지 않았기 때문에 0000이다.
          • 우리는 Destination register로 R2를 지정했기 때문에 0010이 들어왔다.
          • 그러면 이제 나머지 0000 0000 1000은 Operand2의 값으로 들어온 상수 8을 의미하는 부분이 되겠다.

subs r3,r3,#1 --> 0xe2533001

s라는 접미사를 붙였다는 것은 상태 레지스터에 반영하겠다는 뜻이다. 그래서 아래 해독결과를 보면 set condition code가 1로 설정되어있는 것을 알 수 있다.

  • 0xe2533001 = 1110 0010 0101 0011 0011 0000 0000 0001
  • 1110: 조건필드 AL(always)
  • 001: OP2 immediate 상수
  • 0 010: OpCode
  • 1: 'set' Condition Code

    위 그림을 참고하여 명령어가 SUB라는 것을 알 수 있다.
  • 0011: r3
  • 0011: r3
  • 0000 0000 0001: #1
profile
스펀지맨

0개의 댓글