Security/시스템 해킹(PWN, System)

내가 항상 헷갈리던 어셈블리 mov와 lea의 차이

그믐​ 2022. 2. 18. 15:33
반응형

우선

QWORD PTR [주소] : 주소로부터 데이터를 8바이트 만큼 참조

DWORD는 4바이트 WORD는 2바이트

 

WORD = 16비트이므로

DWORD(double)은 4바이트

QWORD(quad)는 8바이트이다.

 

dream hack

MOV


mov opcode는

mov dst, src로 사용한다.

여기서 scr에 있는 값을 대입한다. C에서 *을 사용해서 대입하는 연산자라고 이해하면 될 것 같다.

그래서 mov QWORD PTR[rdi], rsi

이런 식으로 쓴다면, rdi주소 값에 rsi를 대입한다.(8바이트)

 

LEA


lea opcode는

lea dst, src로 사용한다.

lea에서는 src의 유효 주소 EA(Effective Address)를 저장한다고 한다.

그러므로 lea rsi, [rbx+8*rcx] 이렇게 쓴다면 rbx+8*rcx라는 주소 값 자체를 rsi에 대입한다는 것이다.

 

 

 

드림핵에서 아래 예제를 통해 이해할 수 있다.

 

1. mov에서는 rbx+8에 있는 값을 rax에 대입하는 것이다. 마치 포인터에 *이 붙여진 대입 연산자이다.

그래서 rbx+8에 있는 값 0xCOFFEE가 rax에 대입된다.

 

2. lea에서는 rbx+8의 값을 참조하지 않고 그냥 주소를 대입한다.

그래서 rbx+8인 메모리 주소, 0x401A48이 rax에 대입된다.

 

이렇게 헷갈리던 mov와 lea의 차이를 적어둔다.

반응형