Как удалить определенные функции из библиотеки os без редактирования заголовков Lua или скриптов
Я сделал свою домашнюю работу и изучил другие ответы на эту тему, но ни один из них не касался моей конкретной проблемы.
Я хочу полностью удалить библиотеку io, а ОС - только частично (скажем, я хочу оставить os.clock () и другие)
Как я могу добиться этого только из C API.
Из-за характера проекта мне не разрешено изменять заголовки Lua и сценарии, которые будут отправлены мне. Это не под моим контролем. Единственное, что я могу изменить - это переводчик.
делать что-то вроде этого:
<code>lua_pushnil(state_pointer); lua_setglobal(state_pointer, "os.execute"); </code>
не очень поможет, потому что в скрипте пользователь может вызвать os = require ('os' ') и вернуть все функции обратно
Мне не разрешено отключать функцию require, поэтому это усложняет ситуацию.
Есть идеи?
PS: больше любопытства: если я сделаю что-то вроде
<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>
вместо
<code>luaL_openlibs(L); (this loads all the libraries) </code>
будет ли os = require ('os') или io = require ('io') все еще работать?
@Nolol Bolas не знает, делаю ли я что-то неправильно, но os = require ('os') & amp; require ('io') просто возвращает все обратно.
мой код:
<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>
В моем сценарии я просто делаю
<code>os = require('os') io = require('io') </code>
после этого работают все функции и функции ввода-вывода. os.exit все еще закрывает мое приложение и io.write работает как обычно