SlideShare a Scribd company logo
1 of 34
Download to read offline
Incremental Global Prelink
        for Android


         Kito Cheng
      kito@0xlab.org
Who am I ?


             Kito
Who am I ?




 學術奴隸 @     熱血工讀生 @
天大地大台科大      0xlab
Incremental Global Prelink
        for Android
          ???????
Incremental Global Prelink
        for Android
          ???????
      這是碩士論文題目嗎 ?
Incremental Global Prelink
        for Android


     先來看一下什麼是 link
執行檔啟動流程

執行檔讀入記憶體        Loader

                libc/libm/
                libdvm...
載入相關動態函式庫
                Dynamic
                Linker            程式啟動時間
 更新符號位址
(Relocation)   printf, sin,
                 cos, ...

                              Linker 做的事就
  開始執行 !                        通通叫 link
執行檔啟動流程

執行檔讀入記憶體       Loader


載入相關動態函式庫
               Dynamic
               Linker    程式啟動時間
 更新符號位址
(Relocation)



  開始執行 !
所以應該大概知道都 link 是啥了唄 !

Incremental Global Prelink
        for Android
所以應該大概知道都 link 是啥了唄 !

Incremental Global Prelink
        for Android
       pre : 預先 ...
所以應該大概知道都 link 是啥了唄 !

Incremental Global Prelink
        for Android
       pre : 預先 ...

    Prelink : 預先 link!
執行檔啟動流程
                             Prelink
執行檔讀入記憶體       Loader    = Link 時間減少


載入相關動態函式庫
               Dynamic
               Linker      程式啟動時間
 更新符號位址
(Relocation)



  開始執行 !
執行檔啟動流程
                             Prelink
執行檔讀入記憶體       Loader    = Link 時間減少


載入相關動態函式庫
               Dynamic
               Linker      程式啟動時間
 更新符號位址
(Relocation)
                          Link 時間減少
                         = 程式啟動變快 !
  開始執行 !
So what?

Prelink = Link 時間減少 = 程式啟動變快 !
So what?

Prelink = Link 時間減少 = 程式啟動變快 !


     Android 開機要載入很多程式
So what?

Prelink = Link 時間減少 = 程式啟動變快 !


     Android 開機要載入很多程式

    程式 Prelink 後啟動速度變快
So what?

Prelink = Link 時間減少 = 程式啟動變快 !


     Android 開機要載入很多程式

    程式 Prelink 後啟動速度變快

  Prelink 後 Android 開機變快 !!
其實 ...



你手上的 Android 已經有使用 Prelink 了
其實 ...



你手上的 Android 已經有使用 Prelink 了


       所以我是來騙台錢的 XD
其實 ...



你手上的 Android 已經有使用 Prelink 了


       所以我是來騙台錢的 XD
但目前 Android 使用的是 local prelink !

Incremental Global Prelink
        for Android
但目前 Android 使用的是 local prelink !

Incremental Global Prelink
        for Android
但目前 Android 使用的是 local prelink !

Incremental Global Prelink
        for Android
  Local ( 本地 ) vs Global ( 全球 )
但目前 Android 使用的是 local prelink !

Incremental Global Prelink
        for Android
  Local ( 本地 ) vs Global ( 全球 )

          名稱大勝 ( 誤 )
Local ( 本地 ) vs Global ( 全球 )

              void foo (){
                printf(“fooooo”);   共兩個 Relocation
  libc.so                           printf
                bar();
   printf                           bar
              }



  libfoo.so     Local Prelink:
     foo        還有一個 Relocation
     bar        printf


                                         勝
               Global Prelink:
               沒半個 Relocation!
Local ( 本地 ) vs Global ( 全球 )


  只能處理同檔案資訊 vs
             可處理跨檔案資訊
所以到底多厲害 ?




            27
所以到底多厲害 ?



聽說在 Nexus S 上開機
  可以快接近兩秒



                  28
所以到底多厲害 ?



聽說在 Nexus S 上開機
  可以快接近兩秒

 ?????

                  29
