让我说我知道DLL文件中函数的地址:
0x7A0BA032: hello_world() { printf("Hello World!"); }
以某种方式可以从Lua字节码中调用此函数吗?
预编译的Lua文件: hello_world.lua
JMP 0x7A0BA032
然后调用它,例如像
dofile "hello_world.lua"
这样的事情有可能起作用吗?
假设我不能使用loadlib()
或任何东西来简单地加载DLL并调用它的方法..
答案 0 :(得分:1)
这样的事情有可能起作用吗?
那可能从不工作。不是Lua,不是LuaJIT,甚至不是 C 。许多现代操作系统将加载代码的内存地址随机化,正好阻止外部代码静态知道特定函数的地址。
至少,您需要一种在运行时查询该函数地址的方法。而且常规的Lua并没有提供这一点。 Lua模块可以提供加载DLL和封送来自Lua的呼叫的能力。 LuaJIT有一个类似的FFI。
但所有这些都依赖于函数地址的运行时查询。因此,它们永远不会被编译成已编译的Lua脚本。