操作 int 和字符串类型以实现函数参数兼容性

本文关键字:实现 函数 参数 兼容性 类型 int 字符串 操作 | 更新日期: 2023-09-27 18:37:20

我正在使用一个readprocessmemory类,并让它用于读取多级指针并在label2.text中的最终地址显示整数。

这适用于我指定基址的地方(在下面显示为"0x40000"):

private void label2_Click(object sender, EventArgs e)
    {
        int Readpointer = Trainer.ReadPointerInteger("runningprocess", 0x40000, new int[3] { 0x3, 0x4, 0x10 });
        string converted = Readpointer.ToString();
        label2.Text = converted;

现在,我不想指定基址"40000",而是想使用一个函数来"找出"进程的基址并将其存储在变量中,并将其作为参数传递。 这是第一部分:

        Process[] test = Process.GetProcessesByName("runningprocess"); //Get process base address
        int Base = test[0].MainModule.BaseAddress.ToInt32(); // ""

不幸的是,"Trainer.ReadPointerInteger"函数需要"0x40000"形式的基址参数。所以我这样做了:

        string BaseAddress = "0x" + Addr.ToHex(Base); // addr.ToHex is just another function which converts the int to hex.

现在我想将变量传递给第二个参数ReadPointerInteger's我尝试了这个:

        int Readpointer = Trainer.ReadPointerInteger("runningprocess", BaseAddress, new int[3] { 0x3, 0x4, 0x10 });
        string converted = Readpointer.ToString();
        label2.Text = converted;

看起来这应该可以工作,但问题(错误)是"Trainer"函数的第二个参数是一个 Int,对于我的新手来说,这很奇怪,因为对我来说,有一个包含字母的输入参数并不直观作为 Int。无论如何,我被困在这里,想知道是否有人可以指出如何解决 Int/String 问题?

仅供参考,ReadPointerInteger类是:

public static int ReadPointerInteger(string EXENAME, int Pointer, int[] Offset)
{
    int Value = 0;
    checked
    {
        try
        {
            Process[] Proc = Process.GetProcessesByName(EXENAME);
            if (Proc.Length != 0)
            {
                int Bytes = 0;
                int Handle = OpenProcess(PROCESS_ALL_ACCESS, 0, Proc[0].Id);
                if (Handle != 0)
                {
                    foreach (int i in Offset)
                    {
                        ReadProcessMemoryInteger((int)Handle, Pointer, ref Pointer, 4, ref Bytes);
                        Pointer += i;
                    }
                    ReadProcessMemoryInteger((int)Handle, Pointer, ref Value, 4, ref Bytes);
                    CloseHandle(Handle);
                }
            }
        }
        catch
        { }
    }
    return Value;
}

操作 int 和字符串类型以实现函数参数兼容性

>0x40000只是整数262144的另一个名称。它不是一个带有"0x"的字符串,它是编写整数的替代语法,用于以 16 为基数比以 10 为基数更具启发性的情况。特别是,以下情况不能成立:

"Trainer.ReadPointerInteger"函数需要"0x40000"形式的基址参数。

只是地址通常用十六进制写