- Yasaklandı
- #1
VB.Net:
Using structs for memory layout
Yani bu örnekte League of Legends kullanacağım
VB.Net:
<StructLayout(LayoutKind.Explicit)> _
Public Structure lolObject
<FieldOffset(0)> _
Public type As Byte
<FieldOffset(4)> _
Public Object_Ptr As Integer
<FieldOffset(&HC)> _
Public Object_Ptr2 As Integer
<FieldOffset(&H1C)> _
Public Team As Integer
<FieldOffset(&H20)> _
Public Flags As Integer
<FieldOffset(&H28)> _
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=60)> _
Public Name As String
<FieldOffset(&H64)> _
Public X As Single
<FieldOffset(&H68)> _
Public Y As Single
<FieldOffset(&H6C)> _
Public Z As Single
<FieldOffset(&H124)> _
Public Current_Health As Single
<FieldOffset(&H134)> _
Public Max_Health As Single
<FieldOffset(&H4F4)> _
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=60)> _
Public Champion As String
<FieldOffset(&H578)> _
Public isPlayer As Byte
End Structure
VB.Net:
<FieldOffset>
VB.Net:
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=60)> _
VB.Net:
<FieldOffset(4)> _
Public Object_Ptr As Integer
<FieldOffset(&HC)> _
Public Object_Ptr2 As Integer
object_ptr 0x4 ve 4 bayt uzunluğunda (tamsayı) başladığından ve bir sonraki ofset 0xC .... 'da başladığından, yapınızı nasıl kurarsınız.
VB.Net:
Private ObjManager As Integer = &H1DBAA84
Private LocalPlayer As Integer = &H2A361AC
VB.Net:
Dim lobj As lolObject = New lolObject
Dim local_player As lolObject = New lolObject
lobj = byteArraytoStruct(lobj, Memory.readInt(objMgrBase))
local_player = byteArraytoStruct(local_player, Memory.readInt(lolBase + LocalPlayer))
Dim nametype As Integer = 0
While lobj.type <> 0
'do stuff
CurrentObj += 4
lobj = byteArraytoStruct(lobj, Memory.readInt(objMgrBase + CurrentObj))
End While
VB.Net:
Private Function byteArraytoStruct(ByVal obj As Object, ByVal address As Long) As Object
Try
Dim Current_Object_Byte_Array() As Byte = Memory.readByteArray(address, Marshal.SizeOf(obj)) 'read the byte array (size of your structure)
Dim ptr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(obj)) 'Allocate some memory the size of your object and get a pointer to it.
Marshal.Copy(Current_Object_Byte_Array, 0, ptr, Marshal.SizeOf(obj)) 'copy the byte array into it.
obj = Marshal.PtrToStructure(ptr, obj.GetType) 'do magic... pretty self explanatory marshal function.
Marshal.FreeHGlobal(ptr) 'free the memory at pointer.
Return obj 'return the newly set structure
Catch ex As Exception
Console.WriteLine(ex.StackTrace)
Console.WriteLine(ex.Message)
Return Nothing
End Try
End Function