所以到底多厲害 ?



  聽說在 Nexus S 上開機
      可以快接近兩秒

     ?????
因為我是個窮阿宅沒有 Android 手機 ( 泣
                        30
還是搞不懂在幹嘛耶 !

Incremental Global Prelink
        for Android
還是搞不懂在幹嘛耶 !

Incremental Global Prelink
        for Android

用了後開機 / 程式啟動會變快就對了 XD
Incremental Global Prelink
        for Android


        被遺忘了 XD
也要 !

 Open Source !
不知道啥時會 open 就是了 XD

More Related Content

What's hot

系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章鍾誠 陳鍾誠
 
Lab2在幹嘛
Lab2在幹嘛Lab2在幹嘛
Lab2在幹嘛F74011297
 
Golangintro
GolangintroGolangintro
Golangintro理 傅
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913lusecheng
 
igdshare 110220: LuaJIT intro
igdshare 110220: LuaJIT introigdshare 110220: LuaJIT intro
igdshare 110220: LuaJIT introigdshare
 
compiler fuzzer : prog fuzz介紹
compiler fuzzer : prog fuzz介紹compiler fuzzer : prog fuzz介紹
compiler fuzzer : prog fuzz介紹fdgkhdkgh tommy
 
Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307Xatierlike Lee
 
Python 入门
Python 入门Python 入门
Python 入门kuco945
 
Golang server design pattern
Golang server design patternGolang server design pattern
Golang server design pattern理 傅
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMLi Hsuan Hung
 
如何設計電腦 -- 還有讓電腦變快的那些方法
如何設計電腦  -- 還有讓電腦變快的那些方法如何設計電腦  -- 還有讓電腦變快的那些方法
如何設計電腦 -- 還有讓電腦變快的那些方法鍾誠 陳鍾誠
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMDYangHao Yuan
 
Linux常用命令与工具简介
Linux常用命令与工具简介Linux常用命令与工具简介
Linux常用命令与工具简介weihe
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明Wen Liao
 
Corona 初探 lua 語言,玩跨平台(iOS & android) 行動裝置開發工具
Corona 初探 lua 語言,玩跨平台(iOS &  android) 行動裝置開發工具Corona 初探 lua 語言,玩跨平台(iOS &  android) 行動裝置開發工具
Corona 初探 lua 語言,玩跨平台(iOS & android) 行動裝置開發工具政斌 楊
 
C++工程实践
C++工程实践C++工程实践
C++工程实践Shuo Chen
 

What's hot (20)

系統程式 -- 第 12 章
系統程式 -- 第 12 章系統程式 -- 第 12 章
系統程式 -- 第 12 章
 
from Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Worksfrom Source to Binary: How GNU Toolchain Works
from Source to Binary: How GNU Toolchain Works
 
Lab2在幹嘛
Lab2在幹嘛Lab2在幹嘛
Lab2在幹嘛
 
Golangintro
GolangintroGolangintro
Golangintro
 
Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913
 
igdshare 110220: LuaJIT intro
igdshare 110220: LuaJIT introigdshare 110220: LuaJIT intro
igdshare 110220: LuaJIT intro
 
compiler fuzzer : prog fuzz介紹
compiler fuzzer : prog fuzz介紹compiler fuzzer : prog fuzz介紹
compiler fuzzer : prog fuzz介紹
 
Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307
 
Python 入门
Python 入门Python 入门
Python 入门
 
Golang server design pattern
Golang server design patternGolang server design pattern
Golang server design pattern
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
 
如何設計電腦 -- 還有讓電腦變快的那些方法
如何設計電腦  -- 還有讓電腦變快的那些方法如何設計電腦  -- 還有讓電腦變快的那些方法
如何設計電腦 -- 還有讓電腦變快的那些方法
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
軟體工程(總結篇)
軟體工程(總結篇)軟體工程(總結篇)
軟體工程(總結篇)
 
LLVM introduction
LLVM introductionLLVM introduction
LLVM introduction
 
在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD
 
Linux常用命令与工具简介
Linux常用命令与工具简介Linux常用命令与工具简介
Linux常用命令与工具简介
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明
 
Corona 初探 lua 語言,玩跨平台(iOS & android) 行動裝置開發工具
Corona 初探 lua 語言,玩跨平台(iOS &  android) 行動裝置開發工具Corona 初探 lua 語言,玩跨平台(iOS &  android) 行動裝置開發工具
Corona 初探 lua 語言,玩跨平台(iOS & android) 行動裝置開發工具
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 

Similar to Light talk @ coscup 2011 : Incremental Global Prelink for Android

開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)National Cheng Kung University
 
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)Chen Cheng-Wei
 
