SlideShare a Scribd company logo
Submit Search
Upload
Hello world 的一生
Report
Wen Liao
Follow
•
11 likes
•
5,960 views
1
of
42
Hello world 的一生
•
11 likes
•
5,960 views
Download Now
Download to read offline
Report
Technology
從 User mode和 kernel mode討論一個Hello world執行檔從產生到執行發生的事情
Read more
Wen Liao
Follow
Recommended
Android Security Internals
Opersys inc.
1.9K views
•
68 slides
Device Tree for Dummies (ELC 2014)
Thomas Petazzoni
1.7K views
•
47 slides
Linux Internals - Part II
Emertxe Information Technologies Pvt Ltd
4K views
•
76 slides
LCU13: An Introduction to ARM Trusted Firmware
Linaro
30.4K views
•
26 slides
BusyBox for Embedded Linux
Emertxe Information Technologies Pvt Ltd
1.8K views
•
11 slides
Embedded Operating System - Linux
Emertxe Information Technologies Pvt Ltd
922 views
•
235 slides
More Related Content
What's hot
OPTEE on QEMU - Build Tutorial
Dalton Valadares
1.4K views
•
1 slide
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
Linaro
15.2K views
•
26 slides
Linux IO
Liran Ben Haim
2.6K views
•
24 slides
Basic Linux Internals
mukul bhardwaj
41.3K views
•
333 slides
Audio Drivers
Anil Kumar Pugalia
20.8K views
•
11 slides
Android Internals at Linaro Connect Asia 2013
Opersys inc.
4.4K views
•
53 slides
What's hot
(20)
OPTEE on QEMU - Build Tutorial
Dalton Valadares
•
1.4K views
Secure Boot on ARM systems – Building a complete Chain of Trust upon existing...
Linaro
•
15.2K views
Linux IO
Liran Ben Haim
•
2.6K views
Basic Linux Internals
mukul bhardwaj
•
41.3K views
Audio Drivers
Anil Kumar Pugalia
•
20.8K views
Android Internals at Linaro Connect Asia 2013
Opersys inc.
•
4.4K views
LAS16-406: Android Widevine on OP-TEE
Linaro
•
1.9K views
Inside Android's UI
Opersys inc.
•
7.6K views
Android Internals
Opersys inc.
•
14.1K views
Cellular technology with Embedded Linux - COSCUP 2016
SZ Lin
•
5.9K views
U-Boot - An universal bootloader
Emertxe Information Technologies Pvt Ltd
•
3K views
Bootloaders
Anil Kumar Pugalia
•
10K views
Secure boot general
Prabhu Swamy
•
361 views
U boot porting guide for SoC
Macpaul Lin
•
11.9K views
Building Embedded Linux Full Tutorial for ARM
Sherif Mousa
•
58.4K views
Learning AOSP - Android Linux Device Driver
Nanik Tolaram
•
4.4K views
OpenWrt From Top to Bottom
Kernel TLV
•
4.3K views
SFO15-200: Linux kernel generic TEE driver
Linaro
•
4.7K views
Video Drivers
Anil Kumar Pugalia
•
23.4K views
Interview preparation workshop
Emertxe Information Technologies Pvt Ltd
•
2.6K views
Similar to Hello world 的一生
from Source to Binary: How GNU Toolchain Works
National Cheng Kung University
13.5K views
•
63 slides
Hcsm lect-20120913
lusecheng
5.3K views
•
59 slides
運用 Docker 整合 Laravel 提升團隊開發效率
Bo-Yi Wu
5K views
•
124 slides
Build Your Own Android Toolchain from scratch
National Cheng Kung University
4.1K views
•
55 slides
Introduce to Linux command line
Wen Liao
16.6K views
•
70 slides
Ch01
jashliao
3.4K views
•
41 slides
Similar to Hello world 的一生
(20)
from Source to Binary: How GNU Toolchain Works
National Cheng Kung University
•
13.5K views
Hcsm lect-20120913
lusecheng
•
5.3K views
運用 Docker 整合 Laravel 提升團隊開發效率
Bo-Yi Wu
•
5K views
Build Your Own Android Toolchain from scratch
National Cheng Kung University
•
4.1K views
Introduce to Linux command line
Wen Liao
•
16.6K views
Ch01
jashliao
•
3.4K views
Continuous Delivery Workshop with Ansible x GitLab CI
Chu-Siang Lai
•
866 views
Docker 基礎介紹與實戰
Bo-Yi Wu
•
15.8K views
Cygwin intro
cri fan
•
947 views
Cygwin intro
cri fan
•
546 views
Continuous Delivery with Ansible x GitLab CI (2e)
Chu-Siang Lai
•
1.9K views
容器與 Gitlab CI 應用
Philip Zheng
•
2.8K views
2010 08-14 web-sitei18n
tsunghaolee
•
1.9K views
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Chu-Siang Lai
•
341 views
軟體組裝心得分享
Wen Liao
•
9.5K views
用 Drone 打造輕量級容器持續交付平台
Bo-Yi Wu
•
36.2K views
IoT開發平台NodeMCU
承翰 蔡
•
1.4K views
Clonezilla tutorial.v7
hs1250
•
2.1K views
Docker容器微服務 x WorkShop
Philip Zheng
•
1.2K views
Jenkins x GitLab CI
Yihsuan Chen
•
85 views
More from Wen Liao
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Wen Liao
430 views
•
9 slides
開放街圖 自助旅行的好幫手
Wen Liao
3.1K views
•
41 slides
GNU AS簡介
Wen Liao
3.1K views
•
18 slides
UPnP 1.0 簡介
Wen Liao
3.7K views
•
93 slides
故事:自由軟體和 Richard Stallman
Wen Liao
4.1K views
•
62 slides
Hello world在那邊?背景說明
Wen Liao
2.7K views
•
26 slides
More from Wen Liao
(16)
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Wen Liao
•
430 views
開放街圖 自助旅行的好幫手
Wen Liao
•
3.1K views
GNU AS簡介
Wen Liao
•
3.1K views
UPnP 1.0 簡介
Wen Liao
•
3.7K views
故事:自由軟體和 Richard Stallman
Wen Liao
•
4.1K views
Hello world在那邊?背景說明
Wen Liao
•
2.7K views
A successful git branching model 導讀
Wen Liao
•
2.1K views
GNU ld的linker script簡介
Wen Liao
•
15K views
Trace 程式碼之皮
Wen Liao
•
7.6K views
淺談Debian套件打包
Wen Liao
•
4.6K views
GNU Make, Autotools, CMake 簡介
Wen Liao
•
25.8K views
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
Wen Liao
•
2.8K views
GNU gettext簡介 - 以C語言為範例
Wen Liao
•
1.5K views
Guide to GStreamer Application Development Manual: CH1 to CH10
Wen Liao
•
4.1K views
Testing in python 2.7.3
Wen Liao
•
1.8K views
從組裝軟體中談談軟體發展管理
Wen Liao
•
2.4K views
Hello world 的一生
1.
Hello World 的一生 Wen
Liao Taiwan Linux Kernel Hackers 1
2.
About Wen /41
3.
● 測試環境 ● 懷胎九月及出生 ●
短暫的一生 ● QA 目錄 3
4.
測試環境 (1) 4
5.
測試環境 (2) 5
6.
● 測試環境 ● 懷胎九月及出生 ●
短暫的一生 ● QA 目錄 6
7.
cc 就搞定 7
8.
事情當然沒有我們憨人 想的那麼簡單 8
9.
● 現實是,除了執行檔以外,在編 譯的過程的副產品 ○ hello.i
// 展開巨集後的C 語言 ○ hello.s // 將C語言轉成組合語言 ○ hello.o // 將組合語言轉成ELF格式的object file GCC = GNU Compiler Collection 9
10.
hello.i 節錄 八百行 stdio.h 10
11.
hello.s 節錄 (1) 11
12.
hello.s 節錄 (2) 12
13.
hello.s 節錄 (2) 13
14.
hello.s 節錄 (1) 14
15.
hello.s 節錄 (2) https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf 15
16.
hello.s 節錄 (2) https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi.pdf 16
17.
囉唆的真實編譯 (1) 17
18.
囉唆的真實編譯 (2) 18
19.
囉唆的真實編譯 (3) ld 節錄
(1) 19
20.
囉唆的真實編譯 (3) ld 節錄
(2) 20
21.
Link時除了你的object外,還有 21
22.
/usr/lib/x86_64-linux-gnu/Scrt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginS.o /lib64/ld-linux-x86-64.so.2 /usr/lib/gcc/x86_64-linux-gnu/7/crtendS.o /usr/lib/x86_64-linux-gnu/crtn.o ... 除了你的object外,還有 22
23.
Why? 23
24.
反組譯 參數 呼叫函數 24
25.
__libc_start_main (1) 25
26.
__libc_start_main (2) 26
27.
● 檢查權限,確保安全性 ● thread
subsystem初始化 (我可不知道什麼thread subsystem唷) ● 向rtld_fini註冊release callback function,當shared object結束時使用該 callback釋放資源 ● 呼叫init callback function ● 呼叫main callback function並且帶入參數 ● 當main callback function結束後,將回傳值作為參數呼叫exit __libc_start_main (3) 27
28.
● 測試環境 ● 懷胎九月及出生 ●
短暫的一生 ● QA 目錄 28
29.
linux/fs/exec.c 29
30.
do_execve() 30
31.
register_binfmt() 31
32.
binfmt 資料結構 32
33.
linux/fs/binfmt_elf.c 33
34.
linux/fs/exec.c /41
35.
load_elf_binary 35
36.
struct linux_binprm 省略版 36
37.
struct linux_binprm buf[128] struct vm_area_struct
*vma; unsigned long vma_pages struct mm_struct *mm struct file * file int argc, envc const char * filename const char * interp unsigned long loader, exec struct cred *cred ... 37
38.
load_elf_binary() 38
39.
load_elf_binary() 39
40.
● Load_elf_binary Trace ○
http://wen00072.github.io/blog/2019/08/03/load-elf-binary-trace/ Load_elf_binary Trace 40
41.
● Sections ○ text ○
bss ○ data ○ … ● ABI ● Link script ● ELF ● Binutils ● vDSO ● ASLR ● man proc 延伸關鍵字 41
42.
Q & A /41