๐Ÿ’ฟ KAIST:PINTOS | Concept | 32 bit OS vs 64 bit OS

์ด์ˆœ๊ฐ„ยท2025๋…„ 5์›” 16์ผ

KAIST:PINTOS

๋ชฉ๋ก ๋ณด๊ธฐ
11/23

โœ… ์š”์•ฝ

32๋น„ํŠธ์™€ 64๋น„ํŠธ์˜ ์ฐจ์ด๋Š” โ€˜ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋Ÿ‰โ€™๊ณผ
โ€˜๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐโ€™์˜ ์ฐจ์ด์ด๋ฉฐ,
ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ๊ณผ ๋ฒ”์œ„๋ฅผ ๊ฒฐ์ •์ง“๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค.


1๏ธโƒฃ 32๋น„ํŠธ? 64๋น„ํŠธ? ๊ทธ๊ฒŒ ๋ญ”๋ฐ?

์ปดํ“จํ„ฐ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ,
์ด ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์“ฐ๋Š” ๊ณต๊ฐ„์ด ๋ ˆ์ง€์Šคํ„ฐ(Register)์ด๋‹ค.

32๋น„ํŠธ ์‹œ์Šคํ…œ์€ ํ•œ ๋ฒˆ์— 32์ž๋ฆฌ ์ˆซ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
64๋น„ํŠธ ์‹œ์Šคํ…œ์€ 64์ž๋ฆฌ ์ˆซ์ž๋ฅผ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ฆ ์‰ฝ๊ฒŒ ๋งํ•ด ๊ณ„์‚ฐ๊ธฐ์˜ ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ๋‘ ๋ฐฐ๊ฐ€ ๋œ ์…ˆ์ด๋‹ค.


2๏ธโƒฃ ๊ฐ€์žฅ ํฐ ์ฐจ์ด: ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ

ํ•ญ๋ชฉ32๋น„ํŠธ64๋น„ํŠธ
์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์•ฝ 4GB์•ฝ 18์—‘์‚ฌ๋ฐ”์ดํŠธ(EB)
ํฌ์ธํ„ฐ ํฌ๊ธฐ4๋ฐ”์ดํŠธ8๋ฐ”์ดํŠธ

ํฌ์ธํ„ฐ(pointer)๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋กœ,
์ด ํฌ๊ธฐ์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

๐Ÿ“š 32๋น„ํŠธ๋Š” ์ฑ…์žฅ ํ•˜๋‚˜๋ผ๋ฉด, 64๋น„ํŠธ๋Š” ๋„์„œ๊ด€ ์ „์ฒด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


3๏ธโƒฃ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹๋„ ๋‹ค๋ฅด๋‹ค

๐Ÿ“Œ 32๋น„ํŠธ ๋ฐฉ์‹

32๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ,
์ „๋‹ฌํ•  ๊ฐ’๋“ค์„ ์Šคํƒ(stack)์ด๋ผ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ์ €์žฅํ•œ ๋’ค ํ˜ธ์ถœํ•œ๋‹ค.

push arg2
push arg1
call function

์ด ๋ฐฉ์‹์€ ๋น„๊ต์  ๋‹จ์ˆœํ•˜์ง€๋งŒ, ์—ฐ์‚ฐ๋งˆ๋‹ค ์Šคํƒ์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋А๋ฆด ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ 64๋น„ํŠธ ๋ฐฉ์‹

64๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ธ์ž๋ฅผ ์Šคํƒ์ด ์•„๋‹ˆ๋ผ CPU ๋‚ด๋ถ€ ๋ ˆ์ง€์Šคํ„ฐ์— ์ง์ ‘ ๋„ฃ์–ด ํ˜ธ์ถœํ•œ๋‹ค.

mov rdi, arg1
mov rsi, arg2
call function

์ด ๋ฐฉ์‹์€ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๊ณ , CPU์˜ ์„ฑ๋Šฅ์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๋Œ์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.


4๏ธโƒฃ ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์˜ ์ฐจ์ด

