Autor
|
Tema: LeerPointers/Punteros con VB.NET (Leído 3,790 veces)
|
igustin10
Desconectado
Mensajes: 13
|
Que tal amigos como va? Estoy desarrollando una aplicacion que varia segun otra. Lo que quiero preguntarles hoy es como puedo hacer para leer ciertos pointer (punteros) de una aplicacion en VB.NET. Quiero mostrar el value (valor) de un puntero (que lleva a un address) en una de las labels de mi proyecto. Muchas Gracias a todos por la ayuda!!
|
|
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Buenas.
Entiendo de lo que hablas, y no tendrías ningún problema con la clase Marshal para extraer el valor. Estaría bien que nos dejaras el fragmento de código para acomodarlo y dejarlo como pides.
Saludos.
|
|
|
En línea
|
|
|
|
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
Te explico como es lo que quiero hacer: Tengo este Pointer: "Proceso"+001913B8 - Offset0: 104 - Offset1: bdc - Offset2: 60 Y quiero mostrarlo en una label del proyecto. Como podria lograrlo? Estuve investigando lo de clase Marshal pero no lo entendi muy bien. Quieres representar los datos de un puntero a una dirección que reside en otro proceso. Cuando veas un puntero de la forma "Proceso" + Dirección (0x...) lo que tienes realmente es la dirección base del proceso (base address) + la dirección. Por ejemplo: "Firefox" + 0x456A será la base address de firefox digamos 0x400000 quedaría 0x400000 + 0x456A. En .NET es sencillo coger la base address de un proceso cualquiera (mientras tengas los mismos permisos que el proceso al que se abrirá el HANDLE): [DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out IntPtr lpNumberOfBytesRead); public static void Main (string[] args) { Process proc = Process.GetProcessesByName ("Firefox")[0]; IntPtr ptr = 0xDEADBEEF + proc.MainModule.BaseAddress; IntPtr prochandle = proc.Handle; byte[] bytes = new byte[40]; IntPtr readbytes = new IntPtr (); ReadProcessMemory (prochandle, ptr, bytes, bytes.Length, out readbytes); string data = Encoding.ASCII.GetString(bytes); }
En data tendrías el valor del puntero leído. Cambia 0xDEADBEEF y Firefox por la dirección del puntero y por el nombre del proceso. Cambia el 40 de byte[] bytes=new byte[40] por la longitud que quieres leer del puntero. Si todo va bien debería salirte. Saludos!
|
|
« Última modificación: 17 Diciembre 2015, 23:43 pm por kub0x »
|
En línea
|
|
|
|
igustin10
Desconectado
Mensajes: 13
|
Perfecto! Entendi el codigo, muchisimas gracias.
Mas claro que el agua jaja. Ahora voy a INTENTAR pasarlo a Visual Basic porque la verdad se muy poco de C.
MUCHAS GRACIAS kub0x! Salu2, Igustin
|
|
|
En línea
|
|
|
|
igustin10
Desconectado
Mensajes: 13
|
Usando un codigo que es ReadWriteMemory.vb (pongo abajo la parte que uso): 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 Try Dim lvl As Integer = Address For i As Integer = 1 To Level lvl = ReadInteger(Process, lvl, nsize) + Offsets(i - 1) Next Dim vBuffer As Integer vBuffer = ReadInteger(Process, lvl, nsize) Return vBuffer Catch ex As Exception
End Try End Function[font=Verdana][/font] Lo que he tratado de hacer es: Dim pointer As Integer = ReadDMAInteger("Proceso", &HBaseAddress+Address, Offsets, Level:=1)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label2.Text = pointer End Sub Ya reemplaze los datos pero me dice que es 0. Alguna ultima ayuda? Ya casi lo saco
|
|
|
En línea
|
|
|
|
kub0x
Enlightenment Seeker
Moderador
Desconectado
Mensajes: 1.486
S3C M4NI4C
|
En este caso utilizas la función casera ReadInteger, estaría bien que la postearas para ver como manejas la lectura de memoria del proceso destino. Sin eso me temo que no puedo ayudarte. El code que te dejé también es funcional, podrías partir del mismo eso sí, tendrías que pasarlo a VB.NET.
Saludos!
|
|
|
En línea
|
|
|
|
|
|