robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
關於 GCC nested function
by thinker
2 Columns
關鍵字:
coding
Jserv 寫了一篇文章 linkname:[GCC 的 nested function 與 trampoline] http://blog.linux.org.tw/~jserv/archives/2010/07/gcc_nested_func.html ,但發現文中有一些錯誤,又無法在網站上 post comment,所以把我的$想法$寫在這。 文中的$範例$對 gcc nested function 的使用恐怕有一些誤解。首先,因為 trampoline 是位於 stack 裡,所以你不能 return 一個 trampoline ,在之後使用。理由很簡單,一旦你 return 到前一個 frame 之後,只要呼叫任何其它的 function,都可能會破壞 trampoline 和 local variable 的內容。而文中的$範例$之所以能運作,只是因為在呼叫 trampoline 之前,沒執行其它的 function,純粹是運氣好。 因此, nested function 的 tramoline 只能傳給被呼叫的 function ,被更深層的 frame 使用。 另外,存放 ecx 原因也不是因為 ecx 指向 parent function 的 stack,可能會造成 stack 的破壞。而是當 trampoline 被更深層的 frame 呼叫時, ecx 可能已經被修改過了,因此需要透過 trampoline restore ecx 的值。
最後更新時間: 2010-07-29 19:07:01 CST |
引用
查詢:
COMMENTS: