temp - hochan222/Everything-in-JavaScript GitHub Wiki

libasm

c

โ˜• About libasm

๐Ÿ‘‰ An assembly (or assembler) language, often abbreviated asm, is a low-level programming language for a computer, or other programmable device, in which there is a very strong (but often not one-to-one) correspondence between the language and the architectureโ€™s machine code instructions. Each assembly language is specific to a particular computer architecture. In contrast, most high-level programming languages are generally portable across multiple architectures but require interpreting or compiling. Assembly language may also be called symbolic machine code.

Environment

Intel vs AT&T APPLY Systemcall

x86_64 macos, intel, .s

nasm ๋‹ค์šด๋กœ๋“œ

brew install nasm
Linux
   - nasm -f elf64 file.s -o file.o
Mac
   - nasm -f macho64 file.s -o file.o

Assembler

๊ฐ ๊ฐœ์ธ์šฉ ์ปดํ“จํ„ฐ์—๋Š” ์ปดํ“จํ„ฐ์˜ ์‚ฐ์ˆ , ๋…ผ๋ฆฌ ๋ฐ ์ œ์–ด ํ™œ๋™์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋งˆ์ดํฌ๋กœ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์„œ ์ œํ’ˆ๊ตฐ์—๋Š” ํ‚ค๋ณด๋“œ์—์„œ ์ž…๋ ฅ ๋ฐ›๊ธฐ, ํ™”๋ฉด์— ์ •๋ณด ํ‘œ์‹œ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ•œ ์ง€์นจ ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ค. ์ด ๋ช…๋ น์–ด ์„ธํŠธ๋ฅผ ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์„ธ์„œ๋Š” ๋น„ํŠธ ์‹œํ€€์Šค ์ธ 1 ๋˜๋Š” 0 ์ธ ๊ธฐ๊ณ„์–ด ๋ช…๋ น์–ด๋งŒ ์ดํ•ดํ•œ๋‹ค. ๊ธฐ๊ณ„์–ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์„๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ์œ„ํ•œ ์ผ๋ จ์˜ ๋ช…๋ น์ธ ํŠน์ • ํ”„๋กœ์„ธ์„œ ์ œํ’ˆ๊ตฐ์„ ์œ„ํ•ด ์ €์ˆ˜์ค€ ์–ธ์–ด๊ฐ€ ๊ฐœ๋ฐœ๋˜์—ˆ๋Š”๋ฐ, ์ด ์–ธ์–ด๋ฅผ ์–ด์…ˆ๋ธ”๋Ÿฌ (์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด)๋ผ๊ณ  ํ•œ๋‹ค.

Assembler๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ 

  • ํŠน์ • ํ”„๋กœ์„ธ์„œ์—๋งŒ ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋‚˜ I/O ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋™์ž‘์„ ๋ชจ๋‘ ์ œ์–ดํ•˜๊ณ , ์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ๊ฐํ•œ ๋Œ€๋กœ ์›€์ง์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜ ๋“ฑ์—์„œ ๋ฐ๋“œ๋ฝ๊ณผ ๊ฐ™์€ ์ผ์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ฝ”๋“œ ๋™์ž‘์„ ๋งค์šฐ ์ •ํ™•ํ•˜๊ฒŒ ์ปจํŠธ๋กค ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž์‹ ์˜ ํ•˜๋“œ์›จ์–ด ์„ค์ •์—๋งŒ ์™„๋ฒฝํ•˜๊ฒŒ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฒ”์šฉ์ ์ธ ํ˜ธํ™˜์„ ์œ„ํ•œ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค.)
  • ์šด์˜ ์ฒด์ œ, ํ”„๋กœ์„ธ์„œ ๋ฐ BIOS์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๊ธฐํƒ€ ์žฅ์น˜์—์„œ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋ช…๋ น์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์ด ์™ธ๋ถ€ ์žฅ์น˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

Data size

  • word: 2-byte data element
  • double word: a 4-byte (32-bit) data element
  • quadword: an 8-byte (64-bit) data element
  • paragraph: 16-byte (128-bit) area
  • kilobyte: 1024 bytes
  • megabyte: 1,048,576 bytes

word: ์ปดํ“จํ„ฐ ์„ค๊ณ„์‹œ ์ •ํ•ด์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ณธ ๋‹จ์œ„

์ปดํ“จํ„ฐ ๊ตฌ์กฐ

