在 VB.net 中查找 DLL 的基址

Finding base address of DLL in VB.net

所以大约 2 周前我问了一个类似的问题,关于如何找到应用程序的基地址,但现在我也想知道如何为 DLL 找到它? (不是我构建的应用程序的 dll,而是系统上另一个应用程序 运行 的 dll)

Sub Main()
    For Each _process As Process In Process.GetProcesses
        If (CanAccessProcess(_process)) Then
            For Each _module As ProcessModule In _process.Modules
                Console.WriteLine(_module.BaseAddress)
            Next
        End If
    Next
    Console.ReadLine()
End Sub

Function CanAccessProcess(_process As Process)
    Try
        Dim temp As ProcessModule = _process.MainModule
        temp = Nothing
    Catch ex As System.ComponentModel.Win32Exception
        ' Its probably a 64 bit process
        Return False
    End Try
    Return True
End Function

这将简单地显示我们可以访问的所有进程的所有模块的所有BaseAddresses。它首先尝试访问其主模块的进程,以查看是否引发异常。如果它引发,我们知道我们无权访问该过程。