์‹œ์Šคํ…œ ์ฝœ(system call)์ด๋ž€, ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์—๊ฒŒ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ์„ ์—ด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๋Š” ์ž‘์—…์€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์š”์ฒญํ•œ๋‹ค.

ํ•ญ๋ชฉ32๋น„ํŠธ64๋น„ํŠธ
๋ฐฉ์‹int 0x80syscall
ํŠน์ง•์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ฒ˜๋ฆฌํ•œ๋‹ค์ „์šฉ ๋ช…๋ น์–ด๋กœ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค

64๋น„ํŠธ ์‹œ์Šคํ…œ์€ ๋” ํ˜„๋Œ€์ ์ธ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค.


5๏ธโƒฃ ์‹คํ–‰ ํŒŒ์ผ ๊ตฌ์กฐ๋„ ๋‹ค๋ฅด๋‹ค (ELF ํฌ๋งท)

์šด์˜์ฒด์ œ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ๋•Œ ELF(Executable and Linkable Format)์ด๋ผ๋Š” ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

ํ•ญ๋ชฉELF32ELF64
ํฌ์ธํ„ฐ ํฌ๊ธฐ4๋ฐ”์ดํŠธ8๋ฐ”์ดํŠธ
์ฃผ์†Œ ํ‘œํ˜„ ๋ฒ”์œ„์ž‘๋‹คํฌ๋‹ค
ํ—ค๋” ํฌ๊ธฐ52๋ฐ”์ดํŠธ64๋ฐ”์ดํŠธ

๐Ÿ” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ„ฐ๋ฏธ๋„์—์„œ ELF ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค:

file a.out
# ELF 64-bit LSB executable, x86-64

6๏ธโƒฃ PintOS์™€์˜ ์—ฐ๊ฒฐ

โš™๏ธ PintOS๋Š” 32๋น„ํŠธ ๊ธฐ๋ฐ˜์ด๋‹ค

PintOS๋Š” ๊ต์œก์šฉ ์šด์˜์ฒด์ œ ํ”„๋กœ์ ํŠธ๋กœ,
x86 32๋น„ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

์ปค๋„๊ณผ ์œ ์ € ํ”„๋กœ๊ทธ๋žจ์€ 4GB ์•ˆ์—์„œ ์ฃผ์†Œ๋ฅผ ๋‚˜๋ˆ  ์“ฐ๋ฉฐ,
๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ์™€ ์ฃผ์†Œ๋„ 32๋น„ํŠธ(4๋ฐ”์ดํŠธ) ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.


๐Ÿ” ๊ทธ๋Ÿฌ๋‚˜ 64๋น„ํŠธ ๊ฐœ๋…๋„ ๋ฐ˜๋“œ์‹œ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค

ํ˜„๋Œ€์˜ ์ปดํ“จํ„ฐ๋Š” ๋Œ€๋ถ€๋ถ„ 64๋น„ํŠธ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ์œผ๋ฉฐ,
์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ๊ณผ ๋””๋ฒ„๊น… ํˆด(GDB)๋„ 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ PintOS๋ฅผ ์‹ค์Šตํ•  ๋•Œ๋„ rax, rsp, ELF64 ๊ฐ™์€ ๊ฐœ๋…์„ ๋งˆ์ฃผํ•˜๊ฒŒ ๋œ๋‹ค.
์ด๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฉด ์‹ค์Šต ๊ณผ์ •์—์„œ ํ˜ผ๋ž€์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.


๐Ÿงฎ ํ•ต์‹ฌ ๋น„๊ต ์ •๋ฆฌ

