Try   HackMD

2017q3 Homework3 (simulator)

contributed by <kevin550029>


研究 full-stack-hello

組譯器使用

  • 組譯 ( Assembling ): 將組合語言轉成機械語言
$ ./as_exec -h
Usage: as_exec [-w] [-x] [-o <out_file>] <in_file>
       -w Assemble <in_file> and write to an ELF file, see -o below
       -o if -w is specifed, <out_file> is used to store the object code
       -x Load <in_file> and execute it
  • 無參數: 組譯並執行
$ ./as_exec tests/hello.s
Hello World
  • -w: 組譯並輸出 ELF 格式目的檔 tests/hello.o
    • 目的檔ELF格式 ( Executable and Linking Format )
      • 可用來記錄目的檔 (object file)、執行檔 (executable file)、動態連結檔 (share object)、與核心傾印 (core dump) 檔等格式,並且支援較先進的動態連結與載入等功能
      • 參考 目的檔格式 (ELF)
$ ./as_exec -w tests/hello.s
  • -o: 組譯並輸出 ELF 到給定的路徑
$ ./as_exec -o tests/hello.o -w tests/hello.s
  • -x: 載入目的檔並執行
$ ./as_exec -x tests/hello.o
Hello World
  • 用 objdump 工具分析和觀察 ELF
    • 可以根據目的檔案來生成可讀性比較好的彙編檔 ( 顯示二進位檔案資訊 )
$ objdump -x tests/hello.o

tests/hello.o:     file format elf64-little
tests/hello.o
architecture: UNKNOWN!, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x0000000000000000

Program Header:
0x464c457f off    0x0000000000000000 vaddr 0x0000000100000002 paddr 0x0000000000000000 align 2**54
         filesz 0x0000000000000000 memsz 0x0000000000000000 flags -w- 10100
  INTERP off    0x0000000000000001 vaddr 0x00000000000000e8 paddr 0x0000000000000000 align 2**5
         filesz 0x0000000000000000 memsz 0x0000000000000018 flags ---
    0x20 off    0x0000000000000001 vaddr 0x0000000000000100 paddr 0x0000000000000000 align 2**5
         filesz 0x0000000000000000 memsz 0x000000000000001c flags ---

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
SYMBOL TABLE:
no symbols

架構分析

專案中包含幾個部份 driver, as, elf, opcode 和 vm