Probleme bei Zugriff auf Funktionen in einer DLL

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    Probleme bei Zugriff auf Funktionen in einer DLL

    Hi @ all,

    ich habe mir aus dem (glaube ich gut bekannten) ReadWritingMemory Module versucht eine .dll zu erstellen, das erstellen klappt problemlos, ich kann auch einfach den Verweis hinzufügen usw.

    ABER, ich kann nur dann auf die Funktionen der .dll zugreifen, wenn ich die jeweilige CodeZeile mit einem Dim beginne..

    Spoiler anzeigen

    VB.NET-Quellcode

    1. #Region "Imports"
    2. Imports rwm
    3. #End Region
    4. Public Class Main
    5. #Region "ThreadSafeStuff"
    6. #End Region
    7. #Region "Deklaration and Initialization"
    8. Dim upd As New rwm.rwm
    9. #End Region
    10. #Region "MainFunction1"
    11. Dim Address0 As Integer = upd.CorrectBase("FTLGame", "FTLGame.exe") + &H39BAAC '<-funktioniert
    12. upd.WriteDMAInteger("FTLGame", Address0, {&H28, &H4, &H24, &H450}, 10000, 4) '<-funktioniert nicht
    13. #End Region
    14. #Region "MiscSubs"
    15. Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    16. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    17. Me.UpdateStyles()
    18. End Sub
    19. Private Sub Main_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    20. End Sub
    21. #End Region
    22. End Class


    wo habe ich hier denn etwas übersehen / falsch gemacht ?

    die .dll:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class rwm
    2. Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
    3. Public Declare Function WriteProcessMemory1 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    4. Public Declare Function WriteProcessMemory2 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single
    5. Public Declare Function WriteProcessMemory3 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
    6. Public Declare Function ReadProcessMemory1 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    7. Public Declare Function ReadProcessMemory2 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single
    8. Public Declare Function ReadProcessMemory3 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
    9. Const PROCESS_ALL_ACCESS = &H1F0FF
    10. Public Function CorrectBase(ByVal ProcName As String, ByVal ModuleName As String) As Integer
    11. Dim P As Process() = Process.GetProcessesByName(ProcName)
    12. If (P.Length <> 0) Then
    13. Dim pMod As ProcessModuleCollection = P(0).Modules
    14. For i As Integer = pMod.Count - 1 To 0 Step -1
    15. If pMod.Item(i).FileName.EndsWith(ModuleName) Then
    16. Return pMod.Item(i).BaseAddress.ToInt32
    17. End If
    18. Next i
    19. End If
    20. Return 0
    21. End Function
    22. Public Function WriteDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Integer, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
    23. Try
    24. Dim lvl As Integer = Address
    25. For i As Integer = 1 To Level
    26. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
    27. Next
    28. WriteInteger(Process, lvl, Value, nsize)
    29. Return True
    30. Catch ex As Exception
    31. Return False
    32. End Try
    33. End Function
    34. Public Function ReadDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Integer
    35. Try
    36. Dim lvl As Integer = Address
    37. For i As Integer = 1 To Level
    38. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
    39. Next
    40. Dim vBuffer As Integer
    41. vBuffer = ReadInteger(Process, lvl, nsize)
    42. Return vBuffer
    43. Catch ex As Exception
    44. Return -1
    45. End Try
    46. End Function
    47. Public Function WriteDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Single, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
    48. Try
    49. Dim lvl As Integer = Address
    50. For i As Integer = 1 To Level
    51. lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
    52. Next
    53. WriteFloat(Process, lvl, Value, nsize)
    54. Return True
    55. Catch ex As Exception
    56. Return False
    57. End Try
    58. End Function
    59. Public Function ReadDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Single
    60. Try
    61. Dim lvl As Integer = Address
    62. For i As Integer = 1 To Level
    63. lvl = ReadFloat(Process, lvl, nsize) + Offsets(i - 1)
    64. Next
    65. Dim vBuffer As Single
    66. vBuffer = ReadFloat(Process, lvl, nsize)
    67. Return vBuffer
    68. Catch ex As Exception
    69. Return -1
    70. End Try
    71. End Function
    72. Public Function WriteDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Long, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
    73. Try
    74. Dim lvl As Integer = Address
    75. For i As Integer = 1 To Level
    76. lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
    77. Next
    78. WriteLong(Process, lvl, Value, nsize)
    79. Return True
    80. Catch ex As Exception
    81. Return False
    82. End Try
    83. End Function
    84. Public Function ReadDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Long
    85. Try
    86. Dim lvl As Integer = Address
    87. For i As Integer = 1 To Level
    88. lvl = ReadLong(Process, lvl, nsize) + Offsets(i - 1)
    89. Next
    90. Dim vBuffer As Long
    91. vBuffer = ReadLong(Process, lvl, nsize)
    92. Return vBuffer
    93. Catch ex As Exception
    94. Return -1
    95. End Try
    96. End Function
    97. Public Sub WriteNOPs(ByVal ProcessName As String, ByVal Address As Long, ByVal NOPNum As Integer)
    98. Dim C As Integer
    99. Dim B As Integer
    100. If ProcessName.EndsWith(".exe") Then
    101. ProcessName = ProcessName.Replace(".exe", "")
    102. End If
    103. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    104. If MyP.Length = 0 Then
    105. Exit Sub
    106. End If
    107. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    108. If hProcess = IntPtr.Zero Then
    109. Exit Sub
    110. End If
    111. B = 0
    112. For C = 1 To NOPNum
    113. Call WriteProcessMemory1(hProcess, Address + B, &H90, 1, 0&)
    114. B = B + 1
    115. Next C
    116. End Sub
    117. Public Sub WriteXBytes(ByVal ProcessName As String, ByVal Address As Long, ByVal Value As String)
    118. If ProcessName.EndsWith(".exe") Then
    119. ProcessName = ProcessName.Replace(".exe", "")
    120. End If
    121. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    122. If MyP.Length = 0 Then
    123. Exit Sub
    124. End If
    125. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    126. If hProcess = IntPtr.Zero Then
    127. Exit Sub
    128. End If
    129. Dim C As Integer
    130. Dim B As Integer
    131. Dim D As Integer
    132. Dim V As Byte
    133. B = 0
    134. D = 1
    135. For C = 1 To Math.Round((Len(Value) / 2))
    136. V = Val("&H" & Mid$(Value, D, 2))
    137. Call WriteProcessMemory1(hProcess, Address + B, V, 1, 0&)
    138. B = B + 1
    139. D = D + 2
    140. Next C
    141. End Sub
    142. Public Sub WriteInteger(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Integer, Optional ByVal nsize As Integer = 4)
    143. If ProcessName.EndsWith(".exe") Then
    144. ProcessName = ProcessName.Replace(".exe", "")
    145. End If
    146. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    147. If MyP.Length = 0 Then
    148. Exit Sub
    149. End If
    150. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    151. If hProcess = IntPtr.Zero Then
    152. Exit Sub
    153. End If
    154. Dim hAddress, vBuffer As Integer
    155. hAddress = Address
    156. vBuffer = Value
    157. WriteProcessMemory1(hProcess, hAddress, CInt(vBuffer), nsize, 0)
    158. End Sub
    159. Public Sub WriteFloat(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Single, Optional ByVal nsize As Integer = 4)
    160. If ProcessName.EndsWith(".exe") Then
    161. ProcessName = ProcessName.Replace(".exe", "")
    162. End If
    163. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    164. If MyP.Length = 0 Then
    165. Exit Sub
    166. End If
    167. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    168. If hProcess = IntPtr.Zero Then
    169. Exit Sub
    170. End If
    171. Dim hAddress As Integer
    172. Dim vBuffer As Single
    173. hAddress = Address
    174. vBuffer = Value
    175. WriteProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
    176. End Sub
    177. Public Sub WriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4)
    178. If ProcessName.EndsWith(".exe") Then
    179. ProcessName = ProcessName.Replace(".exe", "")
    180. End If
    181. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    182. If MyP.Length = 0 Then
    183. Exit Sub
    184. End If
    185. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    186. If hProcess = IntPtr.Zero Then
    187. Exit Sub
    188. End If
    189. Dim hAddress As Integer
    190. Dim vBuffer As Long
    191. hAddress = Address
    192. vBuffer = Value
    193. WriteProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
    194. End Sub
    195. Public Function ReadInteger(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Integer
    196. If ProcessName.EndsWith(".exe") Then
    197. ProcessName = ProcessName.Replace(".exe", "")
    198. End If
    199. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    200. If MyP.Length = 0 Then
    201. Exit Function
    202. End If
    203. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    204. If hProcess = IntPtr.Zero Then
    205. Exit Function
    206. End If
    207. Dim hAddress, vBuffer As Integer
    208. hAddress = Address
    209. ReadProcessMemory1(hProcess, hAddress, vBuffer, nsize, 0)
    210. Return vBuffer
    211. End Function
    212. Public Function ReadFloat(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Single
    213. If ProcessName.EndsWith(".exe") Then
    214. ProcessName = ProcessName.Replace(".exe", "")
    215. End If
    216. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    217. If MyP.Length = 0 Then
    218. Exit Function
    219. End If
    220. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    221. If hProcess = IntPtr.Zero Then
    222. Exit Function
    223. End If
    224. Dim hAddress As Integer
    225. Dim vBuffer As Single
    226. hAddress = Address
    227. ReadProcessMemory2(hProcess, hAddress, vBuffer, nsize, 0)
    228. Return vBuffer
    229. End Function
    230. Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long
    231. If ProcessName.EndsWith(".exe") Then
    232. ProcessName = ProcessName.Replace(".exe", "")
    233. End If
    234. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    235. If MyP.Length = 0 Then
    236. Exit Function
    237. End If
    238. Dim hProcess As IntPtr = OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id)
    239. If hProcess = IntPtr.Zero Then
    240. Exit Function
    241. End If
    242. Dim hAddress As Integer
    243. Dim vBuffer As Long
    244. hAddress = Address
    245. ReadProcessMemory3(hProcess, hAddress, vBuffer, nsize, 0)
    246. Return vBuffer
    247. End Function
    248. End Class


    danke schon mal und Beste Grüße =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Hallo asusdk

    Ich kann dir nur empfehlen dringend die Options zu setzen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On


    Im Anhang eine Beispiel wie du Zugriff auf die Dll hast. Es müssen aber noch alle Exception korrigiert bzw angepasst werden.

    Edit: Irgendwie blick ich aber bei deinem Code in der Dll nicht ganz durch.

    Freundliche Grüsse

    exc-jdbi
    Dateien
    • Probe.zip

      (20,5 kB, 77 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    Wenn man vom Microsoft.VisualBasic-Namespace, den alten DLL-Deklarationen, sehr vielen Codewiederholungen und Option Strict Off absieht: Was genau funktioniert nicht? Auch wenn ich keine Ahnung habe, was der Code macht (weil ich zu faul bin, ihn zu analysieren): Funktioniert bei mir insofern alles, dass es weder Exceptions noch Abbrüche oder so gibt. Das Programm läuft dorsch.

    Ah, zu langsam, VaporiZed
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed wenn ich den Code der Klasse, direkt im Projekt einfüge, funktioniert es einwandfrei, aber mir geht es darum dies als .dll anzulegen,
    wenn ich das mache kann ich leider nicht auf die Funktionen in der (.dll)Klasse zugreifen, wie oben beschrieben.

    Greets

    @exc-jdbi also in deinem Bespiel scheint es zu funktionieren, aber anscheinend auch "nur" da die DLL als Projekt mit dabei ist, wenn ich in einem Anderen Projekt, den verweiss auf die fertige .dll hinzufüge, dann importiere, bleibt das ganze leider so wie davor, es funktioniert nicht die funktionen aufzurufen...

    Edit: Irgendwie blick ich aber bei deinem Code in der Dll nicht ganz durch.

    ist aus dem netz um direkten zugriff auf Rameinträge zu haben, kam als Module
    aber im Prinzip gehts hier ja gar nicht darum was die .dll macht, sondern wie ich auf (auch wenn es eine andere .dll wäre)
    darauf zugreifen kann


    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „asusdk“ ()

    "That's what I'm telling you."*. Hab Deinen DLL-Klassencode in eine neue DLL gepackt und kompiliert, meinem Testprojekt über die Verweise die DLL bekannt gemacht und dann eben Dim upd As New DllName.rwm. Was genau funktioniert denn da bei Dir nicht?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    ok, ich versuchs mal so,

    also die .dll ist erstellt/kompiliert (jetzt auch korrigiert mit Option Strict on) dann in einem gänzlich neuem Projekt

    Verweiss zur .dll hinzugefügt und Importiert (wie im folgenden Code ersichtlich, der auch im ersten Post ist)

    VB.NET-Quellcode

    1. #Region "Imports"
    2. Imports rwm
    3. #End Region
    4. Public Class Main
    5. #Region "ThreadSafeStuff"
    6. #End Region
    7. #Region "Deklaration and Initialization"
    8. Dim upd As New rwm.rwm
    9. #End Region
    10. #Region "MainFunction1"
    11. Dim Address0 As Integer = upd.CorrectBase("FTLGame", "FTLGame.exe") + &H39BAAC '<-funktioniert
    12. upd.WriteDMAInteger("FTLGame", Address0, {&H28, &H4, &H24, &H450}, 10000, 4) '<-funktioniert nicht
    13. #End Region
    14. #Region "MiscSubs"
    15. Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    16. Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
    17. Me.UpdateStyles()
    18. End Sub
    19. Private Sub Main_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    20. End Sub
    21. #End Region
    22. End Class



    die Zeile:

    VB.NET-Quellcode

    1. upd.WriteDMAInteger("FTLGame", Address0, {&H28, &H4, &H24, &H450}, 10000, 4) '<-funktioniert nicht

    unterkringelt das "upd" in rot weil es angeblich nicht deklariert ist.

    wenn ich in einer leeren Zeile "upd." eintippe wird mir auch nichts vorgeschlagen ! Beginnt diese Zeile jedoch mit einem DIM
    wie hier:

    VB.NET-Quellcode

    1. Dim Address0 As Integer = upd.CorrectBase("FTLGame", "FTLGame.exe") + &H39BAAC '<-funktioniert


    dann funktioniert es, aber das ist ja sinnfrei.... Ich hoffe jetzt ist genau genau dargestellt was ich meine

    Greets

    @exc-jdbi
    Hast du alle Exception schon korrigiert und die Dll erst dann eingebunde?


    ja option strict on ist wieder standardmäßig eingestellt, und die dadurch auftretenden Probleme sind korrigiert. Danach auch neu kompiliert.

    korrigierte Klasse:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class rwm
    2. Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
    3. Public Declare Function WriteProcessMemory1 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    4. Public Declare Function WriteProcessMemory2 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single
    5. Public Declare Function WriteProcessMemory3 Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
    6. Public Declare Function ReadProcessMemory1 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
    7. Public Declare Function ReadProcessMemory2 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Single, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Single
    8. Public Declare Function ReadProcessMemory3 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Long, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Long
    9. Const PROCESS_ALL_ACCESS = &H1F0FF
    10. Public Function CorrectBase(ByVal ProcName As String, ByVal ModuleName As String) As Integer
    11. Dim P As Process() = Process.GetProcessesByName(ProcName)
    12. If (P.Length <> 0) Then
    13. Dim pMod As ProcessModuleCollection = P(0).Modules
    14. For i As Integer = pMod.Count - 1 To 0 Step -1
    15. If pMod.Item(i).FileName.EndsWith(ModuleName) Then
    16. Return pMod.Item(i).BaseAddress.ToInt32
    17. End If
    18. Next i
    19. End If
    20. Return 0
    21. End Function
    22. Public Function WriteDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Integer, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
    23. Try
    24. Dim lvl As Integer = Address
    25. For i As Integer = 1 To Level
    26. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
    27. Next
    28. WriteInteger(Process, lvl, Value, nsize)
    29. Return True
    30. Catch ex As Exception
    31. Return False
    32. End Try
    33. End Function
    34. Public Function ReadDMAInteger(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Integer
    35. Try
    36. Dim lvl As Integer = Address
    37. For i As Integer = 1 To Level
    38. lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1)
    39. Next
    40. Dim vBuffer As Integer
    41. vBuffer = ReadInteger(Process, lvl, nsize)
    42. Return vBuffer
    43. Catch ex As Exception
    44. Return -1
    45. End Try
    46. End Function
    47. Public Function WriteDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Single, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
    48. Try
    49. Dim lvl As Integer = Address
    50. For i As Integer = 1 To Level
    51. lvl = CInt(ReadFloat(Process, lvl, nsize) + Offsets(i - 1))
    52. Next
    53. WriteFloat(Process, lvl, Value, nsize)
    54. Return True
    55. Catch ex As Exception
    56. Return False
    57. End Try
    58. End Function
    59. Public Function ReadDMAFloat(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Single
    60. Try
    61. Dim lvl As Integer = Address
    62. For i As Integer = 1 To Level
    63. lvl = CInt(ReadFloat(Process, lvl, nsize) + Offsets(i - 1))
    64. Next
    65. Dim vBuffer As Single
    66. vBuffer = ReadFloat(Process, lvl, nsize)
    67. Return vBuffer
    68. Catch ex As Exception
    69. Return -1
    70. End Try
    71. End Function
    72. Public Function WriteDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Value As Long, ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Boolean
    73. Try
    74. Dim lvl As Integer = Address
    75. For i As Integer = 1 To Level
    76. lvl = CInt(ReadLong(Process, lvl, nsize) + Offsets(i - 1))
    77. Next
    78. WriteLong(Process, lvl, Value, nsize)
    79. Return True
    80. Catch ex As Exception
    81. Return False
    82. End Try
    83. End Function
    84. Public Function ReadDMALong(ByVal Process As String, ByVal Address As Integer, ByVal Offsets As Integer(), ByVal Level As Integer, Optional ByVal nsize As Integer = 4) As Long
    85. Try
    86. Dim lvl As Integer = Address
    87. For i As Integer = 1 To Level
    88. lvl = CInt(ReadLong(Process, lvl, nsize) + Offsets(i - 1))
    89. Next
    90. Dim vBuffer As Long
    91. vBuffer = ReadLong(Process, lvl, nsize)
    92. Return vBuffer
    93. Catch ex As Exception
    94. Return -1
    95. End Try
    96. End Function
    97. Public Sub WriteNOPs(ByVal ProcessName As String, ByVal Address As Long, ByVal NOPNum As Integer)
    98. Dim C As Integer
    99. Dim B As Integer
    100. If ProcessName.EndsWith(".exe") Then
    101. ProcessName = ProcessName.Replace(".exe", "")
    102. End If
    103. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    104. If MyP.Length = 0 Then
    105. Exit Sub
    106. End If
    107. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    108. If hProcess = IntPtr.Zero Then
    109. Exit Sub
    110. End If
    111. B = 0
    112. For C = 1 To NOPNum
    113. Call WriteProcessMemory1(CInt(hProcess), CInt(Address + B), &H90, 1, 0&)
    114. B = B + 1
    115. Next C
    116. End Sub
    117. Public Sub WriteXBytes(ByVal ProcessName As String, ByVal Address As Long, ByVal Value As String)
    118. If ProcessName.EndsWith(".exe") Then
    119. ProcessName = ProcessName.Replace(".exe", "")
    120. End If
    121. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    122. If MyP.Length = 0 Then
    123. Exit Sub
    124. End If
    125. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    126. If hProcess = IntPtr.Zero Then
    127. Exit Sub
    128. End If
    129. Dim C As Integer
    130. Dim B As Integer
    131. Dim D As Integer
    132. Dim V As Byte
    133. B = 0
    134. D = 1
    135. For C = 1 To (Len(Value) \ 2)
    136. V = CByte(Val("&H" & Mid$(Value, D, 2)))
    137. Call WriteProcessMemory1(CInt(hProcess), CInt(Address + B), CInt(V), 1, 0&)
    138. B = B + 1
    139. D = D + 2
    140. Next C
    141. End Sub
    142. Public Sub WriteInteger(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Integer, Optional ByVal nsize As Integer = 4)
    143. If ProcessName.EndsWith(".exe") Then
    144. ProcessName = ProcessName.Replace(".exe", "")
    145. End If
    146. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    147. If MyP.Length = 0 Then
    148. Exit Sub
    149. End If
    150. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    151. If hProcess = IntPtr.Zero Then
    152. Exit Sub
    153. End If
    154. Dim hAddress, vBuffer As Integer
    155. hAddress = Address
    156. vBuffer = Value
    157. WriteProcessMemory1(CInt(hProcess), hAddress, CInt(vBuffer), nsize, 0)
    158. End Sub
    159. Public Sub WriteFloat(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Single, Optional ByVal nsize As Integer = 4)
    160. If ProcessName.EndsWith(".exe") Then
    161. ProcessName = ProcessName.Replace(".exe", "")
    162. End If
    163. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    164. If MyP.Length = 0 Then
    165. Exit Sub
    166. End If
    167. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    168. If hProcess = IntPtr.Zero Then
    169. Exit Sub
    170. End If
    171. Dim hAddress As Integer
    172. Dim vBuffer As Single
    173. hAddress = Address
    174. vBuffer = Value
    175. WriteProcessMemory2(CInt(hProcess), hAddress, vBuffer, nsize, 0)
    176. End Sub
    177. Public Sub WriteLong(ByVal ProcessName As String, ByVal Address As Integer, ByVal Value As Long, Optional ByVal nsize As Integer = 4)
    178. If ProcessName.EndsWith(".exe") Then
    179. ProcessName = ProcessName.Replace(".exe", "")
    180. End If
    181. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    182. If MyP.Length = 0 Then
    183. Exit Sub
    184. End If
    185. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    186. If hProcess = IntPtr.Zero Then
    187. Exit Sub
    188. End If
    189. Dim hAddress As Integer
    190. Dim vBuffer As Long
    191. hAddress = Address
    192. vBuffer = Value
    193. WriteProcessMemory3(CInt(hProcess), hAddress, vBuffer, nsize, 0)
    194. End Sub
    195. Public Function ReadInteger(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Integer
    196. If ProcessName.EndsWith(".exe") Then
    197. ProcessName = ProcessName.Replace(".exe", "")
    198. End If
    199. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    200. If MyP.Length = 0 Then
    201. Exit Function
    202. End If
    203. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    204. If hProcess = IntPtr.Zero Then
    205. Exit Function
    206. End If
    207. Dim hAddress, vBuffer As Integer
    208. hAddress = Address
    209. ReadProcessMemory1(CInt(hProcess), hAddress, vBuffer, nsize, 0)
    210. Return vBuffer
    211. End Function
    212. Public Function ReadFloat(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Single
    213. If ProcessName.EndsWith(".exe") Then
    214. ProcessName = ProcessName.Replace(".exe", "")
    215. End If
    216. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    217. If MyP.Length = 0 Then
    218. Exit Function
    219. End If
    220. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    221. If hProcess = IntPtr.Zero Then
    222. Exit Function
    223. End If
    224. Dim hAddress As Integer
    225. Dim vBuffer As Single
    226. hAddress = Address
    227. ReadProcessMemory2(CInt(hProcess), hAddress, vBuffer, nsize, 0)
    228. Return vBuffer
    229. End Function
    230. Public Function ReadLong(ByVal ProcessName As String, ByVal Address As Integer, Optional ByVal nsize As Integer = 4) As Long
    231. If ProcessName.EndsWith(".exe") Then
    232. ProcessName = ProcessName.Replace(".exe", "")
    233. End If
    234. Dim MyP As Process() = Process.GetProcessesByName(ProcessName)
    235. If MyP.Length = 0 Then
    236. Exit Function
    237. End If
    238. Dim hProcess As IntPtr = CType(OpenProcess(PROCESS_ALL_ACCESS, 0, MyP(0).Id), IntPtr)
    239. If hProcess = IntPtr.Zero Then
    240. Exit Function
    241. End If
    242. Dim hAddress As Integer
    243. Dim vBuffer As Long
    244. hAddress = Address
    245. ReadProcessMemory3(CInt(hProcess), hAddress, vBuffer, nsize, 0)
    246. Return vBuffer
    247. End Function
    248. End Class




    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „asusdk“ ()

    Aber das upd.WriteDMAInteger("FTLGame", Address0, {&H28, &H4, &H24, &H450}, 10000, 4) in irgendeine Funktion/Prozedur gehört, damit es funktioniert, weißt Du schon, oder? Klar geht das mit Dim-Anweisungen. Aber eben nicht mit Funktionsaufrufen wie dem dargestellten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @asusdk

    Setze die Zeile die nicht funktioniert wie ich es gezeigt in eine eigene Funktion /Prozedur(z.B, FirstFunk oder so). Du kannst die Funktion/Prozedur dann direkt ansprechen aus der Form1_Load Funktion.

    Dann korrigiere mit den gesetzten Options alle deine Exception.

    Prüfe ob die Funktionen die du in der Dll hast auch das machen was du möchtest.

    Wenn das alles gemacht ist, kompilieren, daraus entsteht dann eine dll im Dll-Projekt.

    Diese einbinden in dein Projekt mit "Add Reference"

    Jetzt sollte die Dll drin sein.

    Freundliche Grüsse

    exc-jdbi
    @VaporiZed und @exc-jdbi oh mein Gott, peinliche Aktion....
    Aber das upd.WriteDMAInteger("FTLGame", Address0, {&H28, &H4, &H24, &H450}, 10000, 4)
    in irgendeine Funktion/Prozedur gehört, damit es funktioniert, weißt Du
    schon, oder? Klar geht das mit Dim-Anweisungen. Aber eben nicht mit
    Funktionsaufrufen wie dem dargestellten.


    das hatte ich komplett verplant.... in einer function/sub funktioniert es ganz normal.....*hochroterKopf/schäääm*

    danke vielmals für eure Hilfe !
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If