※ 引述《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)