这似乎是一个奇怪的问题,我希望我的术语是正确的......
有没有办法通过检查 .Net 应用程序的 MSIL 来确定调用了哪些程序集或其他外部 .DLL?如果是这样,是否可以查看对这些外部程序集或 DLL 进行了哪些函数调用?
我问的原因是这样的:
从我到目前为止所做的一点点 .Net 移动开发来看,似乎程序员通常必须明确说明应用程序所需的功能。例如,假设某人正在为需要访问加速度计的 Windows Phone 平台编写 .Net 应用程序,他/她必须明确声明该应用程序需要使用加速度计。通过分析原始源代码的包含语句,整个过程似乎可以自动化。例如,如果源代码中包含“使用 Microsoft.Devices.Sensors”行,则该应用很可能需要使用加速度计、指南针或光传感器。然后可以根据源代码中的包含语句生成应用程序的需求列表,而不必依赖程序员指定的东西。所以,在应用程序的描述中,它可能会说“此应用程序需要访问此设备的传感器”。这样做的问题是,显然源代码没有提交到应用商店。
从我所做的一小部分 Windows 8 开发中,我注意到 Windows 8(或 Windows Marketplace)的 Metro 风格应用程序被禁止调用外部 DLL 以及某些其他系统调用。这是在生成应用程序的编译/构建时强制执行的。作为一种额外的安全措施,同样的技术——检查 MSIL 以确定正在调用的外部程序集/DLL 可以用作额外的安全措施,以确保没有潜在的非沙盒应用程序最终出现在应用程序商店中。
由于这还没有完成,我猜这是不可能的,但我认为问它永远不会有坏处。这似乎是一种确定应用程序真正需要访问什么的巧妙方法,而不是依赖于一个可能草率的程序员,该程序员决定要求特定应用程序的所有功能实际上并不使用它们。