Bellek Düzeni İçin Yapıları Kullanma

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Banlı Üye
Katılım
11 Tem 2017
Mesajlar
1,777
Çözümler
2
Tepki puanı
695
8 HİZMET YILI
VB.Net:
Using structs for memory layout
Başlık gibi bir bellek düzeni için bir yapı kullanıyor diyor. Ben normalde bu yöntemi kullanan insanlar görmüyorum ama her şey için readprocessmemory kullanmaktan biraz daha temiz görünümlü bir kod için yapar.

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
Yani belirterek
VB.Net:
    <FieldOffset>
Aradığınız "ofset" 'i belirtebilirsiniz (* Bu, ofsetler arasında boş dolgu oluşturur)
VB.Net:
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=60)> _
Bu, 60 karakterlik dizeyi belirtir. (bu önemlidir, çünkü o olmadan dizeler başarısız olur ve yapı boyutu doğru olmadığından tüm kurulum başarısız olur)
VB.Net:
<FieldOffset(4)> _
        Public Object_Ptr As Integer
 
        <FieldOffset(&HC)> _
        Public Object_Ptr2 As Integer
Yani bu 2 özellik arasında 4 baytlık dolgu (boş alan) var
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
Bu örnekte, nesne yöneticisine nesne için işaretçi 4 bayt yineleyin. (Bu, bunu neden gönderiyorum ile tam olarak ilgili değil, ancak bu yapıyla oynamak için kullanabilirsiniz)
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
Şimdi verileri mareşal kullanarak yapıya sokmak
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
Rehberim Nasıldı ? Mesajlarınızı bekliyom :)
 
Efsane Üye
Katılım
28 Tem 2018
Mesajlar
10,240
Çözümler
17
Tepki puanı
1,728
7 HİZMET YILI
Gayet Tertipli Yazmışın Helal Olsun
 
Banlı Üye
Katılım
14 Eki 2018
Mesajlar
243
Tepki puanı
72
7 HİZMET YILI
bildiğin bilgileri başkasına aşılamak kadar güzel birşey yok yorulmakta bu işin tadı dostum emeğine sağlık
 
Onaylı Üye
Katılım
14 Kas 2018
Mesajlar
69
Tepki puanı
3
Ödüller
6
7 HİZMET YILI
Bidiğin bilgileri bizlerle paylaştığın için teşekkürler.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst