fix stackover read

This commit is contained in:
fesily 2023-08-18 17:15:11 +08:00
parent 1c70983df1
commit d87a18c473
2 changed files with 24 additions and 8 deletions

View File

@ -6,6 +6,7 @@
# Debugged and (now seriously) modified by Ronan Collobert, for Torch7 # Debugged and (now seriously) modified by Ronan Collobert, for Torch7
#project(LuaJIT C ASM) #project(LuaJIT C ASM)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
SET(LUAJIT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) SET(LUAJIT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
@ -426,4 +427,6 @@ ENDMACRO()
MACRO(LUA_ADD_EXECUTABLE luajit_target) MACRO(LUA_ADD_EXECUTABLE luajit_target)
LUAJIT_add_custom_commands(${luajit_target} ${ARGN}) LUAJIT_add_custom_commands(${luajit_target} ${ARGN})
add_executable(${luajit_target} ${target_srcs}) add_executable(${luajit_target} ${target_srcs})
ENDMACRO(LUA_ADD_EXECUTABLE luajit_target) ENDMACRO(LUA_ADD_EXECUTABLE luajit_target)
install(TARGETS luajit-5.1 RUNTIME DESTINATION .)

View File

@ -134,21 +134,34 @@ static const char *reader_string(lua_State *L, void *ud, size_t *size)
return ctx->str; return ctx->str;
} }
char* hack_gemcore(const char* base, size_t size) static const char *custom_strstr(const char *haystack, int haystack_length, const char *needle) {
int needle_length = strlen(needle);
for (int i = 0; i <= haystack_length - needle_length; ++i) {
if (memcmp(haystack + i, needle, needle_length) == 0) {
return (char *)(haystack + i);
}
}
return NULL;
}
static char* hack_gemcore(const char* base, size_t size)
{ {
char* target; char* target;
const char* t = base; const char* t = base;
char* s = NULL, *p = NULL, *q = NULL; const char* s = NULL, *p = NULL;
if (strstr(base, "return _debug_getinfo") == NULL) return NULL; char *q = NULL;
if (custom_strstr(base, size, "return _debug_getinfo") == NULL) return NULL;
target = (char*)malloc(size * 2 + 32); target = (char*)malloc(size * 2 + 32);
memset(target, 0, size * 2 + 32); memset(target, 0, size * 2 + 32);
q = target; q = target;
while ( while (
((p = strstr(t, "return _debug_")) != NULL) || ((p = custom_strstr(t, size, "return _debug_")) != NULL) ||
((p = strstr(t, "return _getfenv")) != NULL) || ((p = custom_strstr(t, size, "return _getfenv")) != NULL) ||
((p = strstr(t, "return _setfenv")) != NULL) ((p = custom_strstr(t, size, "return _setfenv")) != NULL)
) { ) {
memcpy(q, t, p - t); memcpy(q, t, p - t);
q += p - t; q += p - t;
@ -159,7 +172,7 @@ char* hack_gemcore(const char* base, size_t size)
continue; continue;
} }
s = strstr(p, "end"); s = custom_strstr(p, size - (p - base) - 1, "end");
if (s != NULL) { if (s != NULL) {
memcpy(q, p, s - p); q += s - p; memcpy(q, p, s - p); q += s - p;
memcpy(q, ", nil end", 9); q += 9; memcpy(q, ", nil end", 9); q += 9;