C# 使用参数从DLL调用函数

C# 使用参数从DLL调用函数,c#,dll,invoke,shellcode,C#,Dll,Invoke,Shellcode,我尝试从外壳代码中调用和加载函数,如下所示 public static byte[] uc = { 0x4D,0x5A,0x90,0x00,0x03,0x00};//example 在这段代码中是我的类和函数 我找到了一些dll文件的调用方法,但是如何从我的外壳代码(c#dll的外壳代码)加载函数呢 例如: 我有一个dll,并通过 public static void WriteShell() { using (StreamWriter fs = new Stream

我尝试从外壳代码中调用和加载函数,如下所示

public static byte[] uc = { 
0x4D,0x5A,0x90,0x00,0x03,0x00};//example
在这段代码中是我的类和函数

我找到了一些dll文件的调用方法,但是如何从我的外壳代码(c#dll的外壳代码)加载函数呢

例如:

我有一个dll,并通过

public static void WriteShell()
    {
        using (StreamWriter fs = new StreamWriter("shellcode.cs"))
        {
           byte[] Data = ReadFile("now.dll", GetSize("now.dll"));
              int  Size = GetSize("now.dll");
            fs.Write("public static class ShellCode\n{\n\t");

            fs.Write("public static byte[] ucShell = {\t");
            for (int i = 0; i < Size; ++i)
            {
                if (i != 0)
                {
                    fs.Write(',');
                }

                if ((i % 15) == 0)
                    fs.Write("\n\t");

                fs.Write("0x" + Data[i].ToString("X2"));
            }
            fs.Write("};");
            fs.Write("\n\n\tpublic const int ulSize = {0};\n", Size);
            fs.Write("}");
        }
在dll中,我有一个类和一些函数,例如msgbox或类似的东西

例如:

public static class now
{
static void run()
        {
            Messagebox.Show("test");
        }

}
现在我试着用这样的调用来调用这个函数,
您可以从字节[]加载程序集。加载程序集,然后使用反射查找要调用的函数

    var assembly = System.Reflection.Assembly.Load(uc);
    var nowType = assembly.GetType("now");
    nowType.InvokeMember("run", ...)

可以从字节[]加载程序集。加载程序集,然后使用反射查找要调用的函数

    var assembly = System.Reflection.Assembly.Load(uc);
    var nowType = assembly.GetType("now");
    nowType.InvokeMember("run", ...)
到目前为止

现在我已经试过了

 RuntimeHelpers.GetObjectValue(Assembly.Load(uc).GetType("Classname").GetMethod("Functionname").Invoke(null, new object[] { "some ", "params", true, "blabla" }));
也许我需要停一下…--

好的,现在我有了它,我忘记声明名称空间了。。。。。 谢谢你们的帮助

到目前为止

现在我已经试过了

 RuntimeHelpers.GetObjectValue(Assembly.Load(uc).GetType("Classname").GetMethod("Functionname").Invoke(null, new object[] { "some ", "params", true, "blabla" }));
也许我需要停一下…--

好的,现在我有了它,我忘记声明名称空间了。。。。。
谢谢你们的帮助

请澄清您的具体问题或添加其他详细信息,以突出显示您所需的内容。正如目前所写的,很难准确地说出你在问什么。请参阅页面以获取澄清此问题的帮助。查看如何使用DllImportAttribute。这可能会帮助您:我希望我的编辑可以澄清此问题。对不起,我的英语不是最好的:)请澄清您的具体问题或添加额外的细节,以突出您所需要的。正如目前所写的,很难准确地说出你在问什么。请参阅页面以获取澄清此问题的帮助。查看如何使用DllImportAttribute。这可能会帮助您:我希望我的编辑可以澄清此问题。对不起,我的英语不是最好的:)是的,它像这里,但如何用我的字节[]?@greenhorn我编辑了代码,现在你有了类型,可以做一些类似于codeproject Article的事情是的,我有这个程序集ba=Assembly.Load(uc);类型t=ba.GetType(“Run”);MethodInfo m=t.GetMethod(“HandleRun”);对象结果=(bool)m.Invoke(null,新对象[]{“”,string.Empty,file,true});但是这不起作用,trow me对象引用未设置为对象实例是的,类似于这里,但如何使用我的字节[]?@greenhorn我编辑了代码,现在您有了类型,可以执行类似于codeproject Article的操作是的,我有这个程序集ba=Assembly.Load(uc);类型t=ba.GetType(“Run”);MethodInfo m=t.GetMethod(“HandleRun”);对象结果=(bool)m.Invoke(null,新对象[]{“”,string.Empty,file,true});但这不起作用,因为对象引用未设置为对象实例