ํฐ ๋…ธ์ด๋งŒ์€ ์ปดํ“จํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ CPU(Central Processing Unit)์™€ ๋ฉ”๋ชจ๋ฆฌ(memory)์˜ ๋‘๊ฐœ์˜ ์ฃผ์š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ตฌ์„ฑํ–ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ "์—ฐ์‚ฐ"๊ณผ "์ €์žฅ"์˜ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์—ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋งŒ ๊ฐ€์ง€๊ณ ๋Š” ์•„๋ฌด๋Ÿฐ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ๋‹จ์ง€ ๋น„ํŠธ์˜ ๋‚˜์—ด ๋ฟ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ๋ชจ ์žˆ๋Š” ์ •๋ณด๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๋“ค์ด๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ์˜ฎ๊ธฐ๋Š” ๋“ฑ์˜ ์ผ์„ ํ•ด์•ผ๋งŒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ผ์€ CPU๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.

CPU

CPU๋Š” ํ•œ๋ฒˆ์˜ ์‹œ๊ฐ„์— ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ถ€ํ„ฐ ๋ช…๋ น(instruction)์„ ์ฝ์–ด ๋“ค์ด๊ณ  ์ด๊ฒƒ๋“ค์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด๊ฒƒ์„ fetch-execute cycle ๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด ๋ช…๋ น์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์š”์†Œ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

  • Program Counter
  • Instruction Decoder
  • Data bus
  • General-purpose register
  • Arithmetic and logic unit

program counter ๋Š” ์ปดํ“จํ„ฐ์—๊ฒŒ ๋‹ค์Œ ์ˆ˜ํ–‰ํ•ด์•ผ๋  ๋ช…๋ น(instruction)์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ž…์žฅ์—์„œ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์— ์˜ํ•ด์„œ๋Š” ์–ด๋– ํ•œ ์ฐจ์ด๋„ ์—†๋‹ค. ํ•ด์„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ๋ฟ์ด๋‹ค. program counter์€ ์‹คํ–‰๋  ๋‹ค์Œ ๋ช…๋ น์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

instruction decoder ๋Š” ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ•˜๊ธฐ๋“ฑ ๋ฐ์ดํ„ฐ ์ด๋™๊ณผ ๊ฐ™์€ ์ˆ˜ํ–‰ํ•ด์•ผ๋  ๋ช…๋ น์˜ ํ˜•์‹์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์ˆ˜ํ–‰์€ ๋ช…๋ น๋“ค๊ณผ ๋ช…๋ น์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์˜ ๋ชฉ๋ก์— ์˜ํ•ด์„œ ์ด๋ฃจ์–ด ์ง„๋‹ค.

data bus ๋Š” ๊ณ„์‚ฐํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ง„๋‹ค. data bus๋ผ๊ณ  ๋ถˆ๋ฆฌ์šฐ๋Š” ์ด์œ ๋Š” CPU์™€ Memory์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฒ„์Šค๋ผ๋Š”๊ฑด ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ํ•„์š”๋กœ ํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

์ „ํ˜•์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” CPU ์™ธ๋ถ€์— ์œ„์น˜ํ•˜๊ณ ์žˆ๋‹ค. ํ”„๋กœ์„ธ์„œ๋„ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ž์ฒด ๋ฉ”๋ชจ๋ฆฌ์ธ register ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ผ๋ฐ˜๋ชฉ์ (general-purpose) ๋ ˆ์ง€์Šคํ„ฐ์™€ ํŠน๋ณ„๋ชฉ์ (special-purpose) ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋‘๊ฐ€์ง€ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰œ๋‹ค. ์ผ๋ฐ˜ ๋ชฉ์  ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋ง๊ทธ๋Œ€๋กœ ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ•˜๊ธฐ, ๋น„๊ต์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ช…๋ น์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค. ์ปดํ“จํ„ฐ๋Š” ์ œํ•œ๋œ ๋ช‡๊ฐœ๋งŒ์˜ ์ผ๋ฐ˜ ๋ชฉ์  ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋ฟ์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์€ ์ฃผ(main)๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค.

CPU๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค๋ฉด decoded instruction ์— ๋”ฐ๋ผ์„œ ์ˆ˜์น˜์—ฐ์‚ฐ(arithmetic)๊ณผ ๋…ผ๋ฆฌ์—ฐ์‚ฐ(logic)์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๊ฒƒ๋“ค์€ ์‹ค์ œ ์ˆ˜ํ–‰๋˜๋Š” ๋ช…๋ น๋“ค๋กœ์จ ์—ฐ์‚ฐ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋Š” data bus๋ฅผ ํ†ตํ•ด์„œ ์ฃผ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„ ์ด๋‚˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค.

