如何快速复制一个模块的大小?

我一直在尝试复制一个模块从基址到模块大小的内存,而不会让计算机的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

我基本上是试图在已分配的空间中重新创建完全相同的模块(我不在脚本内部写入内存)。

非常感谢您能提供帮助!

点赞
用户4687565
用户4687565

这份文档中的一个特定章节被称为“关于字符串”,它建议避免在循环中使用拼接。以下是该文章中的另一种解决方案的引用:

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

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

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

我敢打赌,将数据写入磁盘的开销也很大,如果你使用用转义字符\n分隔行的大表格调用单个 print(),你会有一个加速效果。如果你打印到磁盘文件的话。

2016-06-02 21:41:06