rosieblue
article thumbnail
728x90

์˜ค๋Š˜ ๋‹ค๋ฃฐ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ปค๋„ ๋ชจ๋“œ์™€ ์œ ์ € ๋ชจ๋“œ
  • ์‹œ์Šคํ…œ์ฝœ(syscall)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? (+syscall๊ณผ call๊ณผ์˜ ์ฐจ์ด)
  • ํ”„๋กœ์‹œ์ €๋ž€?
  • syscall์˜ ์›๋ฆฌ (x86,x86_64)

 

์ปค๋„, ์…ธ, ์œ ์ €

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

 

์ปค๋„(Kernel) ๋ชจ๋“œ, ์ปค๋„

  • ์ปค๋„์€ ์œ ์ €๊ฐ€ ์ง์ ‘ํ•  ์ˆ˜ ์—†๋Š” ์ €์ˆ˜์ค€์˜ ์ž‘์—…(๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์ž…์ถœ๋ ฅ, ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋“ฑ)์„ ์‹คํ–‰
  • ์ปค๋„์€ ์ž์›์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•จ

์•„๋ž˜๋Š” ์ปค๋„์ด ๊ด€๋ฆฌํ•œ ๋ฌผ๋ฆฌ์  ์ž์›๊ณผ, ์ด๋ฅผ ์ง€์นญํ•˜๋Š” ์ถ”์ƒ์  ์ž์›์˜ ์ด๋ฆ„ ๊ฐ„ ๋Œ€์‘ ๊ด€๊ณ„์ด๋‹ค!

CPU -> ํƒœ์Šคํฌ(task)
๋ฉ”๋ชจ๋ฆฌ -> ํŽ˜์ด์ง€(page), ์„ธ๊ทธ๋จผํŠธ(segment)
๋””์Šคํฌ -> ํŒŒ์ผ(file)
๋„คํŠธ์›Œํฌ -> ์†Œ์ผ“(socket)

์ด์™ธ์—๋„ ์™ธ๋ถ€์žฅ์น˜(ํ”„๋ฆฐํ„ฐ, GPU ๋“ฑ)์„ ๊ด€๋ฆฌํ•œ๋‹ค~

 

 

๊ณง ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์ปค๊ฐ€ ์ปค๋„ ๋ชจ๋“œ๊นŒ์ง€ ํš๋“ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฑฐ์˜ ๋ฌด๋ฐฉ๋น„ ์ƒํƒœ๋ผ๊ณ ํ•ด๋„ ๋ฌด๋ฐฉ

์ปค๋„์€ ์ฆ‰ ์šด์˜ ์ฒด์ œ์˜ ํ•ต์‹ฌ

์˜ˆ๋ฅผ ๋“ค์–ด ์ปค๋„์€ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ๊ถŒํ•œ์— ๋”ฐ๋ผ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ•จ. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ง‰ ์กฐ์ž‘ํ•ด์„œ ์ด๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Œ

 

 

์ปค๋„์ด ํ•˜๋Š” ์ผ

ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์„ค๋ช…
ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ๋ฐฐ๋ถ„ํ•˜๊ณ  ์ž‘์—…์— ํ•„์š”ํ•œ ์ œ๋ฐ˜ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค์— ์ž‘์—… ๊ณต๊ฐ„์„ ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฐ ๊ฐ€์ƒ๊ณต๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค.
ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ ํ•„์š”ํ•œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ๊ด€๋ฆฌ ๊ณต๋™ ์ž‘์—…์„ ์œ„ํ•œ ๊ฐ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ํ™˜๊ฒฝ์„ ์ง€์›ํ•œ๋‹ค.

 

์œ ์ €๋ชจ๋“œ

  • ์šด์˜ ์ฒด์ œ๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌํ•˜๋Š” ๊ถŒํ•œ.

๋ฃจํŠธ ์œ ์ €์˜ ๊ถŒํ•œ๋„ ์œ ์ € ๋ชจ๋“œ์— ํ•ด๋‹น. ๋”ฐ๋ผ์„œ ์•„๋ฌด๋ฆฌ ๋ฃจํŠธ์˜ ๊ถŒํ•œ์„ ํƒˆ์ทจํ–ˆ๋‹ค๊ณ  ํ•ด๋„ ์ปค๋„ ๋ชจ๋“œ์˜ ๋ง‰๊ฐ•ํ•œ ๊ถŒํ•œ์„ ์‹คํ–‰ํ•˜๋Š” ๋Š” ๊ฒƒ์€ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ

 