Memory

์ปดํ“จํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ ์ €์žฅ์˜์—ญ์„ ์ตœ์†Œ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ , ์—ฌ๊ธฐ์— ์ผ๋ จ์˜ ์—ฐ์†๋œ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ํ•„์—ฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ•„์š”๋กœ ํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์“ฐ์—ฌ์ง€๊ณ  ์ฝํ˜€์ง€๊ฒŒ ๋œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋Š์ •๋„์˜ ์ €์žฅ์˜์—ญ์„ ํ•„์š”๋กœ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์•„๋Š” ๋ฐ”๊ฐ€ ์ „ํ˜€ ์—†์œผ๋ฏ€๋กœ, ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋””์— ์–ด๋–ป๊ฒŒ ์ €์žฅ๋ ์ง€๋ฅผ ๋ช…๋ น(instruction)์„ ํ†ตํ•ด์„œ ์ปดํ“จํ„ฐ์—๊ฒŒ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ ๋ช…๋ น ์—ญ์‹œ ์ €์žฅ์˜์—ญ์— ์“ฐ์—ฌ์ง„ํ›„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ๋‹ค์Œ ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ํ•œ๋งˆ๋””๋กœ ๋ชจ๋“ ๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์˜์—ญ์— ๋“ค์–ด๊ฐ„๋‹ค์Œ ์ปดํ“จํ„ฐ์— ์˜ํ•ด์„œ ์ฝํ˜€์ง€๊ณ  ์‹คํ–‰๋˜์–ด์ง„๋‹ค.

movl data_items(, %edi, 4), %ebx

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ๋ช…๋ น์€ 7์˜ ์ €์žฅ์˜์—ญ์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ์ฒ˜์Œ ๋ช…๋ น์€ 2๋ฐ”์ดํŠธ, ๋‹ค์Œ ๋ ˆ์ด์ง€์Šคํ„ฐ์˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ 1๋ฐ”์ดํŠธ, ๋งˆ์ง€๋ง‰์œผ๋กœ data_items์˜์—ญ์„ ์œ„ํ•ด์„œ 4๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์œ„์น˜๋ฅผ ์ผ๋ จ์˜ ์ˆซ์ž๋ฅผ ํ†ตํ•ด์„œ ์ฐพ์•„๋‚ด๊ฒŒ ๋œ๋‹ค.

์ €์žฅ ์˜์—ญ ๋Œ€์‹ ์˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ž.

  • Address Address(์ฃผ์†Œ)๋Š” ์ €์žฅ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•œ ์ˆซ์ž๋‹ค. ์ปดํ“จํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฒซ๋ฒˆ์งธ ์ฃผ์†Œ๊ฐ€ 0์ด ๋˜๋ฉฐ, ๊ณ„์† 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ์†Œ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ํŽธ๋ฆฌํ•˜์ง€๋งŒ ์ธ๊ฐ„์ด ๋ณด๊ธฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ˆซ์ž ๋Œ€์‹  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์‹ฌ๋ณผ (data_items ์™€ ๊ฐ™์€)์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • Pointer ํฌ์ธํ„ฐ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ˜น์€ ๋ ˆ์ง€์Šคํ„ฐ์˜์—ญ์ด๋‹ค. ์œ„์˜ ์˜ˆ์ œ์—์„œ %ebx๊ฐ€ ํฌ์ธํ„ฐ๋กœ, ํ˜„์žฌ์˜ stack์˜์—ญ์„ point(๊ฐ€๋ฆฌํ‚จ๋‹ค)ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ์ •์— ์žˆ์–ด์„œ ๋งŽ์€ ์ˆ˜์˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

  • Byte ์ €์žฅ์„ ์œ„ํ•œ ์ตœ์†Œ๋‹จ์œ„๋‹ค. x86ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ํ•œ๋ฐ”์ดํŠธ๋Š” 8bit๋กœ 0์—์„œ 255์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.

  • Word ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ผ๋ฐ˜์ ์ธ ํฌ๋‹ค. x86 ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ, 1 word๋Š” 4๋งŒํผ์˜ ์ €์žฅ์˜์—ญ(4byte)์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

Instruction Pointer

