0

我一直在尝试将内存从一个模块复制到一个模块大小,而不需要 5 年的时间,而且我的计算机的 CPU 比天空还高。

我放在一起的这个脚本在 Cheat Engine LUA 中,它通过读取复制内存,然后在一行上打印每个字节,以便我可以使用它来写入分配的空间(memcopy // newmem2):

autoAssemble[[
    alloc(newmem2, 2048)
    label(memcopy)
    registerSymbol(memcopy)

    newmem2:
    memcopy:
]]

for i = 0x00, getModuleSize("Notepad.exe") do
    x = readBytes(getAddress("Notepad.exe+0" .. string.format("%x", i)))
    if (string.len(x) == 1) then
        print(x .. "0")
    else
        print(string.upper(string.format("%x", x)))
    end
    if (isKeyPressed(VK_F) == true) then break end
end

我基本上是在尝试在分配的空间中重新创建确切的模块(我不在脚本中编写内存)。

非常感谢您的帮助!

4

1 回答 1

0

该文档有一个名为“关于字符串”的特定章节,它建议不要在循环中进行串联。以下是文章中替代解决方案的引用:

local t = {}
for line in io.lines() do
t[#t + 1] = line
end
s = table.concat(t, "\n")

它考虑了 txt 文件的读取。本质上,它将每个获得的字符串放入一个表格元素中,然后使用内置函数将其组合成单个兆字符串。

循环中的这些字符串更改似乎对代码至关重要,但也许您可以将它们作为更大字符串的正则表达式而不是单个操作来执行。

而且我敢打赌,写入磁盘也有很大的开销,如果你调用一个print()带有大表的单行,其中行用转义字符分隔,\n你会有一个加速。如果它是您要打印到的磁盘上的文件。

于 2016-06-02T21:41:06.517 回答