mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-04-19 21:43:27 +00:00
ibiubcsevfuqbeksesgfvyukb
This commit is contained in:
parent
cfa0da2bcc
commit
d4dfab0704
23
src/clear_globals.lua
Normal file
23
src/clear_globals.lua
Normal file
@ -0,0 +1,23 @@
|
||||
local clear = {}
|
||||
|
||||
function table_contains(tbl, x)
|
||||
found = false
|
||||
for _, v in pairs(tbl) do
|
||||
if v == x then
|
||||
found = true
|
||||
end
|
||||
end
|
||||
return found
|
||||
end
|
||||
|
||||
WHITELIST = {"_G", "WHITELIST", "clearAllGlobals", "print", "k",
|
||||
"v", "pairs", "table_contains", "string", "table",
|
||||
"tonumber", "tostring", "type", "f"}
|
||||
|
||||
function clear.clearAllGlobals()
|
||||
for k, v in pairs(_G) do
|
||||
if not table_contains(WHITELIST, tostring(k)) then _G[k] = nil end;
|
||||
end
|
||||
end
|
||||
|
||||
return clear
|
17
src/luajit.c
17
src/luajit.c
@ -624,20 +624,19 @@ int do_something()
|
||||
: "cc");
|
||||
}
|
||||
|
||||
return x+y;
|
||||
}
|
||||
return x+y;
|
||||
}
|
||||
}
|
||||
|
||||
#define C_FUNCTIONS_N 10
|
||||
|
||||
struct global_var_t {
|
||||
char input_buffer[LUA_MAXINPUT];
|
||||
int (*c_functions[C_FUNCTIONS_N]) (void);
|
||||
char input_buffer[LUA_MAXINPUT];
|
||||
int (*c_functions[C_FUNCTIONS_N]) (void);
|
||||
} global = {{},{random_digit,get_time,do_something,0,0,0,0,0,0,0}};
|
||||
|
||||
static int pushline(lua_State *L, int firstline)
|
||||
{
|
||||
|
||||
write_prompt(L, firstline);
|
||||
if (fgets(global.input_buffer, LUA_MAXINPUT, stdin)) {
|
||||
size_t len = strlen(global.input_buffer);
|
||||
@ -672,13 +671,13 @@ const char *lua = "local ffi = require(\"ffi\")\n"
|
||||
"ffi.cdef[[\n"
|
||||
"int call_c_function(int);\n"
|
||||
"]]\n"
|
||||
"f = ffi.C.call_c_function\n";
|
||||
|
||||
"f = ffi.C.call_c_function\n"
|
||||
"local clear = require(\"clear_globals\")\n"
|
||||
"clear.clearAllGlobals()\n";
|
||||
|
||||
char flag[0x40] = {0};
|
||||
FILE *flagfile;
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
flagfile = popen("/bin/get_flag", "r");
|
||||
@ -701,6 +700,8 @@ int main(int argc, char **argv)
|
||||
printf("err: %s\n", lua_tostring(L, -1));
|
||||
}
|
||||
|
||||
|
||||
|
||||
smain.argc = argc;
|
||||
smain.argv = argv;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user