[Assembly] 데이터 이동

2024. 9. 20. 18:26·CS/Computer Architecture
728x90
반응형

mov

mov operand 1 operand 2
mov eax 1

eax 레지스터에 값 1을 넣는 코드

  • operand2를 operand1로 이동한다
  • operand1 : 레지스터 or 메모리 (상수는 불가능함)
  • operand2 : 상수 or 레지스터 or 메모리
  • 두 피연산자의 크기가 일치해야함
  • 두 피연산자에 동시에 메모리가 올 수 없음

메모리는 TYPE PTR [레지스터 or 상수]로 표기하는데, TYPE에는 BYTE(1), WORD(2), DWORD(4) QWORD(8)이 올 수 있다.

 

*mov는 "값"과 연관이 있다고 생각하면 쉬워짐

 

Example 

mov rax, 0x1 : rax 레지스터에 0x1을 대입한다

mov rax, rbx : rbx 레지스터의 값을 레지스터에 대입한다

mov QWORD PTR [0x400000], rax : rax 레지스터의 값을 0x40000에 대입한다.

mov QWORD PTR [rcx+8], rax : rax레지스터의 값을 rcx+8 주소에 대입한다.

mov al, BYTE PTR [0x400000] : 0x400000이 가리키는 주소의 1바이트만큼 레지스터 al에 대입한다.

 

 

lea

lea operand 1 operand 2
lea eax DWORD PTR [eax]

eax 레지스터의 "값"에 eax의 "주소"를 넣는다

 

  • operand2의 주소를 operand1로 이동한다
  • operand1 : 레지스터
  • operand2  : 메모리
  • 주소를 연산해서 가져올 수 있음
  • operand2의 유효주소 (Effective address)를 저장하여 사용

*lea는 "주소"와 연관이 있다고 생각하면 쉬워짐

 

 

mov vs lea

mov는 주소에 있는 값을 옮기고 lea는 주소 자체를 옮긴다

 

  • mov eax, ebx+ecx : 성립하지 않는 문법

 

  • mov eax, DWORD PTR [ebx + ecx]
  • lea eax, DWORD PTR [ebx + ecx]

이 두개는 완전 다른 의미를 가진다.

mov eax, DWORD PTR [ebx + ecx] lea eax, DWORD PTR [ebx + ecx]
1. ebx의 값 + ecx의 값을 연산함
2. 메모리에서 그 주소에 대응하는 값을 읽음
3. 그 값을 eax에 저장
1. ebx의 값 + ecx의 값을 연산함
2. eax에 ebx + ecx 값 자체를 대입함
*이 때 ebx+ecx의 값은 메모리에 대응한다.

 

 

 

 

 

 

 

해당 내용을 통해 보면

 

mov rax, [rbx+8]을 실행한 후, rax에 저장되어 있는 값은

0xC0FFEE이다

 

lea rax, [rbx+8]을 실행한 후, rax에 저장되어 있는 값은

0x401A48이다

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > Computer Architecture' 카테고리의 다른 글

함수 호출 규약 (x86, x64)  (0) 2025.02.10
[Assembly] 산술 연산  (0) 2024.09.27
Static Link vs Dynamic Link  (0) 2024.09.05
함수의 프롤로그 & 에필로그  (0) 2024.08.22
Register  (1) 2024.08.16
'CS/Computer Architecture' 카테고리의 다른 글
  • 함수 호출 규약 (x86, x64)
  • [Assembly] 산술 연산
  • Static Link vs Dynamic Link
  • 함수의 프롤로그 & 에필로그
min_zu
min_zu
  • min_zu
    민주제도
    min_zu
  • 전체
    오늘
    어제
    • ._. (176)
      • AI (2)
        • DeepLearning (2)
        • CS231n (0)
      • Web (2)
        • ReactJS (0)
      • CS (83)
        • OS (7)
        • Data Structure (23)
        • Computer Architecture (8)
        • Computer Network (20)
        • Algorithm (25)
      • Linux (3)
        • KaliLinux (0)
        • Docker (1)
      • Hacking (83)
        • Write Up (25)
        • Pwnable (13)
        • Reversing (2)
        • Cryptography (12)
        • Web Hacking (4)
        • Window (6)
        • Network (7)
        • Web3 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    WinAFL
    OS
    Web
    DataStructure
    Linux
    DeepLearning
    Sort
    AI
    Graph
    UTM
    Mac
    ComputerArchitecture
    Search
    Tree
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min_zu
[Assembly] 데이터 이동
상단으로

티스토리툴바