From 1f956817fa189cf3389cf22e4a2be8386ab3f22f Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Sun, 6 Nov 2016 02:12:24 +0200 Subject: [PATCH] Initial commit --- Makefile | 2 + gmcl_luaspy_win32.dll | Bin 0 -> 43833 bytes luaspy.cpp | 101 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 Makefile create mode 100644 gmcl_luaspy_win32.dll create mode 100644 luaspy.cpp diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f39a31e --- /dev/null +++ b/Makefile @@ -0,0 +1,2 @@ +all: + g++ luaspy.cpp -shared -o gmcl_luaspy_win32.dll -I D:\gmbase\lua -lpsapi \ No newline at end of file diff --git a/gmcl_luaspy_win32.dll b/gmcl_luaspy_win32.dll new file mode 100644 index 0000000000000000000000000000000000000000..31b3bce90153e7fab4eb91d8ba8d4472fdecfafd GIT binary patch literal 43833 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 literal 0 HcmV?d00001 diff --git a/luaspy.cpp b/luaspy.cpp new file mode 100644 index 0000000..b05fca3 --- /dev/null +++ b/luaspy.cpp @@ -0,0 +1,101 @@ +#include +#include +#include +#include +#include +#include "GarrysMod/Lua/Interface.h" +#include "GarrysMod/Lua/LuaBase.h" + +using namespace GarrysMod; +using namespace GarrysMod::Lua; + +typedef struct +{ + HMODULE hMod; + MODULEINFO iMod; + uintptr_t ptr; + uintptr_t offset; +} DLLFunction; + +uintptr_t VPhysicalAddress(MODULEINFO iMod,uintptr_t func) +{ + uintptr_t base = (uintptr_t)iMod.lpBaseOfDll; + return (uintptr_t)(func - base); +} + +bool VFindModule(DLLFunction* func) +{ + HMODULE hMods[1024]; + DWORD cbNeeded; + + if( EnumProcessModules(GetCurrentProcess(), hMods, sizeof(hMods), &cbNeeded)) + { + for ( int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) + { + GetModuleInformation(GetCurrentProcess(),hMods[i],&func->iMod, sizeof(MODULEINFO)); + //Check if function in module space + if( (func->offset = VPhysicalAddress(func->iMod,func->ptr) ) <= func->iMod.SizeOfImage && func->ptr >= (uintptr_t)func->iMod.lpBaseOfDll) + { + func->hMod = hMods[i]; + return true; + } + } + } + return false; +} + +int FuncPtr(lua_State* state) +{ + LUA->CheckType(1,Type::FUNCTION); + + DLLFunction func; + char dllpath[256]; + + func.ptr = (uintptr_t)LUA->GetCFunction(1); + + if(VFindModule(&func)) + { + LUA->CreateTable(); + LUA->PushUserdata((void*)func.ptr); + LUA->SetField(-2,"ptr"); + + LUA->PushUserdata((void*)func.offset); + LUA->SetField(-2,"offset"); + + LUA->CreateTable(); + LUA->PushUserdata((void*)func.iMod.lpBaseOfDll); + LUA->SetField(-2,"base"); + + LUA->PushUserdata((void*)func.iMod.SizeOfImage); + LUA->SetField(-2,"size"); + + GetModuleFileName(func.hMod,dllpath,256); + LUA->PushString(dllpath); + LUA->SetField(-2,"path"); + LUA->SetField(-2,"mod"); + } + else + { + LUA->PushNil(); + } + + return 1; +} + +GMOD_MODULE_OPEN() +{ + LUA->PushSpecial(0); + LUA->CreateTable(); + LUA->PushCFunction(FuncPtr); + LUA->SetField(-2,"FuncPtr"); + LUA->SetField(-2,"luaspy"); + LUA->Pop(2); + return 0; +} + +GMOD_MODULE_CLOSE() +{ + LUA->PushNil(); + LUA->SetField(INDEX_GLOBAL,"luaspy"); + return 0; +} \ No newline at end of file