Skip to main content
  1. Posts/
  2. Today I Learned/

CSAPP 4.1 The Y86-64 Instuction Set Architecture

·615 words·3 mins
Jiho Kim
Author
Jiho Kim
๋‹ฌ๋ ค ๋˜ ๋‹ฌ๋ ค

๐Ÿ“ ์ƒ์„ธ ์ •๋ฆฌ
#

  • ISA๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ๋“ค, ๋ช…๋ น์–ด๋“ค, ์ธ์ฝ”๋”ฉ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ปจ๋ฒค์…˜ ์„ธํŠธ ๋“ฑ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•œ๋‹ค.
  • 4.1.1 Programmer-Visible State
    • Y86-64 ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ ๋ช…๋ น์–ด๋Š” ํ”„๋กœ์„ธ์„œ ์ƒํƒœ์˜ ์ผ๋ถ€๋ฅผ ํŒ๋…ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์ด๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ฐ€์‹œํ™” (programmer-visible) ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.
        • programmer์€ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ ํ˜น์€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์˜๋ฏธํ•จ
    • Y86-64์˜ ๋ ˆ์ง€์Šคํ„ฐ๋Š” x86-64์™€ ๋น„์Šทํ•˜๊ฒŒ %rax %rbx… %r14๊นŒ์ง€ ์žˆ๋‹ค.
      • ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ๋Š” 64๋น„ํŠธ word๋ฅผ ์ €์žฅํ•˜๊ณ ,
      • %rsp๋Š” ์Šคํƒ ํฌ์ธํ„ฐ๋กœ ์‚ฌ์šฉ๋˜๊ณ …
      • ์ •๋ณด ์กฐ๊ฑด ์ฝ”๋“œ๋Š” ZF, SF, OF 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • PC (Program Counter)์€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๋ณด์œ ํ•œ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์œ ์ง€ํ•œ๋‹ค.
      • ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ํ”„๋กœ๊ทธ๋žจํ•  ๊ฒƒ
  • 4.1.2 Y86-64 Instructions
    • ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค Y86-64 ISA๋Š” x86-64์˜ ์„œ๋ธŒ์…‹์ด๋‹ค.
      • 8๋ฐ”์ดํŠธ ์ •์ˆ˜ ์—ฐ์‚ฐ๋งŒ์„ ํฌํ•จ
      • ๋” ์ ์€ ์–ด๋“œ๋ ˆ์‹ฑ ๋ชจ๋“œ
      • ๋” ์ž‘์€ ์—ฐ์‚ฐ ์„ธํŠธ
      • 8๋ฐ”์ดํŠธ๋งŒ ํ•˜๋‹ˆ๊นŒ, ๊ทธ๋ƒฅ word๋ผ๊ณ  ๋ถˆ๋Ÿฌ๋„ ๋œ๋‹ค!
    • movq๋Š” ir, rr, mr, rm movq 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
      • i๋Š” immediate๊ฐ’, r์€ ๋ ˆ์ง€์Šคํ„ฐ, m์€ ๋ฉ”๋ชจ๋ฆฌ
    • ์ •์ˆ˜์—ฐ์‚ฐ์€ addq, subq, andq, xorq 4๊ฐ€์ง€๋กœ, ๋ ˆ์ง€์Šคํ„ฐ ๋ฐ์ดํ„ฐ์—๋งŒ ๋™์ž‘ํ•˜๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.
      • ๋ฌผ๋ก  ZF, SF, OF๋„ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
    • ์ ํ”„ ๋ช…๋ น์–ด๋Š” jmp, jle, jl, je, jne, jge, jg 7๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    • ์กฐ๊ฑด๋ถ€ ์ด๋™์—๋Š” cmovle, cmovl, cmove, cmovne, cmovge, cmovg 6๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    • call์€ ์Šคํƒ์— return address๋ฅผ pushํ•˜๊ณ  jumpํ•œ๋‹ค.
    • pushq, popq๋„ ๋ฌผ๋ก  ์žˆ๋‹ค.
    • hlt์ด ๋‚˜์˜ค๋ฉด ์ƒํƒœ์ฝ”๋“œ๊ฐ€ HLT๋กœ ์„ค์ •๋œ ์ƒํƒœ์—์„œ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ •์ง€๋œ๋‹ค.
  • 4.1.3. Insturction Encoding
    • ๊ฐ instuction์—๋Š” ์–ด๋–ค ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•œ์ง€์— ๋”ฐ๋ผ 1~10๋ฐ”์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • ๋ชจ๋“  insturction์€ ์œ ํ˜•์„ ์‹๋ณ„ํ•˜๋Š” ์ดˆ๊ธฐ ๋ฐ”์ดํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์œ„์˜ 4๋น„ํŠธ๋Š” ์ฝ”๋“œ๋ถ€๋ถ„, ์•„๋ž˜ 4๋น„ํŠธ๋Š” ํ•จ์ˆ˜ ๋ถ€๋ถ„์ด๋‹ค.
      • ์ฝ”๋“œ๋ถ€๋ถ„์€ 0 ~ 0xB ๊นŒ์ง€์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.
      • ํ•จ์ˆ˜๋ถ€๋ถ„์€ ๊ด€๋ จ instuction์ด ๊ฐ™์€ ์ฝ”๋“œ๋ถ€๋ถ„์„ ๊ณต์œ ํ•  ๋•Œ๋งŒ ์œ ์˜ํ•˜๋‹ค. (OPq ๋“ฑ)
        • jmp๋Š” 0x70์ด์–ด์•ผํ•˜๋Š”๊ฒƒ์ฒ˜๋Ÿผ.
    • ๋’ค์˜ 1๋ฐ”์ดํŠธ๋Š” ๋ ˆ์ง€์Šคํ„ฐ ์‹๋ณ„์ž์ด๋‹ค.
      • x86-64์™€ ์ผ์น˜ํ•˜๊ฒŒ ํ•˜๊ฒ ๋‹ค.
    • ๋’ค์˜ 8๋ฐ”์ดํŠธ๋Š” ์ƒ์ˆ˜ word ์˜์—ญ์ด๋‹ค.
    • ์ผ๋ถ€ ๋ช…๋ น์–ด๋Š” ๊ธธ์ด๊ฐ€ 1๋ฐ”์ดํŠธ๋ฟ์ด ์•ˆ๋˜์ง€๋งŒ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ƒ์ˆ˜ํŒŒํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ํ•˜๋ฉด ์ปค์ง„๋‹ค.
    • x86-64์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค Little Endian์ด๋‹ค!!
      • ์˜ˆ๋ฅผ ๋“ค์–ด rmmovq %rsp, 0x123456789abcd(%rdx)๋Š”
      • rmmovq -> 40, %rsp %rdx -> 42, ์ƒ์ˆ˜๋Š” ๋ฆฌํ‹€์—”๋””์•ˆ ์ฒ˜๋ฆฌ๋˜์–ด
      • 40 42 cd ab 89 67 45 23 01 00 ์œผ๋กœ ์ธ์ฝ”๋”ฉ๋  ๊ฒƒ์ด๋‹ค.
  • 4.1.4 Y86-64 Exceptions
    • ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์˜ ์ „์ฒด ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒํƒœ ์ฝ”๋“œ๋„ ์žˆ๋‹ค.
      • ๋ชจ๋‘ ์ •์ƒ์ธ AOK
      • halt๋ฅผ ๋งŒ๋‚œ HLT
      • ์ž˜๋ชป๋œ ์ฃผ์†Œ๋ฅผ ๋งŒ๋‚œ ADR
      • ์ž˜๋ชป๋œ instruction์„ ๋งŒ๋‚œ INS
  • 4.1.5 Y86-64 Programs
    • Y86-64๋Š” x86-64์™€ ๋‹ฌ๋ฆฌ immediate ๊ฐ’์„ ์ด์šฉํ•œ ์—ฐ์‚ฐ์ด ์•ˆ๋˜๊ธฐ๋•Œ๋ฌธ์—, ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค.
    • “.“๋กœ ์‹œ์ž‘ํ•˜๋Š” word๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ์—๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€ ๋‹จ์–ด๋ฅผ ์‚ฝ์ž…ํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ ์ง€์‹œ์ด๋‹ค.
      • “.pos 0"์€ ์–ด์…ˆ๋ธ”๋Ÿฌ๊ฐ€ ์ฃผ์†Œ 0์—์„œ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
      38	# Stack starts here and grows to lower addresses
      39	    .pos 0x200
      40	stack:
      • ์ด์™€๊ฐ™์ด ์Šคํƒ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•ด์„œ ๋” ๋‚ฎ์€์ฃผ์†Œ๋กœ ํ™•์žฅ๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
      7	# Array of 4 elements
      8	    .align 8
      9	array :
      10	    .quad 0x000d000d000d
      11	    .quad 0x00c000c000c0
      12	    .quad 0x0b000b000b00
      13	    .quad 0xa000a000a000
      • ๋ฐฐ์—ด์˜ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, 8๋ฐ”์ดํŠธ ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
    • ์ด์™€ ๊ฐ™์ด Y86-64๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์šฐ๋ฆฌ์˜ ๋„๊ตฌ๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ์ด๊ธฐ์— ์šฐ๋ฆฌ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ, ๋ง์ปค, ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ ์œ„์ž„ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
  • 4.1.6 Some Y86-64 Instruction details
    • pushq ๋ช…๋ น์–ด๋Š” ์Šคํƒํฌ์ธํ„ฐ๋ฅผ ๋ชจ๋‘ 8๋งŒํผ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค.
      • ๊ทธ๋ ‡๋‹ค๋ฉด pushq %rsp๋Š”?
      1	.text
      2	.globl pushtest
      3	pushtest:
      4	movq	%rsp, %rax	Copy stack pointer
      5	pushq	%rsp	Push stack pointer
      6	Popd	%rdx	Pop it back
      7	subq %rdx, %rax	Return 0 or 4
      8	ret
      • x86-64์—์„œ, ์œ„ ์ฝ”๋“œ๋Š” ์–ธ์ œ๋‚˜ 0๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
        • ์ด๋Š” 4๋งŒํผ ๋•ก๊ธฐ๊ธฐ ์ „์˜ ๊ธฐ์กด %rsp๊ฐ’์„ pushํ•˜๋Š”๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
      1	.text
      2	.globl poptest
      3	poptest:
      4	movq	%rsp, %rdi	Save stack pointer
      5	pushq	$0xabcd	Push test value
      6	popq	%rsp	Pop to stack pointer
      7	movq	%rsp, %rax	Set popped value as return value
      8	movq	%rdi, %rsp	Restore stack pointer
      9	ret
      • ํ•ด๋‹น ์ฝ”๋“œ๋„ ์–ธ์ œ๋‚˜ 0xabcd๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
        • ์ด๋Š” ๋˜ํ•œ %rsp์— ๊ฐ’์„ ๋„ฃ๊ณ  %rsp๋ฅผ ์›€์ง์ž„์„ ์˜๋ฏธํ•œ๋‹ค.

