Imports System.Runtime.InteropServices
Public Class Form1
Public SpielName As String = "hl2" 'GAME NAME
Public ModuleName As String = "client.dll"
Public Prozess As Process
Public ModuleBase As Integer
Sub ProzessName(ByRef Prozess As Process, ByRef ModuleBase As String)
Dim BaseAdresse As String
Dim BaseAdresseHex As Integer
Try
Dim p As Process = Process.GetProcessesByName(SpielName)(0)
For Each Module1 As System.Diagnostics.ProcessModule In p.Modules
If Module1.FileName.IndexOf(ModuleName) <> -1 Then
BaseAdresse = Module1.BaseAddress.ToString
Prozess = p
End If
Next
Label1.Text = "Module: OK"
Catch ex As Exception
Label1.Text = "Module: ERROR"
End Try
BaseAdresseHex = BaseAdresse
ModuleBase = Convert.ToString(BaseAdresseHex, 16)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ProzessName(Prozess, ModuleName)
End Sub
End Class
For Each Module1 As System.Diagnostics.ProcessModule In p.Modules
If Module1.ModuleName.Equals(ModuleName) Then
BaseAdresse = Module1.BaseAddress.ToString
Prozess = p
End If
Next
Private Shared Function GetModuleBase(ByVal processName As String, ByVal moduleName As String) As IntPtr
Try
Dim running As Process() = Process.GetProcessesByName(processName)
If running.Length > 0 Then
Dim target As Process = running(0)
Dim targetModule As ProcessModule = (From pm In target.Modules Where pm.ModuleName.ToLower().Equals(moduleName.ToLower()) Select pm).FirstOrDefault()
If targetModule IsNot Nothing Then
Return targetModule.BaseAddress
End If
Else
Throw New ArgumentOutOfRangeException("Target process is not running")
End If
Catch ex As Exception
MessageBox.Show(String.Format("Post the following error in your thread on MPGH:{0}{0}{1}", Environment.NewLine, ex.Message))
End Try
Return IntPtr.Zero
End Function
Dim proc As String = "hl2"
Dim modName As String = "client.dll"
Dim baseAddress As IntPtr = GetModuleBase(proc, modName)
MessageBox.Show(String.Format("{0}'s base address is: 0x{1}", modName, baseAddress.ToString("X8")))
Private Shared Function GetModuleBase(ByVal processName As String, ByVal moduleName As String) As IntPtr
Try
Dim running As Process() = Process.GetProcessesByName(processName)
If running.Length > 0 Then
Dim target As Process = running(0)
Dim targetModule As ProcessModule = (From pm In target.Modules Where pm.ModuleName.ToLower().Equals(moduleName.ToLower()) Select pm).FirstOrDefault()
If targetModule IsNot Nothing Then
Return targetModule.BaseAddress
End If
Else
Throw New ArgumentOutOfRangeException("Target process is not running")
End If
Catch ex As Exception
MessageBox.Show(String.Format("Post the following error in your thread on MPGH:{0}{0}{1}", Environment.NewLine, ex.Message))
End Try
Return IntPtr.Zero
End Function
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MessageBox.Show(GetModuleBase("hl2", "client.dll"))
End Sub