ํ•ญ๋ชฉ32๋น„ํŠธ64๋น„ํŠธ
์ฃผ์†Œ ํฌ๊ธฐ4๋ฐ”์ดํŠธ8๋ฐ”์ดํŠธ
์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„4GB์ด๋ก ์ƒ 18EB
๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„eax, esp ๋“ฑrax, rsp, r8~r15 ๋“ฑ
ํ•จ์ˆ˜ ์ธ์ž ์ „๋‹ฌ์Šคํƒ ์‚ฌ์šฉ๋ ˆ์ง€์Šคํ„ฐ ์‚ฌ์šฉ
์‹œ์Šคํ…œ ์ฝœint 0x80syscall
์‹คํ–‰ ํŒŒ์ผ ํ˜•์‹ELF32ELF64
PintOS ๊ตฌ์กฐ32๋น„ํŠธ ๊ณ ์ •GDB ํ™˜๊ฒฝ์—์„œ๋Š” 64๋น„ํŠธ ์ดํ•ด ํ•„์š”

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

  • 32๋น„ํŠธ์™€ 64๋น„ํŠธ์˜ ์ฐจ์ด๋Š” ๋‹จ์ˆœํ•œ ์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ,
    ์ปดํ“จํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘๊ณผ ์†๋„, ๊ตฌ์กฐ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ค‘์š”ํ•œ ๊ธฐ์ค€์ด๋‹ค.
  • PintOS๋Š” 32๋น„ํŠธ ๊ธฐ๋ฐ˜์ด์ง€๋งŒ, ์‹ค์Šต ํ™˜๊ฒฝ์€ 64๋น„ํŠธ์ด๋ฉฐ,
    ์ด ๋‘˜์„ ์—ฐ๊ฒฐํ•ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ณต๋ถ€ํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ์ด๋‹ค.

โœ… ์ •๋ฆฌ: KAIST PintOS๋Š” "64๋น„ํŠธ ๋ฆฌ๋ˆ…์Šค + 32๋น„ํŠธ PintOS" ๊ตฌ์กฐ์ด๋‹ค.

๊ตฌ๋ถ„์„ค๋ช…
ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ (Linux)64๋น„ํŠธ ๋ฆฌ๋ˆ…์Šค (x86_64)์—์„œ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰
QEMU ๊ฐ€์ƒ ๋จธ์‹ 32๋น„ํŠธ x86 ํ•˜๋“œ์›จ์–ด๋กœ ์—๋ฎฌ๋ ˆ์ด์…˜
PintOS ๋‚ด๋ถ€ ์ปค๋„32๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜(x86, IA-32) ๊ธฐ๋ฐ˜ ์ฝ”๋“œ

๐Ÿง  ์™œ ์ด๋Ÿฐ ๊ตฌ์กฐ์ธ๊ฐ€?

  1. ๊ต์œก ๋ชฉ์ : 32๋น„ํŠธ ๊ตฌ์กฐ๋Š” ๋‹จ์ˆœํ•˜๊ณ  ๋ช…ํ™•ํ•˜์—ฌ, ์šด์˜์ฒด์ œ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.
  2. ๋ ˆ์ง€์Šคํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœ: eax, ebx, esp, ebp ๋“ฑ ๊ธฐ๋ณธ 8๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ๋งŒ ์‚ฌ์šฉ
  3. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์ด ์ œํ•œ์ : ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ, ์Šคํƒ, ํž™ ๋“ฑ์„ ์ง๊ด€์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์‹คํ—˜ํ•  ์ˆ˜ ์žˆ์Œ
  4. ํ˜„์‹ค๊ณผ์˜ ์—ฐ๊ฒฐ๋„ ๊ฐ€๋Šฅ: ๋ฆฌ๋ˆ…์Šค์—์„œ ์‹คํ–‰ํ•˜์ง€๋งŒ, ์‹ค์ œ OS ๊ตฌ์กฐ์˜ ์ถ•์†ŒํŒ์œผ๋กœ ์ž‘๋™ํ•จ

๐Ÿ’ป ์˜ˆ์‹œ: ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

KAIST PintOS์—์„œ๋„ ์‹œ์Šคํ…œ ์ฝœ์€ ์—ฌ์ „ํžˆ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

