看板 C_and_CPP 關於我們 聯絡資訊
: 另外想知道 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