gpt4 book ai didi

.net - 通过查看 MSIL 确定 .Net 可执行文件调用的程序集/DLL?

转载 作者:行者123 更新时间:2023-12-02 08:38:01 24 4
gpt4 key购买 nike

这似乎是一个奇怪的问题,我希望我的术语是正确的...

是否有任何方法可以通过检查 .Net 应用程序的 MSIL 来确定调用了哪些程序集或其他外部 .DLL?如果是这样,是否可以查看对这些外部程序集或 DLL 进行了哪些函数调用?

我问的原因是这样的:

从我迄今为止所做的一点点 .Net 移动开发来看,似乎程序员通常必须明确说明应用程序所需的功能。例如,假设某人正在为需要访问加速度计的 Windows Phone 平台编写 .Net 应用程序,他/她必须明确声明该应用程序需要使用加速度计。似乎整个过程可以通过分析原始源代码的 include 语句来实现自动化。例如,如果源代码中有“使用 Microsoft.Devices.Sensors”这一行,则该应用很可能需要使用加速度计、指南针或光传感器。然后可以根据源代码中的 include 语句生成应用程序的需求列表,而不必依赖于程序员指定的东西。因此,在应用程序的描述中,它可以说“此应用程序需要访问此设备的传感器”。这样做的问题是,显然源代码没有提交到应用商店。

从我所做的一小部分 Windows 8 开发工作中,我注意到 Windows 8(或 Windows Marketplace)的 metro-style 应用程序被禁止调用外部 DLL 以及某些其他系统调用。这是在生成应用程序时在编译/构建时强制执行的。作为一项额外的安全措施,同样的技术 - 检查 MSIL 以确定正在调用哪些外部程序集/DLL 可以用作额外的安全措施,以确保没有潜在的未沙盒应用程序最终出现在应用程序商店中。

因为这还没有完成,我猜这是不可能的,但我想问问也无妨。这似乎是一种确定应用程序真正需要访问哪些内容的灵巧方法,而不是依赖于可能草率的程序员决定要求特定应用程序的所有功能,但实际上并不使用它们。

最佳答案

静态分析不足以确定程序将调用哪种 DLL 或方法。与 Python 和 VB.NET 等语言不同,C# 语言严重偏向于早期绑定(bind)和静态类型检查,但它也有很多后期绑定(bind)的方法。反射、dynamic 关键字和 Activator.CreateInstance() 是实现此目的的主要工具。它们也可以在 Store 或 Phone 项目中使用。

所以不,应用程序仍然需要沙盒来弥补这个漏洞。

关于.net - 通过查看 MSIL 确定 .Net 可执行文件调用的程序集/DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19307602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com