Quiz: x86 Assembly 1

sy46·2023년 7월 1일
0

dreamhack

목록 보기
8/20
post-thumbnail
post-custom-banner

0x400000 부터 0x400019까지의 데이터를 대응되는 아스키 문자로 변환하는 문제

[Register]
rcx = 0
rdx = 0
rsi = 0x400000
=======================
[Memory]
0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10
0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d
0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c
0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00
=======================
[code]
1: mov dl, BYTE PTR[rsi+rcx]
2: xor dl, 0x30
3: mov BYTE PTR[rsi+rcx], dl
4: inc rcx
5: cmp rcx, 0x19
6: jg end
7: jmp 1
  1. dl에 주소[rsi + rcx]의 값을 저장
    // BYTE이므로 1바이트만 저장 -> 처음에는 0x67, 그 다음에는 0x55 이렇게
  2. dl과 0x30을 xor하여 dl에 저장
  3. dl의 값을 주소[rsi + rcx]에 저장
  4. rcx의 값 1 증가
  5. rcx와 0x19를 비교하여
  6. 전자가 더 크면 종료
  7. 1로 점프

하나하나 계산해보니
0x57 0x65 0x6c 0x63 0x6f 0x6d 0x65 0x20
0x74 0x6f 0x20 0x61 0x73 0x73 0x65 0x6d
0x62 0x6c 0x79 0x20 0x77 0x6f 0x72 0x6c
0x64 0x21

이렇게 나온다..

물론 xor을 한 번에 계산해도 된다.

post-custom-banner

0개의 댓글