我如何将IEnumerable <long>转换为long

时间:2018-12-29 10:18:09

标签: c# memory process ienumerable long-integer

我为游戏制作了版本检查器。我们从任何地方都看不到游戏版本。我们刚刚使用作弊引擎找到了版本字符串。这是版本字符串地址= 56 32 2E ?? ?? ?? 00 00

我正在使用Memory.DLL进行ArrayOfBytes扫描,然后将其更改为字符串。

我尝试了很多方法,但无法解决。

此处错误:

using Memory;

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
        while (true)
        {
            int pID = m.getProcIDFromName("Growtopia");

            bool openProc = false;

            if (pID > 0) openProc = m.OpenProcess(pID);
            long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result; //ERROR AT HERE... // VERSION ADDRESS
            vers.Text = myAobScan.ToString();

            if (openProc)
            {
                m.writeMemory("0x7FF6F22818C7", "bytes", "0x90 0x90"); // BAN BYPASS
            }
        }
}

IEnumerable参数:

public async Task<IEnumerable<long>> AoBScan(long start, long end, string search, bool writable = false, bool executable = true, string file = "")

1 个答案:

答案 0 :(得分:0)

IEnumerable可以包含0到数十万个long。因此,您的问题是,它需要知道您想使用多长时间。

不知道AoBScan的行为方式(仅知道参数对理解方法的作用没有多大帮助),很难说您是否期望它很长,或者是否有很多选择。

话虽如此,要将IEnumerable转换为单个实例,您必须选择其中一项。有几种方法可以做到...

您可以使用以下内容拉出第一个

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.First();

或者在下面拉出最后一个

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.Last();

或编写一个“ Where”谓词来抽取与您期望的条件匹配的谓词

long myAobScan = m.AoBScan(0x700000000000, 0x7FFFFFFFFFFF, "56 32 2E ?? ?? ?? 00 00").Result.Where(lng => lng > 10);

所有这些都会使IEnumerable长时间退出。如果您需要将所有内容都提取出来并将其转换为字符串,则完全是另一个问题。