ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REVERSING ์‹œ์ž‘ํ•˜๊ธฐ - ๊ธฐ์ดˆ ๊ฐœ๋… 4 :: ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด
    SECURITY/REVERSING 2020. 7. 8. 17:13

     

    ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด

     

    : ์ž์—ฐ์–ด์™€ ๊ธฐ๊ณ„์–ด ์‚ฌ์ด๋กœ, CPU ์˜ ๋ช…๋ น์–ด๋“ค์„ ์˜์–ด์˜ ์•ฝ์ž์ธ ๊ธฐํ˜ธ๋กœ ํ‘œ๊ธฐํ•œ ๊ฒƒ์ด๋‹ค.

    ์ด ๊ธฐํ˜ธ๋“ค์€ CPU ์˜ ๋ช…๋ น์–ด(๊ธฐ๊ณ„์–ด) ์™€ ์ผ๋Œ€์ผ ๋Œ€์‘ํ•œ๋‹ค.

    ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ๋‹ค๋ฅด๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๋งŒ๋“ค์–ด์ง€๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋„ ๋‹ค๋ฅด๋‹ค.

    ๊ธฐ๊ณ„์–ด๋ณด๋‹ค๋Š” ๋†’์€ ์ˆ˜์ค€์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    * ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ถ„๋ฅ˜

    ๊ธฐ๊ณ„์–ด (machine language) <-> ์–ด์…ˆ๋ธ”๋ฆฌ์–ด(assembly language) <-> ๊ณ ๊ธ‰ ์–ธ์–ด(high-level language)

    ๊ธฐ๊ณ„์–ด์™€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๊ฐ€ ์ €๊ธ‰ ์–ธ์–ด, Python, C, Java ๋“ฑ์ด ๊ณ ๊ธ‰ ์–ธ์–ด์— ์†ํ•œ๋‹ค.

     

    * ์–ด์…ˆ๋ธ”๋Ÿฌ(assembler) : ๊ธฐํ˜ธ๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

     

     

    1 ๊ฐœ์š”

    1.1 AT&T ๋ฐฉ์‹๊ณผ Intel ๋ฐฉ์‹

     

    ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋Š” AT&T ์™€ Intel ์˜ ๋‘ ๊ฐ€์ง€ (์„œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”) ๋ฌธ๋ฒ•์„ ๊ฐ€์ง„๋‹ค.

     

      AT&T ์˜ˆ์‹œ Intel ์˜ˆ์‹œ
    ์ ‘๋‘์‚ฌ ๋ ˆ์ง€์Šคํ„ฐ '%;, ๊ฐ’ '$" movl #1, %a
    int $0x80
    16์ง„์ˆ˜ 'h' , 2์ง„์ˆ˜ 'b' ,
    6์ง„์ˆ˜ '0'
    mov a, 1
    int 80h
    ์ ‘๋ฏธ์‚ฌ long ์€ 'l' , word ๋Š” 'w' , byte ๋Š” 'b' ๋“ฑ movw %ax, %bx
    movl %eax, %ebx
    ์—†์Œ byte ptr
    dword str[ebx]
      ์ ‘๋ฏธ์‚ฌ์— ๋”ฐ๋ผ ์˜คํผ๋žœ๋“œ์˜ ํฌ๊ธฐ๋„ ์ •ํ•ด์ง      
    ์˜คํผ๋žœ๋“œ์˜ ์œ„์น˜ sourse (์›๋ณธ) ๋‹ค์Œ์— destination (๋ชฉ์ ์ง€)  instr sourse, dest destination (๋ชฉ์ ์ง€) 
    ๋‹ค์Œ์— sourse (์›๋ณธ)
    instr dest, source
    ๋ฉ”๋ชจ๋ฆฌ
    ์˜คํผ๋žœ๋“œ
    ๊ธฐ๋ณธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ( ) ์‚ฌ์ด movl (%eax), %ebx ๊ธฐ๋ณธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ [ ] ์‚ฌ์ด mov ebx, [eax]
    ๋ช…๋ น ์ˆ˜ํ–‰   movl 0x20(%ebx),%eax   mov eax, [ebx+20h]
      instr %segreg:disp(base, index, scale).foo instr foo, segreg:[base+index*scale+disp]

     

    1.2 Opcode ์™€ Operands

     

    ๋ช…๋ น์–ด๋Š” Opcode(์—ฐ์‚ฐ์ž) ๋ถ€๋ถ„๊ณผ Operand(์ฃผ์†Œ) ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

    Opcode (Operation Code) : ๋ช…๋ น์–ด์—์„œ ์—ฐ์‚ฐ ๋™์ž‘์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„

    Operand : ์—ฐ์‚ฐ์˜ ๋Œ€์ƒ. ์ฆ‰, Opcode ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜(์ฃผ์†Œ)

     

    ์š”์•ฝํ•˜์ž๋ฉด, ๋ช…๋ น์–ด์™€ ์ธ์ž!

     

    * Opcode ๋Š” Operand ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ 0-์ฃผ์†Œ ๋ช…๋ น, 1-์ฃผ์†Œ ๋ช…๋ น, 2-์ฃผ์†Œ ๋ช…๋ น, 3-์ฃผ์†Œ ๋ช…๋ น์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    0-์ฃผ์†Œ ๋ช…๋ น : ๋‹จํ•ญ ์—ฐ์‚ฐ. ex. PUSH, POP

    1-์ฃผ์†Œ ๋ช…๋ น : ๋ˆ„์‚ฐ๊ธฐ(Accumulator)๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ์‚ฐ ์ˆ˜ํ–‰

    2-์ฃผ์†Œ ๋ช…๋ น : ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์—ฐ์‚ฐ์˜ ํ˜•ํƒœ. ์—ฐ์‚ฐ ํ›„ ์ž…๋ ฅ ์ž๋ฃŒ์˜ ๊ฐ’์ด ๋ณ€ํ™”ํ•œ๋‹ค.

      (๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ๊ณผ ์ž…๋ ฅ ์ž๋ฃŒ๋ฅผ ์œ„ํ•œ ๋‘ operand)

    3-์ฃผ์†Œ ๋ช…๋ น : ์—ฐ์‚ฐ ํ›„ ์ž…๋ ฅ ์ž๋ฃŒ์˜ ๊ฐ’์ด ๋ณด์กด๋œ๋‹ค. ๋ช…๋ น์–ด์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๊ธธ์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธธ์ด๋Š” ๊ฐ€์žฅ ์งง๋‹ค.

      (ํ•œ operand ๋Š” ๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ, ๋‚˜๋จธ์ง€ ๋‘ operand ๋Š” ์ž…๋ ฅ ์ž๋ฃŒ)

     

     

    2 ๋ช…๋ น์–ด

     

    ๋ช…๋ น์–ด ์ˆ˜ํ–‰ ๋‚ด์šฉ ๋ช…๋ น์–ด ์ˆ˜ํ–‰ ๋‚ด์šฉ
    MOV ๊ฐ’์„ ๋„ฃ๋Š” ์—ญํ•  (๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋จ)
    (๋ฐ์ดํ„ฐ ์ด๋™)
    LEA ์ฃผ์†Œ๋ฅผ ๋„ฃ๋Š” ์—ญํ• 
    (๋ฉ”๋ชจ๋ฆฌ์˜ ์˜คํ”„์…‹๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋กœ๋“œ)
    Load Effective Address to Register
    PUSH Stack ์— ๋„ฃ๊ธฐ POP Stack ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
    ADD (CARRY ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ ) ๋”ํ•˜๊ธฐ SUB (CARRY ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ ) ๋นผ๊ธฐ
    MUL ๊ณฑํ•˜๊ธฐ DIV ๋‚˜๋ˆ„๊ธฐ
    INC Operand ๋‚ด์šฉ์„ 1 ์ฆ๊ฐ€ DEC Operand ๋‚ด์šฉ์„ 1 ๊ฐ์†Œ
    AND ๋…ผ๋ฆฌ AND ๊ฒŒ์ดํŠธ OR ๋…ผ๋ฆฌ OR ๊ฒŒ์ดํŠธ
    XOR ๋ฐฐํƒ€ ๋…ผ๋ฆฌ ํ•ฉ (Exclusive OR) NOT ๋น„ํŠธ ๋ฐ˜์ „ (1์˜ ๋ณด์ˆ˜)
    CMP ๋‘ Operand ๋น„๊ต
    Compare
    (๋‘ ๊ฐ’์„ ๋นผ์„œ ๊ฐ™์œผ๋ฉด 0 -> ZF ๊ฐ€ 1)
    JMP Operand ์œ„์น˜๋กœ ์ ํ”„ (JUMP)
    (์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„, ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ค„ ์ˆ˜๋„ ์žˆ์Œ)
    JE ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์œผ๋ฉด ์ ํ”„ (๋ถ„๊ธฐ)
    Jump on Equal
    JNE ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๋ฉด ์ ํ”„ (๋ถ„๊ธฐ)
    Jump on Not Equal
    ZF ๊ฐ€ 0 ์ด์–ด์•ผ JNE ์—์„œ์˜ ์ฃผ์†Œ๋กœ ๋„˜์–ด๊ฐ
    NOP No OPeration
    ์•„๋ฌด ๋ช…๋ น๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ
    NOP ๋ช…๋ น์–ด ์ž์ฒด๋Š” 1 byte ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ , ๋ช…๋ น์–ด ์‚ฌ์ด์˜ ๋นˆ๊ณต๊ฐ„์„ ์ฑ„์›Œ์ค€๋‹ค.
    ์“ฐ๋ ˆ๊ธฐ ๊ฐ’. ๊ณต๊ฐ„ ์ฑ„์šฐ๋Š” ~ like ์งˆ์†Œ
       
    CALL ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ
    (์ด ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ณต๊ท€ ์ฃผ์†Œ๋ฅผ Stack ์— PUSH)
    RET CALL ๋กœ (Stack ์— PUSH ๋œ ์ฃผ์†Œ๋กœ) ๋ณต๊ท€
    Return from CALL

     

     

    3. ์ฃผ์†Œ ์ง€์ • ๋ฐฉ์‹

    - ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ ์ง€์ • (Immediate Addressing)

    : ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ง์ ‘ ์ง€์ •

      ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค. (โˆต ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ CPU ์•ˆ์— ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋ž‘ ์ƒํ˜ธ ์ž‘์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.)

    ex. mov edx, eax

     

    - ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ง€์ • (Direct Addressing)

    : ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹

      ์ฆ‰, ์ฃผ์†Œ ํ•„๋“œ์— ์œ ํšจ ์ฃผ์†Œ(=Operand ์˜ ์ฃผ์†Œ)๋ฅผ ์ง์ ‘ ์ €์žฅํ•œ๋‹ค.

     ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ฃผ์†Œ ์ง€์ • ๋ฐฉ์‹์ด๋‹ค.

      ํ•œ ๋ฒˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.

    (์ฃผ๋กœ ํ”ผ์—ฐ์‚ฐ์ž ํ•˜๋‚˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.)

    ex. mov eax, [8080h]

     

    - ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ„์ ‘ ์ฃผ์†Œ ์ง€์ • (Indirect Affressing)

    : ๋ ˆ์ง€์Šคํ„ฐ์— ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ , ํ•ด๋‹น ์ฃผ์†Œ์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋„๋ก ๋งŒ๋“  ๊ฒƒ์ด๋‹ค. (์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํฌ์ธํ„ฐ)

      ์ฃผ์†Œ ํ•„๋“œ์— Operand ๊ฐ€ ์ €์žฅ๋œ ๊ธฐ์–ต์žฅ์น˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ณ  ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹

      ์ฆ‰, ์ฃผ์†Œ ํ•„๋“œ์— ์œ ํšจ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ธฐ์–ต์žฅ์น˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

      ๋‘ ๋ฒˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    (์„ธ๊ทธ๋จผํŠธ(Seagment) : ์˜คํ”„์…‹(offset) ํ˜•์‹)

    ex. DS:[BX]

     

    - ์ธ๋ฑ์Šค ์ฃผ์†Œ ์ง€์ •

    : ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ„์ ‘ ์ง€์ • ๋ฐฉ์‹์— ๋ณ€์œ„๊ฐ€ ๋”ํ•ด์ง„ ๋ฐฉ์‹ (์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋ฐฐ์—ด)

    ex. [BX + 20h]

     

    - ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ ์ฃผ์†Œ ์ง€์ •
    : ์‹ค์ œ ์ฃผ์†Œ ์ƒ์„ฑ์„ ์œ„ํ•ด ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ (BX/BP) ์™€ ์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ (DI/SI) ๋ฅผ ๊ฒฐํ•ฉ

    ์ฃผ๋กœ 2์ฐจ์› ๋ฐฐ์—ด์˜ ์ฃผ์†Œ ์ง€์ •์— ์‚ฌ์šฉํ•œ๋‹ค.

    ex. [BX + SI]

     

    - ๋ณ€์œ„๋ฅผ ๊ฐ–๋Š” ์ธ๋ฑ์Šค ์ฃผ์†Œ ์ง€์ •

    : ์‹ค์ œ ์ฃผ์†Œ ์ƒ์„ฑ์„ ์œ„ํ•ด ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ, ์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ, ๋ณ€์œ„ ๊ฒฐํ•ฉ

    ex. [BX + SI + 20h]

     

    ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ„์ ‘ ์ฃผ์†Œ ์ง€์ •, ์ธ๋ฑ์Šค ์ฃผ์†Œ ์ง€์ •, ๋ฒ ์ด์Šค ,, ๋“ฑ๋“ฑ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ์ฐจ์ด๋Š” ์šฉ๋„ !!!

    ์šฉ๋„์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค.

     

     

    4. call

    - ์‹œ์Šคํ…œ ์ฝœ (System call) ์ด๋ž€

    : ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์šด์˜ ์ฒด์ œ์—๊ฒŒ ์–ด๋– ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ํ•˜๋‚˜์˜ ์ˆ˜๋‹จ

    User mode ์—์„œ ์šด์˜ ์ฒด์ œ(kernel mode) ์˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.

    (์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ๊ตฌ ์ ‘๊ทผํ•˜๋ฉด ๊ณค๋ž€ํ•œ ๊ทธ๋Ÿฐ ๊ฒƒ๋“ค...)

     

    ์ข…๋ฅ˜: ํ”„๋กœ์„ธ์Šค ์ œ์–ด (Porcess Control), ํŒŒ์ผ ์กฐ์ž‘(File Manipulation), ์žฅ์น˜ ๊ด€๋ฆฌ (Device Management), ์ •๋ณด ์œ ์ง€ (Information Maintenance), ํ†ต์‹  (Communication)

     

    ex. open(), read(), write() ...

    ์ฃผ์˜ ! printf() ๋Š” system call ์€ ์•„๋‹ˆ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ !!!! (stdio.h)

     

     

    5. ํ•จ์ˆ˜

    - ํ•จ์ˆ˜ ํ”„๋กค๋กœ๊ทธ

    ๋ฒ ์ด์Šค ํฌ์ธํ„ฐ (EBP) ๋ฅผ Stack ์— ์ €์žฅํ•˜๊ณ  ํ˜„์žฌ ์Šคํƒ ํฌ์ธํ„ฐ (ESP) ๋ฅผ ๋ฒ ์ด์Šค ํฌ์ธํ„ฐ์— ์ €์žฅํ•œ๋‹ค.

    ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ (CALL) ๋  ๋•Œ, ์Šคํƒ ํ”„๋ ˆ์ž„(Stack Frame) ์„ ๊ตฌ์„ฑํ•ด์ฃผ๋Š” ์ž‘์—…์„ ์ผ์ปซ๋Š”๋‹ค.

     

    push eip

    push ebp (SFP)

    mov ebp, esp

     

    - ํ•จ์ˆ˜ ์—ํ•„๋กœ๊ทธ 

    ํ˜„์žฌ ์Šคํƒ ํฌ์ธํ„ฐ๋ฅผ ๋ฒ ์ด์Šค ํฌ์ธํ„ฐ๋กœ ๋ฐ”๊พผ ํ›„ RET ์„ ํ†ตํ•ด ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ ํ”„ํ•œ๋‹ค.

    ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰ ๊ณผ์ •์„ ํ†ตํ•ด ESP ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ํ›„์— EBP ์™€ ๋™๊ธฐํ™”ํ•ด์ฃผ๋Š” ์ž‘์—…์ด๋‹ค.

     

    mov esp, ebp (leave)

    pop ebp (leave)

    ret

     

    (ret ::

    pop eip

    jmp eop)

     

    (* 64 bit ํ™˜๊ฒฝ์—์„œ๋Š” esp / ebp ๊ฐ€ ํ™•์žฅ๋˜์–ด rsp / rbp ๊ฐ€ ๋œ๋‹ค.)

     

    ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์ „์ฒด ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    1. ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•  Parameter ์„ Stack ์— ๋„ฃ๊ณ  ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ์ง€์ ์œผ๋กœ ์ ํ”„  << CALL

    2. ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์Šคํƒ ํ”„๋ ˆ์ž„ ์„ค์ •  << ํ”„๋กค๋กœ๊ทธ

    3. ํ•จ์ˆ˜ ์ˆ˜ํ–‰

    4. ์ฒ˜์Œ ์ˆ˜ํ–‰ํ•œ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์Šคํƒ์„ ๋ณต์›  << ์—ํ•„๋กœ๊ทธ

     

    ์ฆ‰, ํ”„๋กค๋กœ๊ทธ์™€ ์—ํ•„๋กœ๊ทธ๋Š” ์Šคํƒ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ ๋งˆ์ง€๋ง‰์— ๋™๊ธฐํ™”ํ•ด์ฃผ๋Š” ์ž‘์—…!

     

     

    * Stack Frame ์Šคํƒ ํ”„๋ ˆ์ž„

    :  (ESP ๊ฐ€ ์•„๋‹Œ) EBP ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ ๋‚ด์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ณต๊ท€ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋ฒ•

      ์ฆ‰, ๊ฐ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์Šคํƒ์˜ ์˜์—ญ! 

    * EIP

    EIP (Extended Instruction Pointer) : ํ™•์žฅ๋œ ๋ช…๋ น ์ง€์‹œ์ž.

    ๋‹ค์Œ์— CPU ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ(๋ฉ”๋ชจ๋ฆฌ์˜, CODE ์˜ ์ฃผ์†Œ)์„ ๊ธฐ์–ต

     

    ๋Œ“๊ธ€

Designed by Tistory.