我們嘗試嵌入二進制對象中的什麼字符串,以便我們可以看到已部署的可執行文件或共享庫的版本號優化掉。通常我們在這個字符串中嵌入標準的CVS ID信息。例如,我們可能嵌入:SCCS「是什麼」的字符串不是由編譯器
const char cvsid[] = "@(#)OUR_TEAM_staging_remap_$Revision: 1.30 $ $Name: $";
內的C代碼。
從人(1)內容:
的什麼工具搜索 模式@(#)的SCCS get命令的出現在每個文件名(見SCCS-得到(1)) 替代品在@(#)ID關鍵字,並打印下文 直至」,>,NEWLINE,\或NULL字符。
有這個變量的僅一個實例,它是從未提及。有人暗示這可能會被編譯器優化掉
我一直在使用這種技術多年在C和C++,並與各種編譯器,我還沒有看到一個什麼樣的字符串優化掉。
任何人都知道他們爲什麼沒有被優化掉?
如果我們不走運,你可以再用這個技巧3年,直到谷歌gcc人們用他們的[WHOPR努力[1]取得進展,這會使你的技巧過時;-) [1]: http://gcc.gnu.org/projects/lto/whopr.pdf – none 2009-05-18 03:42:29