我正在用C/C++設計一個系統,它可以通過各種插件進行擴展。有一個明確定義的C公共API,主要與(const) char*
和其他指針類型一起使用。插件被編譯成.so或.dll文件,並且主應用程序在啓動時加載它們,隨後根據請求卸載或重新加載它們。在沙箱中運行插件
的插件可能會從各種渠道進來的,值得信賴的或不那麼:)
現在,我想確保,如果一個插件做一些愚蠢的事(如試圖釋放他是一個記憶不應該自由),但這一行爲並沒有降低整個系統的效能,只是通知主系統關於該行爲不當的插件,以便將其從隊列中移除。
調用以下方式正在做的代碼:
const char* data = get_my_data();
for(int i = 0; i<plugins; i++)
{
plugins[i]->execute(data);
}
但如果plugin[0]
的FreeS「意外」的數據字符串或覆蓋,或錯誤地跳轉到地址0x0這會搞垮整個系統,我不想要這個。我怎樣才能避免這種災難。 (我知道,我可以複製data
字符串......這並不能解決我的問題:))
我的回答有助於你解決這個問題嗎?如果是這樣,請接受它作爲正確答案。 –