// syscall.c
void syscall_init(void) {
  intr_register_int(0x30, 3, INTR_ON, syscall_handler, "syscall");
}
  • int 0x30 ๋ช…๋ น์œผ๋กœ ์ปค๋„๋กœ ์ง„์ž…ํ•œ๋‹ค.
  • struct intr_frame ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ์œ ์ € ์Šคํƒ โ†’ ์ปค๋„ ์ „ํ™˜ ์‹œ ๋ ˆ์ง€์Šคํ„ฐ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • syscall ๋ฒˆํ˜ธ๋Š” f->eax์— ๋“ค์–ด ์žˆ๊ณ , ๊ฒฐ๊ณผ๊ฐ’๋„ f->eax์— ๋„ฃ์–ด ๋‹ค์‹œ ์œ ์ € ๋ชจ๋“œ๋กœ ๋ณต๊ท€ํ•œ๋‹ค.

๐Ÿค” ์™œ 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ 32๋น„ํŠธ ์ปค๋„์„ ์“ฐ๋Š”๊ฐ€?

  • QEMU ๊ฐ€์ƒ ๋จธ์‹ ์€ CPU๋ฅผ ํ‰๋‚ด๋‚ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋‹ค.
    KAIST PintOS๋Š” QEMU ์œ„์—์„œ 32๋น„ํŠธ x86 CPU๋ฅผ ๊ฐ€์ƒ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ(GCC), GDB, ํ„ฐ๋ฏธ๋„์€ ๋ชจ๋‘ 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ,
    ๊ทธ ์•ˆ์—์„œ ๋Œ์•„๊ฐ€๋Š” PintOS ์ž์ฒด๋Š” 32๋น„ํŠธ ๋ชจ๋“œ๋กœ ๋™์ž‘ํ•œ๋‹ค.

๐Ÿ” ์‹ค์Šต ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ

์ƒํ™ฉ์ด์œ 
GDB์—์„  eax, esp ๊ฐ™์€ 32๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋งŒ ๋ณด์ž„PintOS ์ปค๋„์ด 32๋น„ํŠธ๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐ ๋•Œ๋ฌธ
์œ ์ € ํ”„๋กœ๊ทธ๋žจ์ด syscall ํ•  ๋•Œ int 0x30 ์‚ฌ์šฉsyscall์ด ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ
ํฌ์ธํ„ฐ ํฌ๊ธฐ๊ฐ€ 4๋ฐ”์ดํŠธ๋กœ ์ œํ•œ๋จ32๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์ด๊ธฐ ๋•Œ๋ฌธ

โœ… ๊ฒฐ๋ก 

  • KAIST PintOS๋Š” 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ๋˜์ง€๋งŒ,
    ์šด์˜์ฒด์ œ ์‹ค์Šต ๋Œ€์ƒ์ธ ์ปค๋„์€ ์ฒ ์ €ํžˆ 32๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
  • ์‹œ์Šคํ…œ ์ฝœ์€ int 0x30์„ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์ด๊ณ ,
    ์ด๋Š” ๋ฆฌ๋ˆ…์Šค 32๋น„ํŠธ ์‹œ์ ˆ ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ์‹ค์Šตํ•˜๋”๋ผ๋„, ๋ชจ๋“  ์ปค๋„ ์„ค๊ณ„๋Š” 32๋น„ํŠธ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.

์ถ”๊ฐ€ ์ด์•ผ๊ธฐ

64๋น„ํŠธ ๊ฒŒ์ž„์œผ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ๊ธฐ์กด์˜ 32๋น„ํŠธ ๋งคํฌ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋” ์ด์ƒ ๊ฒŒ์ž„ ํ”„๋กœ์„ธ์Šค์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜, ์ผ๋ถ€ ๊ธฐ๋Šฅ๋งŒ ๋˜๋Š” ์ด์œ ๋Š” โ€œ๋น„ํŠธ ํ˜ธํ™˜์„ฑโ€๊ณผ โ€œ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ฐจ์ดโ€ ๋•Œ๋ฌธ์ด๋‹ค.


๐Ÿง  ํ•ต์‹ฌ ์š”์•ฝ

