완료됨
산술 연산자 문제에 관한 질문
[Register]
rax = 0x31337
rbx = 0x555555554000
rcx = 0x2
=================================
[Memory]
0x555555554000| 0x0000000000000000
0x555555554008| 0x0000000000000001
0x555555554010| 0x0000000000000003
0x555555554018| 0x0000000000000005
0x555555554020| 0x000000000003133A
==================================
[Code]
1: add rax, [rbx+rcx*8]
2: add rcx, 2
3: sub rax, [rbx+rcx*8]
4: inc rax
이 코드에서 sub rax, [rbx+rcx*8]를 rcx에 8을 곱해서 16이 되고 rbx를 더하는 것이라고 이해를 했는데 연습 문제를 풀어보니 예상치도 못한 풀이가 나왔습니다. 저것이 왜 0x10인지 알려주실 수 있을까요?
#리버싱
#배경지식
작성자 정보
답변
1
믕믕이부하
대표 업적 없음
대괄호는 해당 값의 메모리 주소를 참조한다는 의미입니다.
그래서 [rbx+rcx*8]은 0x555555554000 + 0x4 * 8 값에 해당하는 0x555555554020 메모리 주소를 참조해서 rax에서 0x000000000003133A 만큼 빼는 명령이 되는겁니다.
0x2가 아닌 0x4인 이유는 add rcx,0x2로 2를 더해주기 때문이고 add rax, [rbx+rcx*8] 에서 rax 값이 3 더해졌기 때문에 0x000000000003133A 를 뺄 경우 0x10이 됩니다.