非静态字段、方法或 属性 需要对象引用

An object reference is required for a non-static field, method, or property

using System;
using System.Diagnostics;
using System.Reflection.Emit;
using System.Threading;
using EasyExploits;

namespace ConsoleApp1
{
    class Program
    {
        EasyExploits.Module module = new EasyExploits.Module();

        static void Main(string[] args)
        {
            Module.LaunchExploit();
            Console.ForegroundColor = ConsoleColor.Green;
            Label:
            Console.WriteLine("Please Type 'Inject'");
            string proccess1 = Console.ReadLine();
            if (proccess1 == "Inject")
            {
                Console.WriteLine("");
                Console.WriteLine("Injected!");
                goto Begin;
            }
            else
            {
                goto Label;
            }
            Begin:
            Console.WriteLine("");
            Console.WriteLine("Enter a script and press enter to execute it.");
            string answer = Console.ReadLine();
            Module.ExecuteScript(answer);
            goto Begin





        }
    }
}

所以,我试图找到解决这个问题的方法,但找不到,所以我来到堆栈溢出。无论如何,当脚本被粘贴到输入中时,我的控制台应用程序应该注入 EasyExploits.DLL 并执行 Lua 脚本。但是,我收到并错误地说,"An object reference is required for the non-static field, method, or property 'Module.LaunchExploit()'""An object reference is required for the non-static field, method, or property 'Module.ExecuteScript(string)'" 我是 c# 的初学者,并不是真的理解这个错误,所以如果有人可以通过对初学者友好的简单步骤引导我完成它,那就太好了。

您的 Main 方法是静态的,并且您可以从静态方法访问同一 class 的 个静态成员。您需要做的就是让您的 EasyExploits.Module 也保持静态:

private static readonly EasyExploits.Module module = new EasyExploits.Module();

这里有 2 个问题

  1. 模块是一个class,但是LaunchExploit()不是静态的,也就是说,它需要从一个object运行。您可能打算使用对象 module
  2. module 也应该是 static,如果你想在 static 函数中使用它 main

我还要提一个不那么紧迫的问题:goto 很少是个好主意。如果您:

,您的代码会变得更好:

  1. 创建一个静态函数 begin,然后在任何地方 go to Begin 执行:
begin()
return;
  1. 创建一个 static 函数 label,对其执行相同的操作

这将使您的代码更具可读性和可调试性。