1. ์–ด์…ˆ๋ธ”๋Ÿฌ

  • ์–ด์…ˆ๋ธ”๋Ÿฌ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

  • Section ๊ตฌ๋ถ„์ด ์žˆ๋‹ค.

    • .data : ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
      • ๋ณ€์ˆ˜์˜ ์„ ์–ธ ๋ฐ ์‚ฌ์šฉ
      • ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • .text : ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • .bss : ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
#include <iostream>
using namespace std;

char str[] = {'1','2','3','4','5'}; // .data ์˜์—ญ์— ์ €์žฅ
int main() {
    char str2[] = {'1','2','3','4','5'}; // stack ์˜์—ญ์— ์ €์žฅ
    cout << str << endl;
    cout << str2 << endl;
    return 0;
}
12345
12345๏ฟฝ%
  • str์€ ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— .data ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
  • str2๋Š” stack ์˜์—ญ์— ์ €์žฅ๋œ ๋ฌธ์ž ๋ฐฐ์—ด์ด๊ณ  ์šฐ์—ฐํžˆ escape null์„ ์ฐพ์„๋•Œ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

8๋น„ํŠธ : 1๋ฐ”์ดํŠธ 16๋น„ํŠธ : 2๋ฐ”์ดํŠธ: 1์›Œ๋“œ 32๋น„ํŠธ : 4๋ฐ”์ดํŠธ: 1๋”๋ธ”์›Œ๋“œ 64๋น„ํŠธ : 8๋ฐ”์ดํŠธ: 1์ฟผ๋“œ์›Œ๋“œ

  • ๋ ˆ์ง€์Šคํ„ฐ์˜ ํฌ๊ธฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 64๋น„ํŠธ ์šด์˜์ฒด์ œ์—์„œ 64๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.(8๋ฐ”์ดํŠธ)
  • ์ข…๋ฅ˜๋Š” ์ด 16๊ฐœ์ด๋‹ค.
    • 64๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ : RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14, R15
    • 32๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ : EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
    • 16๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ : AX, BX, CX, DX, SI, DI, BP, SP
    • 8๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ : AL, BL, CL, DL, SIL, DIL, BPL, SPL

1.1. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋ช…๋ น์–ด

  • ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋ช…๋ น์–ด๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

  • ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋ช…๋ น์–ด๋Š” ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด์™€ 1:1 ๋Œ€์‘๋œ๋‹ค.

  • mov : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ช…๋ น์–ด

  • add : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋”ํ•˜๋Š” ๋ช…๋ น์–ด

  • sub : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋นผ๋Š” ๋ช…๋ น์–ด

  • mul : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๊ณฑํ•˜๋Š” ๋ช…๋ น์–ด

  • div : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋‚˜๋ˆ„๋Š” ๋ช…๋ น์–ด

  • inc : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ช…๋ น์–ด

  • dec : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด

  • cmp : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • jmp : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • je : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • jne : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • jg : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • jge : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • jl : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • jle : ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋ช…๋ น์–ด

  • call : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ช…๋ น์–ด

  • ret : ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋ช…๋ น์–ด

  • push : ์Šคํƒ์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ช…๋ น์–ด

  • pop : ์Šคํƒ์— ๊ฐ’์„ ๊บผ๋‚ด๋Š” ๋ช…๋ น์–ด

  • lea : ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ช…๋ น์–ด

  • and : ๋…ผ๋ฆฌ๊ณฑ์„ ํ•˜๋Š” ๋ช…๋ น์–ด

  • or : ๋…ผ๋ฆฌํ•ฉ์„ ํ•˜๋Š” ๋ช…๋ น์–ด

  • xor : ๋ฐฐํƒ€์  ๋…ผ๋ฆฌํ•ฉ์„ ํ•˜๋Š” ๋ช…๋ น์–ด

  • not : ๋…ผ๋ฆฌ๋ถ€์ •์„ ํ•˜๋Š” ๋ช…๋ น์–ด

  • shl : ์™ผ์ชฝ ์‹œํ”„ํŠธ๋ฅผ ํ•˜๋Š” ๋ช…๋ น์–ด

  • shr : ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ๋ฅผ ํ•˜๋Š” ๋ช…๋ น์–ด

  • nop : ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๋ช…๋ น์–ด

db: Define Byte - ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. dw: Define Word - ์›Œ๋“œ(2๋ฐ”์ดํŠธ) ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. dd: Define Doubleword - ๋”๋ธ”์›Œ๋“œ(4๋ฐ”์ดํŠธ) ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. dq: Define Quadword - ์ฟผ๋“œ์›Œ๋“œ(8๋ฐ”์ดํŠธ) ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.