Jak usunąć określone funkcje z biblioteki os bez edytowania nagłówków Lua lub skryptów
Zrobiłem pracę domową i przestudiowałem inne odpowiedzi na ten temat, ale żaden nie odnosi się do mojego konkretnego problemu.
Chcę całkowicie usunąć bibliotekę io i tylko częściowo (powiedzmy, że chcę zachować os.clock () i inne)
Jak mogę to osiągnąć tylko z C API.
Ze względu na charakter projektu nie mogę modyfikować nagłówków Lua i skryptów, które zostaną do mnie wysłane. Nie są pod moją kontrolą. Jedyne, co mogę modyfikować, to tłumacz.
robię coś takiego:
<code>lua_pushnil(state_pointer); lua_setglobal(state_pointer, "os.execute"); </code>
niewiele pomoże, ponieważ w skrypcie użytkownik może wywołać os = require ('os') i odzyskać wszystkie funkcje
Nie wolno mi wyłączać funkcji żądania, co utrudnia sprawę.
Jakieś pomysły?
PS: Więcej ciekawości: jeśli zrobię coś takiego
<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>
zamiast
<code>luaL_openlibs(L); (this loads all the libraries) </code>
czy os = require ('os') lub io = require ('io') nadal działa?
@Nicol Bolas nie wie, czy robię coś złego, ale os = require ('os') i require ('io') po prostu przywraca wszystko.
mój kod:
<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>
W moim skrypcie po prostu robię
<code>os = require('os') io = require('io') </code>
po tym wszystkie funkcje os i io działają. os.exit nadal zamyka moją aplikację, a io.write działa jak zwykle