owned this note changed 6 years ago
Linked with GitHub

Hello World 的一生 - Wen Liao

由於場地問題,第二天我們移動到另一棟大樓啦!議程教室變動請見網站上的議程表

歡迎來到 https://hackmd.io/@coscup/2019 共筆

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

點擊本頁上方的 開始用 Markdown 一起寫筆記!
手機版請點選上方 按鈕展開議程列表。

How to create Hello World executable

My program doesn't work, and I don't know why
Environment: ubuntu 18.04, gcc 7, linux kernel 4.14

make -p 可以列出預設的規則

$ make CFLAGS="-save-temps" hello
cc -save-temps    hello.c   -o hello

CFLAGS="-save-temps" 保留 .i, .o, .s

  • .i : 展開巨集,800行,從系統的 CPP(C PreProcessor)複製進去
  • .s : assembly
    內容:
    兩大部分:資料+程式
    section .rodata( read only) string "hello world"
    section .text
  • .o : object file

reference: x86 ABI (Application Binary Interface)

ld --verbose | grep ENTRY
Entry(_start)

csu (C Start up Unit)

在 _start 的 section 內把 main 的程式碼透過 libC 呼叫與執行

init, fini => 在 start_main 前 hook 東西,callback

Runtime

  • System Call:
    execve system call @ linux/fs/exec.c

Regist_binfmt() 支援不同的 executable 格式

struct linux_binfmt {
    int (*load_binary)(struct linux_binprm *) -> load elf and execute
}

流程圖可以上講者部落格

Keyword

Sections, text, tss, data
ABI
Linker Script
ELF
Binutils
vDSO
ASLR
man proc

補充

malloc
Why use printf(), not write???

簡報 : http://tiny.cc/6fyabz

tags: COSCUP2019 系統軟體社群議程 IB201
Select a repo