看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《bugmens (今天天氣好)》之銘言: : ※ 引述《descent (返無)》之銘言: : : 研究 c++ runtime 之後, 我才瞭解 c++ compiler 的邪惡, : : 它為了我們的程式碼插了很多額外的 code, 令人又愛又恨。 : : 在大部份狀況下, 我們不用管這些事情, 搞懂這些東西對我來說純粹是個機緣。 : : 有點中毒, 愈挖愈深。 : : 建議先看這篇: C++ 虛函數表解析 : : http://blog.csdn.net/haoel/article/details/1948051 : : 這篇則是我反組譯後分析 virtual function table : : http://descent-incoming.blogspot.tw/2012/09/c-virtual-function-table.html : : 有任何錯誤還請各位朋友指證。 : 感謝原PO的分享,順著這篇我也將我的問題提出來問看看 : 這是OpenCV中的cap_dshow.cpp一小部份http://tinyurl.com/9lkrfdc : class CvCaptureCAM_DShow : public CvCapture : { : public: : CvCaptureCAM_DShow(); : virtual ~CvCaptureCAM_DShow(); : virtual bool open( int index ); : virtual void close(); : virtual double getProperty(int); : virtual bool setProperty(int, double); : virtual bool grabFrame(); : virtual IplImage* retrieveFrame(int); : virtual int getCaptureDomain(); : protected: : void init(); : int index, width, height,fourcc; : IplImage* frame; : static videoInput VI; : }; ^^^^^^^^^^^^^ static 變數可能存放在 bss section, function 應該是存在 text section, 但這不是絕對的, 很有可能這個 section 根本沒關係, 無法互相推斷。 組合語言下沒有秘密, 請反組譯之後搭配 執行檔剖析工具觀察。 在 linux 我會使用 objdump, readelf 來觀察這些變數存在哪裡。 有什麼目的要這麼做呢? : //-------------------------------------------------- : class videoInput{ : public: : videoInput(); : ~videoInput(); : ........其他的函式 : }; : http://tinyurl.com/8uemmun : //-------------------------------------------------- : 就PO所提的,這些Virtual Function最後都會做成Virtual Table : 要呼叫的時候就到這個表格找函式的位置,然後再跳過去執行 : 只是現在我想要找出protected變數videoInput VI;的位置 : 因為我要藉由vi的位置來呼叫videoInput的函式 : 我原本天真的以為變數也會有類似的表可以查詢 : 但我google找了好久都只有提到function有表可以查 : 卻都沒提到變數的部份是怎麼安排的 : 請問各位網友這樣的問題有解嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.114.149.29 ※ 編輯: descent 來自: 58.114.149.29 (10/15 20:19)