我可以跳转到Lua中的实际虚拟地址吗?

时间:2016-05-09 18:10:58

标签: lua

让我说我知道DLL文件中函数的地址:

0x7A0BA032: hello_world() { printf("Hello World!"); }

以某种方式可以从Lua字节码中调用此函数吗?

预编译的Lua文件: hello_world.lua

JMP 0x7A0BA032

然后调用它,例如像

dofile "hello_world.lua"

这样的事情有可能起作用吗?

假设我不能使用loadlib()或任何东西来简单地加载DLL并调用它的方法..

1 个答案:

答案 0 :(得分:1)

  

这样的事情有可能起作用吗?

那可能从不工作。不是Lua,不是LuaJIT,甚至不是 C 。许多现代操作系统将加载代码的内存地址随机化,正好阻止外部代码静态知道特定函数的地址。

至少,您需要一种在运行时查询该函数地址的方法。而且常规的Lua并没有提供这一点。 Lua模块可以提供加载DLL和封送来自Lua的呼叫的能力。 LuaJIT有一个类似的FFI。

但所有这些都依赖于函数地址的运行时查询。因此,它们永远不会被编译成已编译的Lua脚本。