OpenOffice.org UNO Magic
OpenOffice.org UNO MagicOpenOffice.org UNO Magic
OpenOffice.org UNO Magicimacat .
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進Mu Chun Wang
 
当我们谈论WebApp - Openparty
当我们谈论WebApp - Openparty当我们谈论WebApp - Openparty
当我们谈论WebApp - OpenpartyXiaoping Feng
 
Swift girls to_codeforgender20171111
Swift girls to_codeforgender20171111Swift girls to_codeforgender20171111
Swift girls to_codeforgender20171111雅方 鄭
 
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學Shengyou Fan
 
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例Justin Lee
 
Lazyload实践
Lazyload实践Lazyload实践
Lazyload实践Wu tianhao
 
模块化和组件化Css
模块化和组件化Css模块化和组件化Css
模块化和组件化CssWu tianhao
 
React-Native share
React-Native shareReact-Native share
React-Native shareEddie Hsu
 
困境與轉型:一個小型開發團隊的 DevOps 學習之旅
困境與轉型:一個小型開發團隊的 DevOps 學習之旅困境與轉型:一個小型開發團隊的 DevOps 學習之旅
困境與轉型:一個小型開發團隊的 DevOps 學習之旅Chen Cheng-Wei
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍yczealot
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swttka
 
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場創科資訊 Trunk Studio
 
A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018Juggernaut Liu
 
Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线kaerseng
 
JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰Sam Lee
 

Similar to Light talk @ coscup 2011 : Incremental Global Prelink for Android (20)

開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
開放原始碼作為新事業: 台灣本土經驗談 (COSCUP 2011)
 
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
摩登開發團隊的DevOps之道 (@DevOpsTaiwan)
 
OpenOffice.org UNO Magic
OpenOffice.org UNO MagicOpenOffice.org UNO Magic
OpenOffice.org UNO Magic
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
 
当我们谈论WebApp - Openparty
当我们谈论WebApp - Openparty当我们谈论WebApp - Openparty
当我们谈论WebApp - Openparty
 
Swift girls to_codeforgender20171111
Swift girls to_codeforgender20171111Swift girls to_codeforgender20171111
Swift girls to_codeforgender20171111
 
凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學凌波微步:wagon + VS Code 的輕功哲學
凌波微步:wagon + VS Code 的輕功哲學
 
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
2011/08/20跨平台行動應用程式使用者介面開發—以titanium mobile為例
 
Lazyload实践
Lazyload实践Lazyload实践
Lazyload实践
 
模块化和组件化Css
模块化和组件化Css模块化和组件化Css
模块化和组件化Css
 
React-Native share
React-Native shareReact-Native share
React-Native share
 
困境與轉型:一個小型開發團隊的 DevOps 學習之旅
困境與轉型:一個小型開發團隊的 DevOps 學習之旅困境與轉型:一個小型開發團隊的 DevOps 學習之旅
困境與轉型:一個小型開發團隊的 DevOps 學習之旅
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
 
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
 
A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018A dev ops team's practice in trend micro in agile summit 2018
A dev ops team's practice in trend micro in agile summit 2018
 
Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线Android消息推送之androidpn demo版到正式上线
Android消息推送之androidpn demo版到正式上线
 
42qu thrift1
42qu thrift142qu thrift1
42qu thrift1
 
JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰
 

Light talk @ coscup 2011 : Incremental Global Prelink for Android