Как насчет использования байт-кода lua?В отличие от встраивания кода lua, это не так тривиально, чтобы быть перепроектированным.Конечно, он не на 100% безопасен, но он намного сложнее, чем текстовый код lua.
Если вы не знакомы с байт-кодом , это своего рода язык ассемблера для виртуальной машины.Концептуально отношение «код С» - «код сборки» похоже на «код lua» - «байт-код lua».
Позвольте мне показать, как это сделать.
Сначала скомпилируйте a.lua
файл байт-код lua .
$ luac -o a.luac a.lua
И теперь у вас есть a.luac
, то есть байт-код lua.Это двоичный формат.Вы можете использовать luaL_loadfile
таким же образом.Он автоматически определяет, является ли это текстовым кодом или байтовым кодом.Например:
#include "lauxlib.h"
#include "lua.h"
#include "lualib.h"
int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_loadfile(L, "a.luac");
lua_pcall(L, 0, 0, 0);
lua_close(L);
return 0;
}
Если вам действительно нужно встроить этот код в код на C, вы можете рассмотреть luaL_loadbuffer
, который загружает код lua / байт-код из памяти, а не из файла.Также необходимо предварительно обработать встраивание байт-кода.