Re: [問題] printf("%x%x", 0.1);

看板C_and_CPP (C/C++)作者 (某數..程式工匠)時間14年前 (2011/11/10 23:19), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串2/3 (看更多)
: 另外想知道 printf() 內部到底是怎麼做的? : 老師說 printf() 會把後面全部的 args 吃進去放到某個空間 : 然後依照你給的 formatted string 按照每一種 data type 去切割資料 : 假如是 int 就挖出 4 byte 出來這樣 首先了解有兩個特殊用途暫存器 ebp ,esp 是專門用來處理記憶體裡stack那段的記憶體位址記錄 而詳細的就參考這段資料吧 http://unixwiz.net/techtips/win32-callconv-asm.html 基本上就看Calling a __cdecl function 這個部分 看完了以後你應該就知道funtion call的基本運作方式了 那麼formatted string裡都會有前置字元%來表示這是要去抓參數 那事情就簡單啦 我只要依照ebp+12 ebp+16去依序抓每個變數的值 再把他formatted成你想看到的表示方式 然後輸出~ 就這麼簡單...原理上啦 實際說不定還藏了一些加速的東西或是怪怪的東西=..= -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.178.100

11/10 23:24, , 1F
我這邊的 ebp 和 esp 叫作 rbp 跟 rsp ? 兩者一樣嗎?
11/10 23:24, 1F

11/10 23:27, , 2F
32bit暫存器是e開頭 64bit則是r開頭
11/10 23:27, 2F
文章代碼(AID): #1Ek-kA4o (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1Ek-kA4o (C_and_CPP)