Migalha 0 Denunciar post Postado Maio 15, 2009 Bom dia a todos, Gostaria de saber como faço um programa em VB para apenas ler o conteúdo de um endereço de memória de um outro programa que está rodando e apresentar esse valor enquanto ele muda com o tempo. Desde já agradeço a atenção Compartilhar este post Link para o post Compartilhar em outros sites
Claudio Neto 3 Denunciar post Postado Maio 15, 2009 Olá Migalha, primeiramente, seja bem vindo ao fórum. Tente dar uma olhada nesse link e ver se é isso que precisa: http://www.forum-invaders.com.br/phpBB/vie...346&start=0 Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Migalha 0 Denunciar post Postado Maio 16, 2009 Olá Migalha, primeiramente, seja bem vindo ao fórum. Tente dar uma olhada nesse link e ver se é isso que precisa: http://www.forum-invaders.com.br/phpBB/vie...346&start=0 Abraços... Meu amigo, muito obrigado pela pronta resposta, sou totalmente leigo no assunto, pra ter uma idéia o ultimo programa que fiz foi em QBasic. Vou ler com atenção o artigo e ver se consigo aplicar alguma coisa, ele é completo demais para o meu caso (acho). Para começar queria fazer um programa que eu apenas indicasse o processo em uso (acho que é necessário) e o endereço de memória desse processo que quero obter o valor. Desde de já agradeço a atenção Migalha Compartilhar este post Link para o post Compartilhar em outros sites
Migalha 0 Denunciar post Postado Maio 16, 2009 Olá Migalha, primeiramente, seja bem vindo ao fórum. Tente dar uma olhada nesse link e ver se é isso que precisa: http://www.forum-invaders.com.br/phpBB/vie...346&start=0 Abraços... Meu amigo, muito obrigado pela pronta resposta, sou totalmente leigo no assunto, pra ter uma idéia o ultimo programa que fiz foi em QBasic. Vou ler com atenção o artigo e ver se consigo aplicar alguma coisa, ele é completo demais para o meu caso (acho). Para começar queria fazer um programa que eu apenas indicasse o processo em uso (acho que é necessário) e o endereço de memória desse processo que quero obter o valor. Desde de já agradeço a atenção Migalha Pesquisando na net encontrei esse código eu executo ele mas só aparece uma janela, poderia me dizer o que esse programa faz? Imports System.Runtime.InteropServices Public Class WindowsAPI Public Const PROCESS_ALL_ACCESS = &H1F0FFF <DllImport("kernel32.dll")> _ Public Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, <Out()> ByVal lpBuffer As Byte(), ByVal nSize As UIntPtr, ByVal lpNumberOfBytesRead As IntPtr) As Boolean End Function <DllImport("kernel32.dll", CallingConvention:=CallingConvention.StdCall, CharSet:=CharSet.Auto, SetLastError:=True)> _ Public Shared Function ReadProcessMemory(ByVal hProcess As IntPtr, ByVal lpBaseAddress As IntPtr, ByVal lpBuffer As IntPtr, ByVal iSize As Integer, ByRef lpNumberOfBytesRead As Integer) As Boolean End Function <DllImport("kernel32.dll", SetLastError:=True)> _ Public Shared Function OpenProcess(ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Boolean, ByVal dwProcessId As Integer) As IntPtr End Function <DllImport("kernel32.dll", SetLastError:=True)> _ Public Shared Function CloseHandle(ByVal handle As IntPtr) As Boolean End Function End Class Public Class MemoryReader Public Shared Function GetStructure(Of T)(ByVal TargetProcess As Process, ByVal Address As Integer) As T 'Create a variable to store the number of bytes written Dim lpBytesWritten As Integer = 0 'Allocate memory to hold the structure Dim buffer As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(GetType(T))) 'Open the process for reading Dim procPtr As IntPtr = WindowsAPI.OpenProcess(WindowsAPI.PROCESS_ALL_ACCESS, False, TargetProcess.Id) 'Read the data into the previously created buffer WindowsAPI.ReadProcessMemory(procPtr, New IntPtr(Address), buffer, Marshal.SizeOf(GetType(T)), lpBytesWritten) 'Marshal the pointer to the return structure type Dim retValue As T = CType(Marshal.PtrToStructure(buffer, GetType(T)), T) 'Free up the allocated memory Marshal.FreeCoTaskMem(buffer) 'Close the process handle WindowsAPI.CloseHandle(procPtr) 'Return the object Return retValue End Function End Class Public Class Class1 'This is an example structure. <StructLayout(LayoutKind.Sequential)> _ Public Structure SomeStruct Dim ID As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=24)> _ Dim Name As String End Structure Public Function GetStructure() As SomeStruct 'Get a process object 'Obviously this is not how it would be done, but for this 'example it will suffice Dim p As Process = Process.GetProcessById(100) 'Now we will read the structure form memory address 1000000 in or fake process Return MemoryReader.GetStructure(Of SomeStruct)(p, 1000000) End Function End ClassFoi neste site que encontrei:http://www.vbforums.com/showthread.php?t=556677 Desde já agradeço qualquer ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Claudio Neto 3 Denunciar post Postado Maio 18, 2009 Isso é Vb.Net. Qual versão do VB está usando? Compartilhar este post Link para o post Compartilhar em outros sites
Migalha 0 Denunciar post Postado Maio 18, 2009 Isso é Vb.Net. Qual versão do VB está usando? Baixei o MS Visual Basic Express 2008 Compartilhar este post Link para o post Compartilhar em outros sites
Claudio Neto 3 Denunciar post Postado Maio 20, 2009 Ok Migalha. Vou direcionar esse tópico para a área de .Net então. Continuarão a te atender lá. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 21, 2009 Nossa, bem complicado isso, você tem o endereço de memória em hexa? Como você vai saber o endereço? Pois pode mudar de execução para execução. Compartilhar este post Link para o post Compartilhar em outros sites
Migalha 0 Denunciar post Postado Maio 21, 2009 Nossa, bem complicado isso, você tem o endereço de memória em hexa? Como você vai saber o endereço? Pois pode mudar de execução para execução. Com o Programa Tsearch eu descobri um endereço E5E36C... mas acessá-lo eu não sei... Se tiver alguma ídeia agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 22, 2009 Pelo que eu entendi do código, vocë troca o valor 1000000 pelo endereço, ali onde usa o GetProcess voce troca o 100 pelo ID do processo que criou a variavel e cria uma STRUCT idêntica ao do outro programa. Compartilhar este post Link para o post Compartilhar em outros sites