mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-04-20 05:53:26 +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");
|
: "cc");
|
||||||
}
|
}
|
||||||
|
|
||||||
return x+y;
|
return x+y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define C_FUNCTIONS_N 10
|
#define C_FUNCTIONS_N 10
|
||||||
|
|
||||||
struct global_var_t {
|
struct global_var_t {
|
||||||
char input_buffer[LUA_MAXINPUT];
|
char input_buffer[LUA_MAXINPUT];
|
||||||
int (*c_functions[C_FUNCTIONS_N]) (void);
|
int (*c_functions[C_FUNCTIONS_N]) (void);
|
||||||
} global = {{},{random_digit,get_time,do_something,0,0,0,0,0,0,0}};
|
} global = {{},{random_digit,get_time,do_something,0,0,0,0,0,0,0}};
|
||||||
|
|
||||||
static int pushline(lua_State *L, int firstline)
|
static int pushline(lua_State *L, int firstline)
|
||||||
{
|
{
|
||||||
|
|
||||||
write_prompt(L, firstline);
|
write_prompt(L, firstline);
|
||||||
if (fgets(global.input_buffer, LUA_MAXINPUT, stdin)) {
|
if (fgets(global.input_buffer, LUA_MAXINPUT, stdin)) {
|
||||||
size_t len = strlen(global.input_buffer);
|
size_t len = strlen(global.input_buffer);
|
||||||
@ -672,13 +671,13 @@ const char *lua = "local ffi = require(\"ffi\")\n"
|
|||||||
"ffi.cdef[[\n"
|
"ffi.cdef[[\n"
|
||||||
"int call_c_function(int);\n"
|
"int call_c_function(int);\n"
|
||||||
"]]\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};
|
char flag[0x40] = {0};
|
||||||
FILE *flagfile;
|
FILE *flagfile;
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
flagfile = popen("/bin/get_flag", "r");
|
flagfile = popen("/bin/get_flag", "r");
|
||||||
@ -701,6 +700,8 @@ int main(int argc, char **argv)
|
|||||||
printf("err: %s\n", lua_tostring(L, -1));
|
printf("err: %s\n", lua_tostring(L, -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
smain.argc = argc;
|
smain.argc = argc;
|
||||||
smain.argv = argv;
|
smain.argv = argv;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user