๊ตฌ๋ถ„์„ค๋ช…
โœ… ๋˜๋Š” ๋งคํฌ๋กœ๊ฒŒ์ž„๊ณผ ๊ฐ„์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ฑฐ๋‚˜, ๋ณ„๋„ ์™ธ๋ถ€ ์ž…๋ ฅ๋งŒ ์“ฐ๋Š” ๋ฐฉ์‹ (ex. ๋งˆ์šฐ์Šค ํด๋ฆญ, ํ‚ค ์ž…๋ ฅ ๋“ฑ)
โŒ ์•ˆ ๋˜๋Š” ๋งคํฌ๋กœ๊ฒŒ์ž„ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด๋ถ€๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ์‹ (ex. ์ฃผ์†Œ ์ฐพ์•„์„œ ์ง์ ‘ ๊ฐ’ ๋ฐ”๊พธ๊ธฐ, ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ๋งคํฌ๋กœ)

๐Ÿ’ป ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด๋ณผ๊ฒŒ

1. โœ… ์–ด๋–ค ๋งคํฌ๋กœ๋Š” ์ž˜ ์ž‘๋™ํ•˜๋Š” ์ด์œ 

  • ํ‚ค๋ณด๋“œ ์ž…๋ ฅ, ๋งˆ์šฐ์Šค ํด๋ฆญ, ์œˆ๋„์šฐ ํฌ์ปค์Šค ๊ฐ™์€ ํ‘œ์ค€ ์ž…๋ ฅ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋งคํฌ๋กœ๋Š”
    32๋น„ํŠธ๋“  64๋น„ํŠธ๋“  ์šด์˜์ฒด์ œ์˜ WinAPI๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์˜ˆ: SendInput(), keybd_event(), mouse_event() ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ๋น„ํŠธ ์ฐจ์ด์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ž‘๋™ํ•จ.

2. โŒ ์–ด๋–ค ๋งคํฌ๋กœ๋Š” ์ž‘๋™์ด ์•ˆ ๋˜๋Š” ์ด์œ 

๐Ÿงจ ์ด์œ  1. ๋งคํฌ๋กœ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ์‹์— ์˜์กดํ•  ๊ฒฝ์šฐ

  • ์˜ˆ์ „ 32๋น„ํŠธ ๊ฒŒ์ž„์€ ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์ด 4GB ๋‚ด์—์„œ ๋‹จ์ˆœํ•ด์„œ,
    ๋งคํฌ๋กœ๊ฐ€ ํŠน์ • ์ฃผ์†Œ๋‚˜ ๊ตฌ์กฐ์ฒด ์œ„์น˜๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์•„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ์Œ
  • ํ•˜์ง€๋งŒ 64๋น„ํŠธ์—์„œ๋Š” ์ฃผ์†Œ ํฌ๊ธฐ๊ฐ€ 8๋ฐ”์ดํŠธ๋กœ ์ปค์ง€๊ณ ,
    ๊ตฌ์กฐ์ฒด ์ •๋ ฌ(Padding)๋„ ๋‹ฌ๋ผ์ง€๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๋„ ๊ฐ•ํ™”๋จ

โ†’ 32๋น„ํŠธ ๋งคํฌ๋กœ๋Š” ๋” ์ด์ƒ ์˜ฌ๋ฐ”๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜, ์ž˜๋ชป๋œ ํฌ๊ธฐ๋กœ ์ฝ์Œ

๐Ÿงจ ์ด์œ  2. ์šด์˜์ฒด์ œ ๋ณดํ˜ธ ๊ตฌ์กฐ ๋•Œ๋ฌธ

  • 64๋น„ํŠธ Windows์—์„œ๋Š” WOW64 (Windows on Windows64)๋ผ๋Š” ํ˜ธํ™˜ ๊ณ„์ธต์ด ์žˆ์Œ
    โ†’ 32๋น„ํŠธ ํ”„๋กœ๊ทธ๋žจ์€ 64๋น„ํŠธ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ์ ‘๊ทผ ๋ถˆ๊ฐ€
  • 32๋น„ํŠธ ๋งคํฌ๋กœ๋Š” 64๋น„ํŠธ ๊ฒŒ์ž„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ด์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ,
    ๊ถŒํ•œ ๊ฑฐ๋ถ€๋‚˜ ์ ‘๊ทผ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•จ

