×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

好像不行,非托管代码必须要明确声明函数的返回值和各种参数。如果真有这种方法,微软system32下那么多的dll文件岂不没有秘密可以轻易破解

以前经常在c#下调用win32下的非托管函数,类似如下代码:

[DllImport("user32.dll")]
public static extern int MessageBoxEx(
IntPtr hWnd,
[MarshalAs(UnmanagedType.LPTStr)]String Message,
[MarshalAs(UnmanagedType.LPTStr)]String Header,
UInt32 Type,
UInt16 LanguageID);

这些都必须明确写出函数的各种参数,否则会错的很惨。我也曾有过类似的疑问,用一种技术自动探测出dll中的函数和参数,但好像没得到过肯定地回答。其实想想,如果真能这样,那微软那些dll也就没有什么秘密可言了。也不用公布什么原码了!

当然不排除一些智商极高的技术狂人有做到的可能!
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 请教C#高手: 只有DLL文件(非C#的),无任何其它说明,是否可用C#编出这些DLL的应用?
    如果可行。请指教方法:
    如何得知这些DLL内部的数据和方法?如何得知这些方法的使用?

    多谢!
    • 好像不行,非托管代码必须要明确声明函数的返回值和各种参数。如果真有这种方法,微软system32下那么多的dll文件岂不没有秘密可以轻易破解
      以前经常在c#下调用win32下的非托管函数,类似如下代码:

      [DllImport("user32.dll")]
      public static extern int MessageBoxEx(
      IntPtr hWnd,
      [MarshalAs(UnmanagedType.LPTStr)]String Message,
      [MarshalAs(UnmanagedType.LPTStr)]String Header,
      UInt32 Type,
      UInt16 LanguageID);

      这些都必须明确写出函数的各种参数,否则会错的很惨。我也曾有过类似的疑问,用一种技术自动探测出dll中的函数和参数,但好像没得到过肯定地回答。其实想想,如果真能这样,那微软那些dll也就没有什么秘密可言了。也不用公布什么原码了!

      当然不排除一些智商极高的技术狂人有做到的可能!
    • more than 50%.
      step1 softice
    • sorry,我的回答不准确,实际上你可以用 IDA PRO 4.8 用来反编译dll文件
      IDA PRO 4.8 可以说是目前最棒的静态反编译软件了,它可以找出dll文件的相关信息。但都是和c++和汇编有关的的,和C#没什么关系了。
      • 多谢,我会尝试一下。不知道在哪里找到这个工具,而且,它反编译成汇编语言还是可以得到C代码?
        • -->
        • Lutz Roeder's .NET Reflector