是否有命令行工具告诉我给定的.Net程序集是否使用COM互操作服务?
不使用COM互操作的示例:
internal class ServerClass { }例如:
[ComImport]
[Guid("114383E9-1969-47D2-9AA9-91388C961A19")]
internal class ServerClass { }发布于 2022-06-08 07:38:47
我想答案是否定的。
但你可以造一个。从反编译程序的输出开始,寻找COM互操作特有的类型和方法的使用(例如。Type.GetTypeFromProgID)。
发布于 2022-06-08 08:37:09
从COM和这就是所有可以导入的COM。导入的类和接口似乎可以使用一个简单的正则表达式(或findstr所认为的正则表达式--注意转义的空间,否则会被用作"OR“--即大多数正则表达式中的| )来表示:
> ildasm /text NetClient.exe | findstr "\.class.*\ import "
.class interface private abstract auto ansi import NetClient.IServer
.class interface private abstract auto ansi import NetClient.Server
.class private auto ansi import beforefieldinit NetClient.ServerClass我已经用一堆dll测试过了,没有假阳性--我只希望没有假阴性.
此外-感谢注释中的Simon - CreateInstance()可以用于在运行时动态加载dll,因此也应该检查它(由于后者的不寻常和有限的regexp语法,这次使用grep而不是findstr ):
> ildasm /text file.dll \
| grep -E 'call.*System.Activator|Reflection.Assembly)::CreateInstance'N.B. ildasm应该随Visual一起安装,并且在使用Visual命令提示符时最容易调用。
https://stackoverflow.com/questions/72541714
复制相似问题