์ปดํ“จํ„ฐ๋Š” ๋ช…๋ น์ด๋“ ์ง€ ์•„๋‹ˆ๋ฉด ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ๋“ ์ง€ ๋™์ผํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ฉฐ, ๋˜ํ•œ ์ด๋“ค์„ ๊ตฌ๋ถ„ํ•  ๋Šฅ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค. Instruction pointer์€ ๋‹ค์Œ ๋ช…๋ น(instruction)์„ ๊ฐ€๋ฅดํ‚จ๋‹ค. ํ•ด๋‹น ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด instruction pointer๋Š” ๋‹ค์Œ ๋ช…๋ น์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ฐ’์ด ์ฆ๊ฐ€๊ฐ€๋˜๋ฉฐ, ํ˜„์žฌ ์‹คํ–‰ํ•ด์•ผ๋  ๋ช…๋ น์„ ๋งˆ์น˜๊ฒŒ ๋˜๋ฉด, ๋‹ค์‹œ instruction pointer์˜ ๊ฐ’์„ ์‚ดํ”ผ๊ฒŒ ๋œ๋‹ค.

jmp๋“ฑ์„ ์ด์šฉํ•ด์„œ ๋ช…๋ น์„ ์ ํ”„ํ•˜๊ฒŒ ๋ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์ด๋Ÿด ๊ฒฝ์šฐ์— ์ปดํ“จํ„ฐ๋Š” ๋‹ค์Œ ๋ช…๋ น์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์œ„์น˜์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ• ๊ฒƒ์ด๋‹ค.

jmp somewhere

์ด ์ฝ”๋“œ๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ๋™์ผํ•œ ์ผ์„ ํ•œ๋‹ค.

movl $somewhere, %eip

somewhere๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜์—ญ์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์ง•์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ %eip๊ฐ€ ์ง์ ‘ somewhere๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ '$'ํ‘œ์‹œ๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋ ๊ฒฝ์šฐ ์ด๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. $ํ‘œ์‹œ๊ฐ€ immediate mode addressiong๋ชจ๋“œ๋กœ somewhere๋ฅผ ๊ฐ’์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. '$'ํ‘œ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ direct addressing mode๊ฐ€ ๋˜๋Š”๋ฐ, ๊ทธ๋Ÿด๊ฒฝ์šฐ somewhere์˜ ์ฃผ์†Œ์— ์žˆ๋Š” ๊ฐ’์ด %eip๋กœ ์ด๋™๋œ๋‹ค.

movl $0, $ebx

0์•ž์— $ํ‘œ์‹œ๊ฐ€ ๋ถ™์–ด ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ immediate-mode instruction๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 0์„ ebx์— ์ง‘์–ด ๋„ฃ๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ $ํ‘œ์‹œ๋ฅผ ์ œ๊ฑฐํ•˜๊ฒŒ ๋˜๋ฉด direct addressing mode๊ฐ€ ๋˜์–ด์„œ 0๋ฒˆ์ฃผ์†Œ์˜ ๊ฐ’์ด %ebx์— ๋ฐ€์–ด๋„ฃ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋ ๋•Œ, ๊ฐ๊ฐ์˜ .section์˜ ์ด๋ฆ„์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ง€์ ์ด ๋กœ๋“œ๋œ๋‹ค. ์‹ค์ œ์ฝ”๋“œ (.text section)์€ 0x0848000 ์ฃผ์†Œ์— ๋กœ๋“œ๋œ๋‹ค. .data์„น์…˜์ด ๊ทธ๋‹ค์Œ์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜๊ณ , ๊ทธ๋’ค์— .bss ์„น์…˜์ด ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค. .bss ๋Š” ๋ฒ„ํผ์˜์—ญ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ์„ ๋ฏธ๋ฆฌํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค. ์šฐ๋ฆฌ๋Š” run-time์ „๊นŒ์ง€๋Š” .bss์— ๊ฐ’์„ ๋ฐ€์–ด ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค. .data์„น์…˜์˜ ๊ฒฝ์šฐ์—๋Š” ๊ณต๊ฐ„์„ ํ• ๋‹น(.long ๋“ฑ์„ ์ด์šฉํ•ด์„œ)ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ํ•„์š”ํ•œ ๊ฐ’์„ ์ฆ‰์‹œ ๋ฐ€์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฐ’๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํŒŒ์ผ๋˜์–ด์„œ ๋งŒ๋“ค์–ด ์งˆ๋•Œ, ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ์— ์ง์ ‘ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๋ฐ˜๋ฉด .bss ์„น์…˜์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰์ „์—๋Š” ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ ์ž์ฒด์— ์–ด๋– ํ•œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹จ์ง€ ์–ด๋Š์ •๋„์˜ ์ €์žฅ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ์ง€ ์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ์ด ์žˆ์„ ๋ฟ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋Š” pages๋ผ๋Š” ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์—ฌ์„œ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. x86ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฆฌ๋ˆ…์Šค์—์„œ ํ•œ ํŽ˜์ด์ง€๋Š” 4096 byte์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋Š” ํŽ˜์ด์ง€๋‹จ์œ„๋กœ ๋งคํ•‘์ด ๋œ๋‹ค.

