作者x000032001 (某數..程式工匠)
看板C_and_CPP
標題Re: [問題] printf("%x%x", 0.1);
時間Thu Nov 10 23:19:34 2011
: 另外想知道 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
→ xatier:我這邊的 ebp 和 esp 叫作 rbp 跟 rsp ? 兩者一樣嗎? 11/10 23:24
→ x000032001:32bit暫存器是e開頭 64bit則是r開頭 11/10 23:27