如何知道".exe"进程是用C++还是 C# 编写的?
How to know if a ".exe" process was written with C++ or C#?
可能的重复项:
如何判断 win32 应用程序是否使用 .NET 运行时
有一种方法可以手动识别特定的".exe"进程是使用 C++(非托管代码(还是使用 C#(托管代码(编写的?
如果您尝试确定进程是否为 .NET 进程,我可以建议一个受 Dave Van den Eynde 在本主题中的回答启发的解决方案: 如何判断 win32 应用程序是否使用 .NET 运行时
"如果应用程序需要 mscoree.dll 才能运行,则它是 .NET 可执行文件。
鉴于此,您可以检查进程的模块以查看是否列出了 mscoree。
foreach (var process in Process.GetProcesses())
{
if (process.Modules.OfType<ProcessModule>().Any(m => m.ModuleName.Equals("mscoree.dll", StringComparison.OrdinalIgnoreCase)))
{
Console.WriteLine("{0} is a .NET process", process.ProcessName);
}
}
在这里,您可以找到如何完成此操作的详细信息: 确定 DLL 还是 EXE 是托管组件
您可以在文件上运行 peverify 或 ildasm(可从 Visual Studio 命令行环境获得(,如果它不是托管代码,它会给你一个错误。 请注意,在某些情况下,当他们使用加密 IL 并隐藏 CLR 引导加载程序的保护系统时,此操作将失败,但大多数程序没有此保护。
如果它是一个.NET.exe(或.dll(,它将依赖于mscoree.dll你可以通过使用Dependency Walker或类似的东西来检查它。
如果你想以编程方式这样做,你可以把这个VB项目作为一个起点。
不过,这不会肯定地告诉您语言。无法区分 C# 与 VB.NET(或其他 .NET 语言(程序,也无法区分 C++ 与 C 程序(或其他非 .NET 语言(。有些事情可以排除一种或另一种是唯一使用的语言,或者使一种或另一种更有可能。甚至可能有非托管代码以某种奇怪的方式使用 mscoree.dll。
- enum是C++中的宏变量还是整数变量
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在命名空间中定义函数还是限定函数
- 架构决策:返回std::future还是提供回调
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 终端不会为C++文件创建.exe文件吗
- 异常属于C++中的线程还是进程
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何在C++中确定文本文件中的元素是字符还是数字
- 在Windows中以.exe的形式运行c++
- 返回值优化:显式移动还是隐式
- Visual Studio mkl_link_tool.exe链接错误
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- PrintWindow函数在notepad.exe中出错
- 缓冲区溢出到其他 exe 的内存中?还是从远程桌面程序到 csrss.exe?
- 我的应用程序是从Visual Studio内部运行还是通过执行EXE文件运行
- 如何查明exe文件是.Net exe还是常规exe
- 如何知道".exe"进程是用C++还是 C# 编写的?