Register ๋ž€?

๋ฐ์ดํ„ฐ ๊ณ ์† ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ค‘์•™์ฒ˜๋ฆฌ์žฅ์น˜(CPU)์— ๋“ค์–ด์žˆ๋Š” ์†Œ๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๊ธฐ์–ต ์žฅ์น˜์ด๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ bus๋ฅผ ์ด์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ๋ฐ˜๋ฉด register๋Š” ํ”„๋กœ์„ธ์Šค ๊ทธ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ๋ ˆ์ง€์Šคํ„ฐ๋Š” CPU๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค. ์ปดํ“จํ„ฐ์˜ bit๊ฐ€ ํด์ˆ˜๋ก ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

  • ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ (64bit - 32bit - 16bit - up 8bit - down 8bit)
    • rax (- eax - ax - ah - al)
    • rbx (- ebx - bx - bh - bl)
    • rcx (- ecx - cx - ch - cl)
    • rdx (- edx - dx - dh - dl)

AX (๊ธฐ๋ณธ ๋ˆ„์‚ฐ๊ธฐ)๋Š” I/o ๋ฐ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณฑ์…ˆ ์—ฐ์‚ฐ์—์„œ ํ”ผ์—ฐ์‚ฐ์ž์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ eax ๋˜๋Š” AX ๋˜๋Š” AL ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ๋‹ค. BX (๊ธฐ๋ณธ ๋ ˆ์ง€์Šคํ„ฐ)๋Š” ์ธ๋ฑ์‹ฑ ๋œ ์ฃผ์†Œ ์ง€์ •์— ์‚ฌ์šฉ๋œ๋‹ค. CX (์นด์šดํŠธ ๋ ˆ์ง€์Šคํ„ฐ)๋Š” ๋ฐ˜๋ณต ์ž‘์—…์˜ ์‚ฌ์ดํด ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค (ECX ๋ฐ CX ๋ ˆ์ง€์Šคํ„ฐ์ฒ˜๋Ÿผ). DX (๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ)๋Š” ํฐ ๊ฐ’๊ณผ ๊ด€๋ จ๋œ ๊ณฑ์…ˆ ๋ฐ ๋‚˜๋ˆ—์…ˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด AX ๋ฐ DX ๋ ˆ์ง€์Šคํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ I/o ์ž‘์—…์— ์‚ฌ์šฉ๋œ๋‹ค.

  • ์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ

    • rsi (src index)
    • rdi (dest index)
  • ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด

    • mov : ์˜คํผ๋žœ๋“œ 1์— ์˜คํผ๋žœ๋“œ 2์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•ฉ๋‹ˆ๋‹ค.
    • add : ์˜คํผ๋žœ๋“œ 1์— ์˜คํผ๋žœ๋“œ 2๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.
    • sub : ์˜คํผ๋žœ๋“œ 1์— ์˜คํผ๋žœ๋“œ 2๋ฅผ ๋บ๋‹ˆ๋‹ค.
    • inc : ์˜คํผ๋žœ๋“œ ๊ฐ’์„ 1 ์ฆ๊ฐ€ ์‹œํ‚ต๋‹ˆ๋‹ค.
    • dec : ์˜คํผ๋žœ๋“œ ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.
    • call : ํ”„๋กœ์‹œ์ ธ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. (ํ•จ์ˆ˜ ํ˜ธ์ถœ)
    • ret : ํ˜ธ์ถœ์˜ ๋‹ค์Œ ์ง€์ ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. (ํ•จ์ˆ˜๋ฅผ ๋๋‚ด๊ณ  ํ˜ธ์ถœ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.)
    • cmp : ์˜คํผ๋žœ๋“œ 1๊ณผ 2์˜ ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. (์˜คํผ๋žœ๋“œ 1์˜ ๊ฐ’) - (์˜คํผ๋žœ๋“œ 2์˜ ๊ฐ’)
    • jmp : ๋ถ„๊ธฐ (์ž์„ธํ•œ ์„ค๋ช…์€ https://8jz5.tistory.com/50)
    • push : ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด๋ถ€์˜ ๊ฐ’์„ ์Šคํƒ์— ์ž„์‹œ ์ €์žฅํ•˜๊ณ  ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด๋ถ€๋ฅผ ๋น„์›๋‹ˆ๋‹ค.
    • pop : push๋œ ๊ฐ’์„ ํ•ด๋‹น ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (push, pop์€ ํ›„์ž…์„ ์ถœ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.)
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ทœ์•ฝ

    • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” rdi, rsi, rdx, rcx, r8, r9 ๋ฅผ ํ†ตํ•ด ๋„˜์–ด์˜ค๊ฑฐ๋‚˜ ๋„˜๊ฒจ์ง‘๋‹ˆ๋‹ค.
    • ์ด ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜์™€ ๊ด€๊ณ„์—†์ด ์ด ๋ ˆ์ง€์Šคํ„ฐ๋“ค์— ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐ˜ํ™˜๊ฐ’์€ ํ•ญ์ƒ rax์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • syscall

    • syscall ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ƒ์— ๋ฏธ๋ฆฌ ์„ ์–ธ๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด ๋•Œ syscall ์ฝ”๋“œ๋Š” rax์— ๋“ค์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๋ฐ˜ํ™˜๊ฐ’ ๋˜ํ•œ rax์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • syscall ์ฝ”๋“œ๋Š” ์‹œ์Šคํ…œ ๋งˆ๋‹ค ๋‹ค๋ฅด๋ฉฐ ๋งฅ์€ https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.
    • syscall ํ›„ ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ด๋Š” __error ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ฒ˜๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    • __error ํ•จ์ˆ˜๋Š” sys/errno.h ์— ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ

section

์–ด์…ˆ๋ธ”๋ฆฌ์˜ ์–ธ์–ด๋Š” ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • Data section
    • ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์ด ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์„ ์–ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
    • ์ƒ์ˆ˜ ๊ฐ’๊ณผ ํŒŒ์ผ ์ด๋ฆ„ ์ €์žฅ
    • ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ์ •์ ์œผ๋กœ ์œ ์ง€
  • Bss section
    • ๋‚˜์ค‘์— ํ”„๋กœ๊ทธ๋žจ์—์„œ ์„ ์–ธ ๋  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋ฒ„ํผ๋ฅผ ํฌํ•จํ•˜๋Š” ์ •์  ๋ฉ”๋ชจ๋ฆฌ ์„น์…˜
    • ๋ณ€์ˆ˜ ์„ ์–ธ์— ์‚ฌ์šฉ
    • ๋ฒ„ํผ ๋ฉ”๋ชจ๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.
  • Text section
    • ์ฝ”๋“œ ์ €์žฅ์— ์‚ฌ์šฉ
  • Stack
    • ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜ ๋ฐ ํ”„๋กœ ์‹œ์ €์— ์ „๋‹ฌ ๋œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์„ธ๊ทธ๋จผํŠธ

์ฃผ์„

; ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

[label] mnemonic [operands] [; comment]

add eax, ebx ; add ebx to eax

๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•

mov ax, 0	; ax์— 0๊ฐ’์„ ๋„ฃ๋Š” ๋ช…๋ น์•„
sub ax, ax	; ax-ax ์ž๊ธฐ ์ž์‹ ์„ ๋ป„
xor ax, ax	; ์„œ๋กœ ๊ฐ™์€๊ฐ’์„ ๊ฐ–์„ ๊ฒฝ์šฐ 0์ด ๋˜๋Š” ๋ฐฉ์‹

์ด๋Ÿฐ ๋ฐฉ์‹์˜ ์ฐจ์ด๋Š” ์ปดํŒŒ์ผ ํ•  ๋•Œ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. mov๋Š” 3 ~ 4์ •๋„์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐ˜๋ฉด์— sub๋‚˜ xor๋Š” 1 ~ 2 ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ฆ๊ฐ

inc rax		; rax 1์ฆ๊ฐ€
dec rax		; rax 1๊ฐ์†Œ

  1. ํƒœ์ดˆ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์–ด์…ˆ๋ธ”๋ฆฌ
  2. Programming from the Ground Up
  3. mac systemcall