32๋น„ํŠธ ์•„ํ‚คํ…์ณ์—์„œ ์ปค๋„๊ณผ ์‚ฌ์šฉ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋ถ„๋ฆฌ

 

64๋น„ํŠธ ์•„ํ‚คํ…์ฒ˜์—์„œ ์ปค๋„๊ณผ ์‚ฌ์šฉ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋ถ„๋ฆฌ

 

์œ„ ๊ทธ๋ฆผ์—์„œ์ฒ˜๋Ÿผ ์ปค๋„ ๋ชจ๋“œ์ผ๋•Œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„๊ณผ ์œ ์ € ๋ชจ๋“œ์ผ ๋•Œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

 

์…ธ

  • ๋ช…๋ น์–ด์™€ ์ปค๋„์ด ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์ผ์ข…์˜ ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ช…๋ น์–ด ํ•ด์„๊ธฐ๋ผ๊ณ  ๋ด๋„๋จ
์œ ์ €๊ฐ€ ์…ธ(๋ช…๋ น์–ด ํ•ด์„๊ธฐ)์— ๋ช…๋ น์„ ์ „๋‹ฌํ•˜๋ฉด ์…ธ์ด ์ปค๋„ํ•œํ…Œ ๋ถ€ํƒํ•˜๊ณ , ์ปค๋„์ด ๋‚ด๋ถ€์ ์ธ ์ž‘์—…์„ ์‹คํ–‰ํ•œ ํ›„ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์…ธ์„ ํ†ตํ•ด ์œ ์ €์—๊ฒŒ๋กœ ์ „๋‹ฌ

 

์…ธ(shell)์€ ๊ป์งˆ์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ปค๋„์„ ๊ฐ์‹ธ๊ณ  ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ์ด๋ฆ„์ด ๋˜์—ˆ๋‹ค.

 

์‹œ์Šคํ…œ ์ฝœ (Syscall)์ด๋ž€?

์œ ์ €๊ฐ€ ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ปค๋„์„ ๋ถ€๋ฅด๋Š”(call) ๋ช…๋ น์–ด.

์™œ๋ƒํ•˜๋ฉด ์œ„์— ๋งํ–ˆ๋“ฏ์ด ์œ ์ €๋Š” ์ž„์˜๋กœ ์ปค๋„ ๋ชจ๋“œ์— ์ง„์ž…ํ•  ์ˆ˜ ์—†์Œ. ๋”ฐ๋ผ์„œ ์ €์ˆ˜์ค€์˜ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปค๋„์˜ ๋„์›€์ด ํ•„์š”ํ•จ. ์ด๋•Œ ์ปค๋„์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๋ช…๋ น์–ด๊ฐ€ syscall์ด ๋˜๋Š” ๊ฒƒ์ž„.

 

์˜ˆ๋ฅผ๋“ค์–ด ์šฐ๋ฆฌ๊ฐ€ cat tmp.text๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์ž. ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌ๋‚˜ ์ง์ ‘ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ปค๋„์˜ ๋„์›€์„ ๋ฐ›์•„์•ผํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ syscall์„ ํ†ตํ•ด ์ปค๋„์—๊ฒŒ ๋ถ€ํƒํ•˜๋ฉด, ์ปค๋„์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์šฐ๋ฆฌ์—๊ฒŒ ์ „๋‹ฌํ•ด์ค€๋‹ค.

์ด์ฒ˜๋Ÿผ ์ปค๋„์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•  ๋•Œ syscall์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์‹œ์Šคํ…œ ์ฝœ ๋™์ž‘ ๊ณผ์ •

 

๋˜ํ•œ ์‚ฌ์šฉ์ž๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ปดํ“จํ„ฐ์— ์ž์›์— ์ง์ ‘ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ๊ณผ์ •์„ ์ง์ ‘ ํ•ธ๋“ค๋ง์„ ํ•ด์•ผ ํ•จ.

