From d87a18c473e658312c71eb3bd3b635edc4f4cd9f Mon Sep 17 00:00:00 2001 From: fesily Date: Fri, 18 Aug 2023 17:15:11 +0800 Subject: [PATCH] fix stackover read --- CMakeLists.txt | 5 ++++- src/lj_load.c | 27 ++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d75648d8..c5ac23b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,7 @@ # Debugged and (now seriously) modified by Ronan Collobert, for Torch7 #project(LuaJIT C ASM) +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) SET(LUAJIT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) @@ -426,4 +427,6 @@ ENDMACRO() MACRO(LUA_ADD_EXECUTABLE luajit_target) LUAJIT_add_custom_commands(${luajit_target} ${ARGN}) add_executable(${luajit_target} ${target_srcs}) -ENDMACRO(LUA_ADD_EXECUTABLE luajit_target) \ No newline at end of file +ENDMACRO(LUA_ADD_EXECUTABLE luajit_target) + +install(TARGETS luajit-5.1 RUNTIME DESTINATION .) diff --git a/src/lj_load.c b/src/lj_load.c index 80372f25..5d8bb0b8 100644 --- a/src/lj_load.c +++ b/src/lj_load.c @@ -134,21 +134,34 @@ static const char *reader_string(lua_State *L, void *ud, size_t *size) 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; const char* t = base; - char* s = NULL, *p = NULL, *q = NULL; - if (strstr(base, "return _debug_getinfo") == NULL) return NULL; + const char* s = NULL, *p = NULL; + char *q = NULL; + if (custom_strstr(base, size, "return _debug_getinfo") == NULL) return NULL; target = (char*)malloc(size * 2 + 32); memset(target, 0, size * 2 + 32); q = target; while ( - ((p = strstr(t, "return _debug_")) != NULL) || - ((p = strstr(t, "return _getfenv")) != NULL) || - ((p = strstr(t, "return _setfenv")) != NULL) + ((p = custom_strstr(t, size, "return _debug_")) != NULL) || + ((p = custom_strstr(t, size, "return _getfenv")) != NULL) || + ((p = custom_strstr(t, size, "return _setfenv")) != NULL) ) { memcpy(q, t, p - t); q += p - t; @@ -159,7 +172,7 @@ char* hack_gemcore(const char* base, size_t size) continue; } - s = strstr(p, "end"); + s = custom_strstr(p, size - (p - base) - 1, "end"); if (s != NULL) { memcpy(q, p, s - p); q += s - p; memcpy(q, ", nil end", 9); q += 9;