问题标签 [lua-alien]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lua - Lua 和 Alien 结构
我正在尝试使用外星人 0.50 模块将此 C 结构重新定义为 Lua,但是最后我有两个 char 数组。两者szLibraryPath
和szLibraryName
最初在 C 中定义
char szLibraryPath[MAX_PATH]
。这可以用外星人完成吗?
lua - Lua Alien 模块 - 使用 WriteProcessMemory 函数时出现问题,不确定类型(unit32)
这就是我的代码。我什至不确定我是否正确设置了类型。
我完全迷失了,需要一些指导。我真的希望有更多关于外星人的在线帮助/文档,这让我可怜的大脑感到困惑。
令我完全困惑的是,WriteProcessMemory有时会成功完成(尽管据我所知,它什么都不做),有时也会无法成功完成。正如我所说,我的大脑很痛。
任何帮助表示赞赏。
c++ - 在便携式应用程序中包含 Alien,C++
好的,我已经搜索了很多,但似乎无法找到如何实现这一目标的答案或示例。
基本上,我有一个设计为可移植的应用程序(在 VS2010 中使用 VC++ 构建,但没有 MFC 或托管组件,原始 WinAPI)。我在其中内置了 Lua 5.2,并允许用户在应用程序中编写脚本。我有多个粘合函数,这些函数暴露给处理各种 WinAPI 调用的 Lua 脚本。
但是,我想做的是允许用户编写一个看起来像这样的脚本:
我似乎根本找不到办法做到这一点。我不想要求用户为 Windows 安装 Lua,理想情况下,没有外星人的 core.dll 和 struct.dll;当我试图对 ./alien/ 中的那些 DLL 做一些事情时,它在 Lua5.1.dll 中崩溃了,因为我安装了 LuaForWindows,我卸载了 LFW,然后它只是说 Lua5.1.dll 丢失了。我在我的应用程序中内置了 Lua 5.2,所以很明显来自 Alien rock 的核心/结构 DLL 期望 Lua5.1.dll 在路径中。
我做了一个毫无价值的尝试,试图将 Alien src 包含到项目中,但似乎也没有那样工作。
任何想法将不胜感激。我希望它全部包含在我的应用程序中,但如果这是唯一的选择,我会选择一个解决方案,其中包括在我的项目中包含要构建和捆绑的库,并在分发中捆绑。
谢谢!
更新:
好的,谢谢本·沃伊特!我想我快到了。我已经引入 core.c 和 struct.c 并确保所有路径都用于 libffi。一切编译都没有问题,直到我尝试在 core.c(alien.core src 文件)中调用 luaopen_alien_core,声称标识符未声明。我试图在我试图进行调用的单独源文件中声明函数签名,编译得到进一步,但未能抱怨未解析的外部。
显然,这现在可能是一个普遍的 C++ 问题(因为我只是该领域的新手)。这是我所拥有的一般想法:
这无法开始编译,发出错误:
这是有道理的,所以我将以下行添加到 myheader.h:
这可以编译,但无法链接:
以我有限的经验,我已经尝试了几件我能想到的事情,但没有什么能满足这个错误。我什至尝试将 core.c 的内容移动到 mysource.c 中,但这会造成完全不同的混乱,而且似乎是错误的方式。
我希望并想象这真的很愚蠢,但我只是不确定如何让它调用 luaopen_alien_core,这似乎是我需要的最后一块。
再次感谢!}
winapi - Lua Alien - Win32 API WaitForSingleObject 函数中定义的变量
我正在使用Alien for Lua来引用 Windows Kernel32.dll 中的WaitForSingleObject 函数。
我对 Windows 编程很陌生,所以我的问题是关于WaitForSingleObject 文档引用的以下#define d 变量:
如果 dwMilliseconds 是INFINITE,则该函数将仅在对象发出信号时返回。
什么是无限价值?我自然会认为它是-1
,但我无法在任何地方找到它的文档。
此外,在下表中,它提到了十六进制的返回值,但我对为什么它们L
在最后一个数字后面有一个字符感到困惑。这可以像将其转换为 Long 一样简单吗?
我问的原因是因为 Lua 使用Number 数据类型,所以我不确定是否应该通过十六进制数字(0-F)或十进制数字(0-9)检查这个返回值?
winapi - Lua字符串不会连接
我正在尝试连接一个变量以使我的输出“更漂亮”,但是当它与其他字符串值连接时,它似乎输出为一个空字符串。
输出代码摘录如下所示:
输出:
该name
变量是通过Alien for Lua调用从WINAPI SendMessage 函数设置的User32.dll
。我认为这可能是问题的一部分,但是正如您在上面看到的,该变量设置为类型(Lua)“字符串”,并且在自行调用时打印正常。但是,无论何时将它与任何东西连接起来,它都会像空字符串(或类似的东西)一样。
编辑: 我也试过tostring(name)
and alien.tostring(name)
。两者都不能解决问题。
lua - 在 Lua 中,如何对先前压缩的消息使用 zlib 解压缩?
我正在用 Lua 编写一个 Wireshark 解剖器。被剖析的应用程序通过 TCP 运行。我遇到的问题是它需要zlib解压缩。我只需要解压缩数据。我收到的数据在发送之前已经被压缩,所以我没有原始的未压缩文件大小。我尝试或找到的所有示例都需要在同一端进行压缩然后解压缩。我一直在尝试使用外星人 ffi 来做到这一点。有谁知道如何解决这个问题?或者任何人都可以帮助我重写 zlib 中的膨胀函数以使用外星人?我包括指向我目前正在尝试实现功能的代码的链接。 http://www.cprogramdevelop.com/3987529/
pointers - Lua Alien - 指针算术和解引用
我的目标是调用 Windows 的GetModuleInformation函数来获取MODULEINFO结构。这一切都很好。问题是由于我想对LPVOID lpBaseOfDll
作为MODULEINFO
.
这是我在 Lua 中调用函数的代码:
在这一点上,mod.SizeOfImage
似乎给了我期望的正确值,所以我知道正在调用函数并且正在填充结构。但是,我似乎无法对指针进行运算,mod.lpBaseOfDll
因为它是一个UserData
.
外星人文档中唯一可以解决我正在尝试做的事情的信息是:
- 指针解包
Alien 还提供了三个方便的函数,可让您取消引用指针并将值转换为 Lua 类型:
alien.tostring 接受一个用户数据(通常从具有指针返回值的函数返回),将其转换为 char*,并返回一个 Lua 字符串。您可以提供一个可选的大小参数(如果您不先在缓冲区上调用 Alien 的 strlen)。
alien.toint 获取一个用户数据,将其转换为 int*,取消引用并将其作为数字返回。如果你给它传递一个数字,它假定 userdata 是一个具有这个元素数量的数组。
alien.toshort、alien.tolong、alien.tofloat 和 alien.todouble 类似于 alien.toint,但可以与各自的类型转换一起使用。未签名的版本也可用。
我的问题是,我需要一个字节一个字节地去,而且没有任何alien.tochar
功能。此外,更重要的是,这仍然不能解决我能够获取基地址之外的元素的问题。
- 缓冲器
创建缓冲区后,您可以将其传递给字符串或指针类型的任何参数。
...
您还可以将缓冲区或其他用户数据传递给您的结构类型的新方法,在这种情况下,这将是您正在创建的结构实例的后备存储。这对于解压缩 C 函数返回的外部结构很有用。
这些似乎表明我可以使用 analien.buffer
作为MODULEINFO
's的论点LPVOID lpBaseOfDll
。缓冲区被描述为字节数组,可以使用以下符号进行索引: buf[1]
,buf[2]
等。此外,缓冲区按字节排列,因此这将理想地解决所有问题。(如果我理解正确的话)。
不幸的是,我在任何地方都找不到任何这样的例子(不在文档、stackoverflow、谷歌等中),所以我不知道该怎么做。我尝试了几种语法变体,但几乎每个都给出了运行时错误(其他的根本无法按预期工作)。
关于我如何能够mod.lpBaseOfDll
通过取消引用和指针算术逐字节(C char-by-char)的任何见解?