완료됨
어셈블리어 처음 배운는데 sub rax, [rbx+rcx*8] 이게 무슨 말인지 모르겠습니다...

[Register]
rax = 0x31337
rbx = 0x555555554000
rcx = 0x2

[Code]
1: add rax, [rbx+rcx*8]
2: add rcx, 2
3: sub rax, [rbx+rcx*8]

2번에서 rcx에 2를 더한다는 말인데 0x2에 2를 어떻게 더하면 되는건가요
그냥 간단하게 0x4라고 생각해도 되는 건가요?

3번 [rbx+rcx*8]에서 *8 이게 무슨 말인지 전혀 모르겠어요 곱하기 인가요....?

숫자를 모두 16진수로 바꾼 다음에 생각해 봐야 하는 걸까요?

정말 아무리 생각해보고 구글링 해도 *8 이건 나오질 않아 질문글 올려봅니다....

#어셈블리 #8
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
Sechack
2024 Invitational Contenders

저런 형태는 보통 C언어에서 배열을 나타냅니다. long long과 같이 자료형의 크기가 8이면 어셈블리 상에서는 인덱스가 1증가할때마다 8byte씩 앞으로 가야 하니까 인덱스에 8을 곱해주는겁니다. 위 어셈블리의 경우에는 rcx가 배열의 인덱스를 저장하고 rbx가 배열의 시작 주소를 저장하고 rax가 결과값을 저장한다고 보시면 됩니다.

2022.09.19. 08:18