ํ•˜์ง€๋งŒ ์ด๋•Œ ๋ถ€์ฃผ์˜๋กœ ์ธํ•ด ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ์ž์ฒด๋ฅผ ํŒŒ๊ดดํ•  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜์ด ์žˆ์Œ.

ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ฝœ๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์š”์ฒญ๋งŒ ํ•˜๊ณ  ๊ฒฐ๊ณผ๋งŒ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋˜๋ฏ€๋กœ ์ปดํ“จํ„ฐ์˜ ์‹œ์Šคํ…œ์ด ํŒŒ๊ดด๋˜๋Š” ์ผ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Œ

 

x64 ์‹œ์Šคํ…œ ์ฝœ (Syscall)์˜ ๋™์ž‘ ์›๋ฆฌ

์‹œ์Šคํ…œ ์ฝœ์€ ํ•จ์ˆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ธ์ž๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์ „๋‹ฌํ•ด ์ฃผ์–ด์•ผํ•œ๋‹ค. x64์•„ํ‚คํ…์ณ์—์„œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๋˜ํ•œ rax๋กœ ๋ฌด์Šจ ํ–‰๋™์„ ์‹คํ–‰ํ•  ๊ฒƒ์ธ์ง€ ์•Œ๋ ค์ค€๋‹ค. 

 

์š”์ฒญ: rax

์ธ์ž ์ˆœ์„œ: rdi → rsi → rdx → rcx → r8 → r9 → stack

 

์ดํ•ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ด๋ณด์ž.

 

[Register] 
rax = 0x1   //write์ด๋ผ๋Š” ํ•จ์ˆ˜ ์‹คํ–‰ํ•ด์ค˜
rdi = 0x1   //write์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž
rsi = 0x401000  //write์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž
rdx = 0xb   //write์˜ ์„ธ ๋ฒˆ์งธ ์ธ์ž

[Memory]
0x401000 | "Hello Wo"   
0x401008 | "rld"    

[Code]  
syscall //์ด๊ฑธ ํ˜ธ์ถœํ–ˆ์œผ๋ฏ€๋กœ rax, rdi, rsi, rdx์— ์žˆ๋Š” ์ •๋ณด๋กœ ํ•จ์ˆ˜ write(0x1, 0x401000, 0xb)์‹คํ–‰

------------
[๊ฒฐ๊ณผ]
Hello World

 

x64 syscall ํ…Œ์ด๋ธ”

syscall rax arg0 (rdi) arg1 (rsi)  arg2 (rdx)
read 0x00 unsigned int fd char *buf size_t count
write 0x01 unsigned int fd const char *buf size_t count
open 0x02 const char *filename int flags umode_t mode
close 0x03 unsigned int fd    
mprotect 0x0a unsigned long start size_t len unsigned long prot
connect 0x2a int sockfd struct sockaddr * addr int addrlen
execve 0x3b const char *filename const char *const *argv const char *const *envp

 

๊ฐ„๋‹จํ•˜๊ฒŒ ํŒŒ์ผ์„ open ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์— ํŒŒ์ผ์„ ORW(Open, Read, Write)ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

push 0x67
mov rax, 0x616c662f706d742f ; ํŒŒ์ผ ์ด๋ฆ„
push rax
mov rdi, rsp    ; rdi = "/tmp/flag" ๊ฐ€๋ฆฌํ‚ด
xor rsi, rsi    ; rsi = 0 ; RD_ONLY
xor rdx, rdx    ; rdx = 0
mov rax, 2      ; rax = 2 ; syscall_open
syscall         ; open("/tmp/flag", RD_ONLY, NULL)

 

x86 ์‹œ์Šคํ…œ ์ฝœ์˜ ๋™์ž‘ ์›๋ฆฌ

x86์˜ cdecl์—์„œ๋Š” ๋ณดํ†ต syscall ๋ง๊ณ  int 0x80์œผ๋กœ ๋Œ€์‹ ํ•œ๋‹ค. ๋‘˜์€ ๊ฑฐ์˜ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•œ๋‹ค!

