我只是讀一個新的C++的挑戰: http://blogs.msdn.com/b/vcblog/archive/2014/02/04/challenge-vulnerable-code.aspxC++鑄造基地和「覆蓋」的vptr問題
提供的代碼,如果充滿了問題,一些明顯對任何人有良好的編程習慣,有的可見只有C++ :-)
它在註釋中描述當地人,即一個特定的線路(37)是特別危險:
ImageFactory::DebugPrintDimensions((ImageFactory::CustomImage*)image);
然後函數調用CustomImage
(定義的第一TI的虛擬方法我在CustomImage
)。
據稱這引起CustomImage
的第一個成員被當作實例(這是一個unique_ptr
實際上)的vptr的和使由它指向的二進制文件視爲可執行文件(也許是惡意的)代碼..
雖然我可以理解這一點,我想知道爲什麼這真的有用。
CustomImage
是一個虛擬的類,所以(可能)它的前4個字節(只是假設X86)是vptr,並且unique_ptr
成員是next ..並且由於演員似乎沒有移動任何東西......
...如何執行unique_ptr
所保存的數據?
http://stackoverflow.com/questions/14914940/is-it-undefined-behavior-to-cast-from-base-class-to-derived – user2485710