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

我可以跳转到Lua中的实际虚拟地址吗?,lua,Lua,假设我从DLL文件中知道函数的地址: 0x7A0BA032: hello_world() { printf("Hello World!"); } 是否有可能从Lua字节码中调用此函数 预编译的Lua文件:hello\u world.Lua 然后叫它,比如像 dofile "hello_world.lua" 这样的事情有可能奏效吗 假设我不能使用loadlib()或任何东西来简单地加载DLL并调用其方法 这样的事情有可能奏效吗 那是行不通的。不在Lua,不在LuaJIT,甚至不在C。许多现代

假设我从DLL文件中知道函数的地址:

0x7A0BA032: hello_world() { printf("Hello World!"); }
是否有可能从Lua字节码中调用此函数

预编译的Lua文件:hello\u world.Lua

然后叫它,比如像

dofile "hello_world.lua"
这样的事情有可能奏效吗

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

这样的事情有可能奏效吗

那是行不通的。不在Lua,不在LuaJIT,甚至不在C。许多现代操作系统将代码加载到的内存地址随机化,正是为了防止外部代码静态地知道特定函数的地址

至少,您需要一种在运行时查询该函数地址的方法。而常规的Lua并不能提供这一点。Lua模块可以提供加载dll和封送Lua调用的能力。LuaJIT有一家做类似事情的外国金融机构


但所有这些都依赖于函数地址的运行时查询。因此,它们永远不可能被烘焙到编译过的Lua脚本中。

纯Lua没有变化。这很遗憾。我试图修改一个游戏(),它似乎有自己的Lua5.0修改版,删除了所有有用的东西,比如
loadlib
。我甚至不能创建像管道这样的东西来至少进行进程间通信。@displayname:Lua的主要用途之一是它允许您创建一个不易察觉的沙盒脚本环境。如果所属系统不希望您拥有IPC,则您不能。如果所属系统不希望您与DLL对话,则您不能。不管怎样。这是该语言的一个特点。好的,谢谢你提供更多信息。看来我得走另一个方向了。。我的计划是增加对“远程”控制的人工智能的支持,但看起来要做到这一点比我想象的要困难得多。。
dofile "hello_world.lua"