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