首页 > 解决方案 > 如何将 lua 打印重定向到新的或现有的控制台窗口?

问题描述

我有一个程序可以将Luajit和自定义的 C 编写的 DLL 注入到已经运行的进程中。自定义 DLL 调用DllMain中的CreateThread来运行创建新 Lua 状态并在受害进程上运行 Lua 脚本的函数。如何在新的控制台窗口中或最好在注入器的现有控制台窗口中显示 Lua 脚本的打印输出?

注入器只是一个通过命令行运行到 luajit.exe 的 Lua 脚本。它使用 FFI 和 Windows API 来查找受害者进程并注入 lua51.dll 和我的自定义 DLL。请记住,我无法运行受害者 exe。我正在尝试教育自己为单人 Microsoft Gamepass 游戏创建作弊。

编辑(更新 1):

AllocConsole();
freopen_s((FILE**)stdout, "CONOUT$", "w", stdout);
freopen_s((FILE**)stdin, "CONIN$", "r", stdin);

printf("[+] Console activated!\n");

使用上面的代码,我看到了一个新的控制台,并看到了从 DLL 内部完成的 C printf 的输出。但是在 Lua 脚本中看不到print的输出。奇怪的是,我也没有看到ffi.C.printf的输出。我知道 Lua 脚本工作正常,因为我确实看到了 ffi.C.MessageBoxA弹出窗口。

标签: cwinapidlllualuajit

解决方案


推荐阅读