[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] (rsi+rcx 주소에서 1byte만큼 가져옵니다. (0x400000의 경우 0x67))
2: xor dl, 0x30 (dl과 0x30 xor 진행)
3: mov BYTE PTR[rsi+rcx],  (dl을 1byte(rsi+rcx)에 입력)
4: inc rcx (rcx 1증가)
5: cmp rcx, 0x19 (rcx, 0x19 비교)
6: jg end (rcx가 클 시, end 그렇지 않으면 7번 라인 이동)
7: jmp 1

 

핵심

 

5번 라인. rcx, 0x19를 비교합니다.

6번 라인. rcx가 0x19보다 클 시, 종료됩니다. 그렇지 않으면, 7번 라인으로 이동합니다.

계속해서 rcx는 20이 되도록 증가합니다.

 

0x400000 ~ 0x400019 부분마다 0x30을 XOR을 하며 진행합니다.