โ”์งˆ๋ฌธ
#

์ธ์ฝ”๋”ฉ๋œ ๋ฐ”์ดํŠธ์— ๋”ฐ๋ผ ํ•ด์„ํ•ด์„œ ๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ๋งŒ์œผ๋กœ ๋ณต์žกํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ„๋‹ค๋Š”๊ฑด ์•Œ๊ฒ ๋Š”๋ฐ, ๊ทธ๋ž˜์„œ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋“ค์„ ์–ด๋–ป๊ฒŒ ์—ฐ์‚ฐํ•˜๋Š”๊ฑฐ์ง€?

ํ”„๋กœ์„ธ์„œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ํ๋ฅด๋Š” ๊ธธ ์ž์ฒด๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์—ด๊ณ  ๋‹ซ๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด addq %rax, %rdx๊ณผ ๊ฐ™์€ ์ธ์ฝ”๋”ฉ์ด ๋“ค์–ด์˜ค๋ฉด, ์ œ์–ด ์œ ๋‹›์—์„œ ๋”ํ•˜๊ธฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ALU๋ฅผ ํ‚ค๊ณ , %rax๊ณผ %rdx์˜ ํ†ต๋กœ๋ฅผ ์—ด์–ด์„œ ๊ฒฐ๊ตญ ๊ฒฐ๊ณผ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์ „์•• ํŒจํ„ด์„ ์–ป๋Š”๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ
#