私は宿題をし、このトピックに関する他の回答を研究しましたが、私の特定の問題に対処するものはありません。
ioライブラリを完全に削除し、osを部分的にのみ削除したい(os.clock()などを保持したい場合)
CAPIからのみこれを実現するにはどうすればよいですか。
プロジェクトの性質上、Luaヘッダーと送信されるスクリプトを変更することは許可されていません。これらは私の管理下にはありません。私が変更できるのはインタプリタだけです。
このようなことをする:
lua_pushnil(state_pointer);
lua_setglobal(state_pointer, "os.execute");
スクリプトでは、ユーザーがos = require('os')を呼び出して、すべての関数を取り戻すことができるため、あまり役に立ちません。
require関数を無効にすることは許可されていないので、これは物事を難しくします。
何か案は?
PS:もっと好奇心があります:私が次のようなことをした場合
luaopen_base(L);
luaopen_table(L);
luaopen_string(L);
luaopen_math(L);
luaopen_loadlib(L); (basically i'm loading every library by hand except os and io)
それ以外の
luaL_openlibs(L); (this loads all the libraries)
os = require('os')またはio = require('io')は引き続き機能しますか?
@Nicol Bolasは、私が何か間違ったことをしているのかどうかわかりませんが、os = require('os')&require('io')はすべてを元に戻します。
私のコード:
luaL_openlibs(LuaInstance); /* load the libs */
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "io");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.execute");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.rename");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.remove");
lua_pushnil(LuaInstance);
lua_setglobal(LuaInstance, "os.exit");
私のスクリプトでは、
os = require('os')
io = require('io')
この後、os関数とio関数はすべて機能します。os.exitは引き続きアプリを閉じ、io.writeは通常どおり機能します