32๋น„ํŠธ ํ”„๋กœ๊ทธ๋žจ์€ 64๋น„ํŠธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— OpenProcess(), ReadProcessMemory() ๊ฐ™์€ API๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ์ œํ•œ๋˜์–ด ์žˆ๋‹ค.


๐Ÿงช ์˜ˆ์‹œ๋กœ ์ •๋ฆฌํ•ด๋ณด๋ฉด

๋งคํฌ๋กœ ๊ธฐ๋Šฅ32๋น„ํŠธ ๊ฒŒ์ž„64๋น„ํŠธ ๊ฒŒ์ž„
ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ์ž๋™ํ™”๊ฐ€๋Šฅ๊ฐ€๋Šฅ
๋งˆ์šฐ์Šค ํด๋ฆญ ์ž๋™ํ™”๊ฐ€๋Šฅ๊ฐ€๋Šฅ
๊ฒŒ์ž„ ๋ฉ”๋ชจ๋ฆฌ ์ฝ๊ณ  ์ˆ˜์ •๊ฐ€๋ŠฅโŒ (๊ตฌ์กฐ ๋‹ฌ๋ผ์ง + ์ ‘๊ทผ ์ฐจ๋‹จ)
ํŠน์ • ์ขŒํ‘œ๋‚˜ ์ฒด๋ ฅ ์ •๋ณด ์ฝ๊ธฐ๊ฐ€๋ŠฅโŒ (์ฃผ์†Œ ํ•ด์„ ์‹คํŒจ)
DLL ์ธ์ ์…˜ ๋ฐฉ์‹๊ฐ€๋ŠฅโŒ (๋น„ํŠธ ๋‹ค๋ฅด๋ฉด ์ธ์ ์…˜ ๋ถˆ๊ฐ€)

๐Ÿ”ง ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€?

  1. ๋งคํฌ๋กœ๋ฅผ 64๋น„ํŠธ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด์•ผ ํ•จ
    โ†’ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ฃผ์†Œ ํฌ๊ธฐ, ๊ตฌ์กฐ์ฒด ์ •๋ ฌ ๋“ฑ์„ ๊ณ ์ณ์•ผ ํ•จ

  2. 64๋น„ํŠธ ๊ฒŒ์ž„์— ๋งž๋Š” ๋งคํฌ๋กœ ์ƒˆ๋กœ ์ œ์ž‘
    โ†’ ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ ์Šค์บ”์ด๋‚˜ ๊ฒŒ์ž„ ๊ตฌ์กฐ ๋ถ„์„์„ ๋‹ค์‹œ ํ•ด์•ผ ํ•จ

  3. ๋˜๋Š”, ๊ฒŒ์ž„ ์ œ์ž‘์ž๊ฐ€ ์•„์˜ˆ ๋งคํฌ๋กœ๋ฅผ ๋ง‰์€ ๊ฒฝ์šฐ๋„ ์žˆ์Œ
    โ†’ ๊ทธ๋Ÿด ๋• ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋ง‰ํ˜€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ


โœ… ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

  • 64๋น„ํŠธ ๊ฒŒ์ž„์€ ๊ตฌ์กฐ๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—,
    32๋น„ํŠธ๋กœ ๋งŒ๋“  ๋งคํฌ๋กœ๋Š” ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์ œ์™ธํ•˜๋ฉด ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋‚˜ ์ฃผ์†Œ ํ•ด์„์— ์˜์กดํ•˜๋Š” ๋งคํฌ๋กœ๋Š” ๋Œ€๋ถ€๋ถ„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋งคํฌ๋กœ๋ฅผ 64๋น„ํŠธ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๋‹ค์‹œ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜, ์•„์˜ˆ ์ƒˆ๋กœ ์ œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
profile
์„œํˆด์ง€์–ธ์ • ๋Š˜ ํ–‰๋™์ด ๋จผ์ €์ด๊ธฐ๋ฅผ

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 5์›” 16์ผ

ใ„ฑใ……

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