So entfernen Sie bestimmte Funktionen aus der Betriebssystembibliothek, ohne die Lua-Header oder die Skripte zu bearbeiten

Ich habe meine Hausaufgaben gemacht und andere Antworten zu diesem Thema studiert, aber keine befasst sich mit meinem speziellen Problem.

Ich möchte die io-Bibliothek vollständig und das os nur teilweise entfernen (sagen wir, ich möchte os.clock () und andere behalten)

Wie kann ich dies nur von der C-API erreichen.

Aufgrund der Art des Projekts darf ich die Lua-Header und die Skripte, die an mich gesendet werden, nicht ändern. Diese stehen nicht unter meiner Kontrolle. Das einzige, was ich ändern kann, ist der Dolmetscher.

so etwas machen:

<code>lua_pushnil(state_pointer);
lua_setglobal(state_pointer, "os.execute");
</code>

hilft nicht viel, da der Benutzer im Skript os = require ('os') aufrufen und alle Funktionen zurückholen kann

Ich darf die Require-Funktion nicht deaktivieren, damit es schwieriger wird.

Irgendwelche Ideen?

PS: Eher neugierig: wenn ich so etwas mache

<code>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)
</code>

anstatt

<code>luaL_openlibs(L); (this loads all the libraries)
</code>

Würde os = require ('os') oder io = require ('io') noch funktionieren?

@Nicol Bolas weiß nicht, ob ich etwas falsch mache, aber os = require ('os') & require ('io') bringt einfach alles zurück.

mein Code:

<code>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");
</code>

In meinem Skript mache ich einfach eine

<code>os = require('os')
io = require('io')
</code>

Danach funktionieren OS-Funktionen und IO-Funktionen. os.exit schließt meine App immer noch und io.write funktioniert wie gewohnt

Antworten auf die Frage(2)

Ihre Antwort auf die Frage