int๋Š” interrupt์˜ ์•ฝ์ž, 0x80์€ "system call interrupt"์„ ์˜๋ฏธํ•œ๋‹ค. int 0x80์„ ์‹คํ–‰ํ•˜๋ฉด OS์—์„œ ์œ„์—์„œ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ „๋‹ฌํ•ด์ค€ ์ธ์ž๋“ค์— ๋งž๋Š” ์‹œ์Šคํ…œ์ฝœ์„ ํ•œ๋‹ค.

 

x86๋„ x64์™€ ๋™์ผํ•˜๊ฒŒ ์‹œ์Šคํ…œ ์ฝœ์„ ํ•  ๋•Œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š”๋ฐ, ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค!

(์ฐธ๊ณ ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ทœ์•ฝ์—์„œ callํ•  ๋•Œ๋Š” ์ธ์ž๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์•„๋‹Œ ์Šคํƒ์— pushํ•œ๋‹ค!! ์ฃผ์˜!)

 

์š”์ฒญ : eax

์ธ์ž ์ˆœ์„œ : ebx -> ecx -> edx -> esi -> edi -> ebp

 

ํ…Œ์ด๋ธ” ์ •๋ณด : Linux system call table ์ •๋ฆฌ(32bit, 64bit) (tistory.com)

 

ํ”„๋กœ์‹œ์ €

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

ํ”„๋กœ์‹œ์ €๋„ ์ด๋ฆ„์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์‹œ์Šคํ…œ ์ฝœ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ด€์ 

๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ์Šคํ…œ์ฝœ์—์„œ๋Š” ์–ด๋–ค ์ทจ์•ฝ์ ์ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์•„๋ณด์ž. ์‹œ์Šคํ…œ์ฝœ์˜ ํ๋ฆ„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ํ”„๋กœ์„ธ์„œ์— ์‹œ์Šคํ…œ์ฝœ ๋ช…๋ น์–ด ์ „๋‹ฌ
  2. ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ปค๋„ ๋ชจ๋“œ์— ์ง„์ž…ํ•จ + ์ปค๋„๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ ์ง„์ž… ์ฝ”๋“œ(Entry Point)๋ฅผ ์‹คํ–‰ 
  3. entry point์—์„œ๋Š” ์›๋ž˜ ์ฝ”๋“œํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ”„๋กœ์„ธ์„œ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•จ (ํ•จ์ˆ˜ ํ”„๋กค๋กœ๊ทธ์ฒ˜๋Ÿผ)
  4. ์ดํ›„ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ €์žฅํ•ด๋†จ๋˜ ์ƒํƒœ๋ฅผ ๊บผ๋‚ด์„œ ์›๋ž˜์˜ ํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐ

์—ฌ๊ธฐ์„œ entry point๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋“œ์™€ ์ปค๋„ ๋ชจ๋“œ๊ฐ€ ๊ต์ฐจ๋˜๋Š” ์ง€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๊ณต๊ฒฉ ๋Œ€์ƒ์ž„!

 

x86-64 ์‹œ์Šคํ…œ์ฝœ ํ๋ฆ„๋„
x86 ์‹œ์Šคํ…œ์ฝœ ํ๋ฆ„๋„

โ—entry point์—์„œ๋Š” ์›๋ž˜ ์ฝ”๋“œํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ "ํ”„๋กœ์„ธ์„œ ์ƒํƒœ๋ฅผ ์ €์žฅ"ํ•˜๋Š” ์—ญํ• ์„ ํ•จ (ํ•จ์ˆ˜ ํ”„๋กค๋กœ๊ทธ์ฒ˜๋Ÿผ) 

๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋ณดํ˜ธ ๊ธฐ๋ฒ•

  • SMEP(Supervisor Mode Execution Protection) : ์ปค๋„ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ์˜ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ๋ง‰๋Š” ๊ธฐ๋ฒ• (NX๋ž‘ ์œ ์‚ฌ)
  • SMAP(Supervisor Mode Access Protection) : ๋ช‡๋ช‡ ์˜ˆ์™ธ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ปค๋„๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์ ‘๊ทผ ์ž์ฒด๋ฅผ ๋ง‰๋Š” ๊ธฐ๋ฒ•

 

 

references

๋“œ๋ฆผํ•ต x86 Assembly๐Ÿค–: Essential Part(2)   

๋“œ๋ฆผํ•ต https://dreamhack.io/lecture/courses/36  

profile

rosieblue

@Rosieblue

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!