获取 Lua State 指针的地址以在外部程序中获取结果。

我想知道如何从使用Lua的程序中获取Lua_State的地址。 我不是很熟悉汇编,但我很了解C ++。

源代码如下所示:

#pragma comment(lib, "lua51.lib")
#pragma comment(lib, "lua5.1.lib")

extern "C" {
#include <lua.h>
#include <lauxlib.h>
}

lua_State* L; // 我想获得它的地址,但我没有远程程序的源代码。
              // 因此,我可以在我的DLL注入到远程程序中时使用此状态。

int main()
{
     L = lua_open();
     //////循环和函数注册。

     lua_close(L);
     return 1;
}

我尝试了自己在IDA中寻找,但不知道如何找到它。 在IDA中它看起来像这样

点赞
用户1354557
用户1354557

如果您双击或将鼠标悬停在?L@@3PAUlua_State@@A上,您应该可以获取到L的地址。由于?L@@3PAUlua_State@@Astruct lua_State *Lmangled name,因此您知道这个内存位置是L

在上面的示例中,通过这种方式很容易找到L,因为您拥有符号。如果您要分析的二进制文件没有符号,那么您将不得不依赖于上下文。一般来说,这需要更多的汇编理解,因为您可能需要追踪函数参数的使用情况并识别结构。如果您能够找到或创建FLIRT signatures,Lua的反汇编过程将大大简化这一过程。

2013-05-08 22:38:57