有没有办法列出链接的程序集名称?

时间:2017-06-19 08:50:10

标签: c++ windows visual-c++

我想列出链接到我的.exe的程序集名称。正如我在c#中看到的,我们有一个API可以完成我想要的东西,即"Assembly.GetReferencedAssemblies" 说明:获取此程序集引用的所有程序集的AssemblyName对象。

与C#类似,我们可以用c ++获取库列表。

如果有人能给我一个建议,那就太好了。

1 个答案:

答案 0 :(得分:1)

你走了。打开VS并创建一个新的Win32控制台应用程序
复制并粘贴下面的代码。跑吧。

#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <vector>
#include <iostream>
#include <string>

int PrintModules(DWORD processID)
{
    std::vector<HMODULE> modules;
    HANDLE process;
    DWORD bytesNeeded;

    std::cout << "Process ID:" << processID << std::endl;
    process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
    if(NULL == process)
        return 1;

    EnumProcessModulesEx(process, nullptr, 0, &bytesNeeded, LIST_MODULES_ALL);
    modules.resize(bytesNeeded / sizeof(HMODULE));
    if(EnumProcessModulesEx(process, modules.data(), modules.size() * sizeof(HMODULE), &bytesNeeded, LIST_MODULES_ALL))
    {
        for(auto handle : modules)
        {
            std::vector<char> moduleName(1024, 0);
            auto newSize = GetModuleFileNameEx(process, handle, moduleName.data(), moduleName.size());
            moduleName.resize(newSize);
            std::cout << "\t" << moduleName.data() << std::endl;
        }
    }
    CloseHandle(process);
    return 0;
}

int main()
{
    PrintModules(GetCurrentProcessId());
    return 0;
}

你应该得到像

这样的东西
  

流程ID:9348
          C:\ Path \ Visual Studio 2015 \ Projects \ ConsoleApplication5 \ Debug \ ConsoleApplication5.exe
          C:\ WINDOWS \ SYSTEM32 \ ntdll.dll中
          C:\ WINDOWS \ SYSTEM32 \ KERNEL32.DLL
          C:\ WINDOWS \ SYSTEM32 \ KERNELBASE.dll
          C:\ WINDOWS \ SYSTEM32 \ MSVCP140D.dll
          C:\ WINDOWS \ SYSTEM32 \ VCRUNTIME140D.dll
          C:\ Windows \ System32下\ ucrtbased.dll

现在将新的Win32 DLL添加到解决方案中。链接您的控制台应用程序。从main中的新库中调用任何方法。这样的事情。

int main()
{
    auto res = fnMyLibrary();
    PrintModules(GetCurrentProcessId());
    return 0;
}

重新运行你的程序。你应该得到这样的东西

  

流程ID:9348
          C:\ Path \ Visual Studio 2015 \ Projects \ ConsoleApplication5 \ Debug \ ConsoleApplication5.exe
          C:\ WINDOWS \ SYSTEM32 \ ntdll.dll中
          C:\ WINDOWS \ SYSTEM32 \ KERNEL32.DLL
          C:\ WINDOWS \ SYSTEM32 \ KERNELBASE.dll
          C:\ Path \ Visual Studio 2015 \ Projects \ ConsoleApplication5 \ Debug \ MyLibrary.dll
          C:\ WINDOWS \ SYSTEM32 \ MSVCP140D.dll
          C:\ WINDOWS \ SYSTEM32 \ VCRUNTIME140D.dll
          C:\ Windows \ System32下\ ucrtbased.dll

整个解决方案是here

相关问题