c++ - 如何从Lua运行进程中读取变量值(获取进程变量值)?

标签 c++ variables interface process lua

我尝试了一些尝试来运行 Lua 代码,并在它通过 C/C++ 运行时检索它的值,但我的应用程序因段错误而崩溃。

例如。访问不属于我的内存:

到目前为止,我得到了这个。简单的过程,使用 Lua 解释器:

a = {5}

local Cnt1 = 0
local Cnt2 = 0
while true do
  Cnt2 = Cnt2 + 1
  if(Cnt2 == 100000000) then
    Cnt2 = 0
    print("Irer: "..Cnt1.." Address: "..tostring(a).." Value: "..a[1])
    Cnt1 = Cnt1 + 1
  end
end

无限循环实际上是为了保持进程唤醒和表地址不变。

如您所见,我打印了“a”的地址,我从控制台本身将其复制粘贴到 C(代码块)。之后我编写了另一个程序,我将指针硬编码为内存映射,如下所示:

unsigned char *p = (unsigned char *)0x78C070;
printf("Value: %u",*p);
return 0;

可能的方法是
1)我可以尝试的方法是一个文件,但它真的很慢(HDD)

2) ram-disk 上的文件 - 速度很快,但不是每个人都有 ram-disk。

最佳答案

创建一个 C 包装程序并使用 Lua C API 检索值。这是一个应该检索您的“a”的示例。没有错误处理,但希望您能理解。

lua_State *L = sys_lua_L();
luaL_loadfile(L, "your_lua_script.lua");
lua_pcall(L, 0, 0, 0);
lua_getglobal(L, "a"); // retrieve lua variable a
lua_rawgeti(L, -1, 1); // assumes "a" is a table
int val = lua_tointegerL, -1);
printf("%d\n", val);

关于c++ - 如何从Lua运行进程中读取变量值(获取进程变量值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26585199/

相关文章:

c++ - QtWebkit同步加载

c++ - "If a C++ pointer is deleted twice, it can cause a trap"——陷阱是什么意思?

c++ - OpenGL glCallLists 在 Windows 7 上绘制不正确的字符

go - 减少 Golang 中的代码重复

android - PreferenceActivity 的 UI 刷新

C++ 将文件从资源复制到目录?

variables - AngularJS:从 Controller 内读取路由参数

javascript - 这是确定 JavaScript 变量类型的有效方法吗?

json - Powershell Convert-To Json - 动态添加内容

interface - 满足隐式接口(interface)而无需重新实现的记录