nesquitto.tistory.com/95?category=423447
기본적인 내용은 위의 링크에 정리되어 있으며, 여기도 비슷한 내용이 있습니다.
위의 링크에서 operand는 함수와 인자의 관계에서 인자에 속한다고 설명했습니다.
이 인자는 어떻게 사용하는지 간단하게 설명하려고 합니다.
add rax 0x1234
rax의 값에 0x1234를 더함
add rax rbx
rax의 값에 rbx의 값을 더함
add rax [0x1234]
rax의 값에 0x1234 주소의 값을 더함
기본적으로 위와 같이 사용됩니다.
Operand로 올 수 있는 값은 다음과 같습니다.
1. 상수값: 일반적인 상수(0x1337, 0xbeef)의 값이 사용됩니다.
2. 레지스터: 레지스터(rax, rbx...)에 들어있는 값이 사용됩니다.
3. 주소값: 레지스터에 저장된 메모리 주소에 들어있는 값이 사용됩니다. C언어의 포인터 개념과 비슷합니다.
레지스터 -> 메모리 주소 -> 참조값 과 같은 형식입니다.
mov [rcx],rax ; *rcx = rax
-mov의 결과로 rax에 들어있는 값을 rcx 레지스터에 들어있는 주소값의 메모리에 저장합니다.
mov byte ptr [rcx],al ; *rcx = al
-mov의 결과로 al에 들어있는 값을 rcx 레지스터에 들어있는 주소값의 메모리에 1바이트만 저장합니다.
-al은 ax레지스터가 16bit일 때 뒷부분 8bit를 가리킵니다. 앞부분 8bit는 ah라고 표현합니다.
mov dword ptr [rbp-1Ch],eax
-mov의 결과로 eax에 들어있는 값을 rbp에서 1Ch만큼 떨어진 위치의 메모리 주소에 4바이트만 저장합니다.
mov byte ptr [rdi+rcx*4+3],0xFF
-mov의 결과로 rdi+rcx*4+3의 위치의 메모리에 1바이트 값인 0xff가 저장됩니다.
끝!
'Hacking-기초 > 알쓸신잡_해킹' 카테고리의 다른 글
Intel에서의 스택 구조 (0) | 2020.09.07 |
---|---|
Assembly 문법? 조금 정리 (0) | 2020.09.02 |
리틀 엔디안, 빅 엔디안 (0) | 2020.08.31 |