从Lua环境内部查找Lua程序的入口点。

我有一个通过API暴露给一个更大的C系统的Lua运行时环境。Lua程序有多个入口点,由C系统驱动。我还可以从Lua内部调用回调函数进入C系统。我拥有运行Lua的系统的root访问权限,但没有C源代码。

我发现了在Lua内部可以调用C函数的有效回调函数列表,因为这是内部公开的 - Lua必须知道这些是有效的函数。

有没有办法发现C系统将调用的Lua函数?我使用的API没有经过彻底的文档化,我想知道可以调用的Lua函数列表,以便由C系统调用。

原文链接 https://stackoverflow.com/questions/5875436

点赞
stackoverflow用户28817
stackoverflow用户28817

Lua拥有相当彻底的沙盒能力。如果 API 设计师不希望你知道某些事情,你就不会知道。

更让人复杂的是,Lua的API非常自由。一个应用程序设计者可以决定以101种不同的方式暴露API,其中没有一个比另一个更标准。但Lua还有一些非常好的反射和元编程功能,这些功能都被暴露在语言中。如果设计者没有刻意阻止你,你可能还是有机会的。

如果 C API 接受方法表(也称为类),通常可以覆盖 __index__newindex 元方法。当C API 尝试在表上调用方法时, __index 就会使用它要执行的方法名称进行调用。然后你可以打印一个包含回调名称的消息或写一个日志。接着建议调用基类函数,以便应用程序继续运行(并调用回调函数)。

2011-05-03 22:10:25
stackoverflow用户736889
stackoverflow用户736889

在这个特定的例子中,我找到了包含调用 Lua 沙盒的 C 代码的编译文件。我通过 strings 对其进行了处理,获得了嵌入在文件中的字符串列表,这让我找到了API函数,这些函数通过API从我的Lua沙盒中发送和接收。

现在我拥有了Lua沙盒中可以调用的所有函数列表。

2011-05-06 00:49:42