Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Hello world在那邊?背景說明 0
Search
Wen_Liao
January 24, 2015
Technology
0
770
Hello world在那邊?背景說明 0
部落格文尋找Hello world在背景說明
26/Jan/2015 增加prolog/epilogue說明
29/Jan/2015 增加%eax設成0的說明,感謝Scott Tasi大大的補充
Wen_Liao
January 24, 2015
Tweet
Share
More Decks by Wen_Liao
See All by Wen_Liao
COSCUP-2020-Linux 軟體組裝工和他的工具們
wen_liao
2
1.5k
開放街圖 自助旅行的好幫手
wen_liao
0
1.3k
GNU AS簡介
wen_liao
0
1.2k
UPnP 1.0 簡介
wen_liao
0
1.1k
自由軟體和 Richard Stallman
wen_liao
0
2.3k
A successful Git branching model 導讀
wen_liao
0
690
GNU ld的linker script簡介
wen_liao
0
1.4k
Trace 程式碼之皮
wen_liao
0
910
淺談Debian套件打包
wen_liao
0
650
Other Decks in Technology
See All in Technology
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1k
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
180
コンテナセキュリティの最新事情 ~ 2026年版 ~
kyohmizu
6
2k
Exadata Fleet Update
oracle4engineer
PRO
0
1.1k
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
180
データの整合性を保ちたいだけなんだ
shoheimitani
8
3.2k
Cosmos World Foundation Model Platform for Physical AI
takmin
0
980
コミュニティが変えるキャリアの地平線:コロナ禍新卒入社のエンジニアがAWSコミュニティで見つけた成長の羅針盤
kentosuzuki
0
130
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
190
20260208_第66回 コンピュータビジョン勉強会
keiichiito1978
0
200
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
190
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Marketing to machines
jonoalderson
1
4.6k
The browser strikes back
jonoalderson
0
420
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
Are puppies a ranking factor?
jonoalderson
1
2.7k
Agile that works and the tools we love
rasmusluckow
331
21k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
350
Raft: Consensus for Rubyists
vanstee
141
7.3k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Side Projects
sachag
455
43k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Code Reviewing Like a Champion
maltzj
527
40k
Transcript
Wen Liao Hello world在那邊? 背景說明 嘉義,民雄
Disclaimer 投影片資料為作者整理資料及個人意見,沒有經 過嚴謹確認,請讀者自行斟酌
目標 說明分享會中live demo時的背景知識, 包含 • ABI • objdump使用方式 無法看live demo的朋友可以去看:尋找"Hello
World\n",實地操作。
先從API談起 引用Wikipedia: • Application programming interface的縮寫 • 一組讓開發者開發應用程式的 routine、通訊 協定、或是工具
• 使用相同的API,在不同平台上面重新編譯,應 該可以編譯成功,並且正確執行。
不懂?來個範例
不就是叫printf印出Hello World,有什麼稀奇。
你在Windows, Linux, ARM Linux, MIPS Linux上編譯都可 以印出Hello World
另外printf幹了什事? 不要忘記OS提供的服務稱為 system call
仔細看看男人 $ man man The table below shows the section
numbers of the manual followed by the types of pages they contain. 1 Executable programs or shell commands 2 System calls (functions provided by the kernel) ...
翻譯米糕 男人根據是依據數字編號的section來存放不同 種類的手冊 • Section 1:執行檔 • Section 2:System call
• Section 3:函式庫 • ...
那麼printf是system call嘛? 看來不是,那他是啥?
問男人,他說section 1和3都有printf,1 是執行檔的手冊,所以只有3可以挑
那麼printf到底怎麼讓螢幕印 出Hello World?
strace, 追蹤system call和signal的工具 使用了write system call 有人還記得 stdout fd是 1
嗎? 帶入要寫到 stdout的字 串 寫入12個 bytes 回傳已經寫 了12 bytes 印出來了嘿 嘿
結論:printf是 Standard I/O library提供的 API,讓使用者更方便的使用 stream,以及增進效能。 $ man stdio #
男人萬歲!
在不同的OS搞不好沒有File descriptor,寫入的system也 許也不叫write
但是只要你或是廠商能夠把 Standard I/O library移植到它 的OS,printf照樣印給你看。
回到ABI • Application Binary Interface的縮寫 • 規範binary,也就是你的執行程式和函式庫 ◦ 呼叫函數行為 ▪
機械碼執行的時候哪些暫存器放參數,哪些暫存器 放回傳值... ◦ Data type alignment ◦ System call呼叫規範 ◦ ... • 理想的世界 ◦ 同樣的硬體條件和同樣的ABI,不同compiler編出來的 binary甚至在不同OS都可以互通 ◦ 現實上...嘛。看起來太多細節需要處理,所以看運氣。
這次Demo要知道的ABI規範 • 單純就是如何傳遞參數給一個函數就好 • 我的電腦是Intel 64-bit,使用的ABI是 ▪ System V AMD64
ABI • Calling convention ◦ 正整數和指標參數傳遞順序 ▪ RDI, RSI, RDX, RCX, … ▪ demo的printf最多用到兩個參數,demo的都是指標
範例:不要問我plt是啥,我還沒搞清楚那 是三小 為什麼不是RSI而是ESI呢?kerker 有沒有很眼 熟?比對一 下上一頁
demo會用到的objdump指令 • objdump -d objfile ◦ 反組譯binary檔案 • objdump -t
objfile ◦ 列出binary檔案的symbol table ▪ 不知道symbol table?問估狗囉 • objdump -h objfile ◦ 列出binary的section資訊 ▪ 不知道section,請找我以前linker script的投影片或 文章 • objdump -s -j section名稱 objfile ◦ 列出section的內容 資料
補充無關的資料 • function prolog ◦ 函數被呼叫的時候,實際上機械碼準備的事 ▪ 儲存相關status ▪ 處理和設定call
stack ▪ 處理要用的暫存器 • function epilogue ◦ 離開函數的時候,實際上機械碼準備的事 ▪ 恢復和設定call stack ▪ 恢復用過的暫存器 ▪ 恢復前面儲存的status
來看這個函 數
Function prolog Function epilogue 呼叫puts,為何用 edi?ABI規定。 為何設定0x4005e4? 可以用objdump看看
打完收工,參考資料如下 • man ◦ 最man的男人 • API • ABI •
System V AMD64 ABI • Wikipedia: Function prologue