카테고리 없음

Quiz: x86 Assembly 2Question.1

미숫가루빙수 2024. 9. 15. 22:51

 

코드 분석

 

  • mov dL, BYTE PTR[rsi+rcx]: rsi는 0x400000으로 주어졌으므로, 이 명령어는 rcx 레지스터 값을 기준으로 메모리 주소 0x400000 + rcx에 있는 바이트를 dL에 저장함
  • xor dL, 0x30: dL에 저장된 값을 0x30(48)과 XOR 연산하여 변환함
  • mov BYTE PTR[rsi+rcx], dL: 변환된 값을 다시 같은 메모리 위치로 저장함
  • inc rcx: rcx 값을 1 증가시킴
  • cmp rcx, 0x19: rcx 값을 0x19(25)와 비교하여, rcx가 25일 때 종료됨
  • 루프를 통해 0x400000부터 0x400019까지의 메모리를 처리함

 

 

0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10
0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x55 0x5d
0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c
0x400018 | 0x54 0x11

메모리의 상태

 

각 메모리 값에 대하여 XOR 0x30 연산을 수행하면 정답이 나옴

 

 

0x67 XOR 0x30 = 0x57 ('W')

0x55 XOR 0x30 = 0x65 ('e')

0x5c XOR 0x30 = 0x6c ('l')

0x53 XOR 0x30 = 0x63 ('c')

0x5f XOR 0x30 = 0x6f ('o')

0x5d XOR 0x30 = 0x6d ('m')

0x55 XOR 0x30 = 0x65 ('e')

0x10 XOR 0x30 = 0x20 (' ') (공백 문자)

0x44 XOR 0x30 = 0x74 ('t')

0x5f XOR 0x30 = 0x6f ('o')

0x10 XOR 0x30 = 0x20 (' ') (공백 문자)

0x51 XOR 0x30 = 0x61 ('a')

0x43 XOR 0x30 = 0x73 ('s')

0x55 XOR 0x30 = 0x65 ('e')

0x5d XOR 0x30 = 0x6d ('m')

0x52 XOR 0x30 = 0x62 ('b')

0x5c XOR 0x30 = 0x6c ('l')

0x49 XOR 0x30 = 0x79 ('y')

0x10 XOR 0x30 = 0x20 (' ') (공백 문자)

0x47 XOR 0x30 = 0x77 ('w')

0x5f XOR 0x30 = 0x6f ('o')

0x42 XOR 0x30 = 0x72 ('r')

0x5c XOR 0x30 = 0x6c ('l')0x54 XOR 0x30 = 0x64 ('d')

0x11 XOR 0x30 = 0x21 ('!')

 

 

 

정답은 "Welcome to assembly world!"