Как удалить определенные функции из библиотеки 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 работает как обычно

Ответы на вопрос(2)

Ваш ответ на вопрос