Ir para conteúdo

Leitura de memória (ReadProcessMemory)


bornman

Posts Recomendados

Olá, ontem estava codando um programa que realiza a leitura de um endereço(cujo valor é mudado ao longo da execução) e imprime o valor contido nele, porém não obtive sucesso.
O código para leitura é o seguinte: 

ReadProcessMemory(hwnd, (LPCVOID)address, &value, sizeof(value), NULL);

Andei lendo e vi que LPCVOID aponta para uma constante, sendo assim o certo seria eu usar LPVOID, certo? Existe a possibilidade do erro ser apenas isso ou o meu endereço também pode estar errado?

Link para o comentário
Compartilhar em outros sites

Você não disse qual o erro, mas na hora de chamar a função, você não precisa usar nem LPVOID nem LPCVOID. Este é o tipo de argumento (e pode ser constante sim, já que só vai ler), mas na hora de chamar, basta passar o endereço (não precisa do tipo dele).

Não sei qual o tamanho do value, mas como você tá debugando, seria legal usar um quinto argumento pra saber quantos bytes de fato foram lidos. Isso tem que bater com sizeof(value) no seu caso.

Abraço!

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Fernando Mercês disse:

Você não disse qual o erro, mas na hora de chamar a função, você não precisa usar nem LPVOID nem LPCVOID. Este é o tipo de argumento (e pode ser constante sim, já que só vai ler), mas na hora de chamar, basta passar o endereço (não precisa do tipo dele).

Não sei qual o tamanho do value, mas como você tá debugando, seria legal usar um quinto argumento pra saber quantos bytes de fato foram lidos. Isso tem que bater com sizeof(value) no seu caso.

Abraço!

Não está imprimindo o valor certo, então creio  que provavelmente o endereço que está errado. No caso value é um int, então no lugar de NULL eu deveria colocar 4(bytes)?
No site da microsoft está assim: 

ReadProcessMemory(
  _In_  HANDLE  hProcess,
  _In_  LPCVOID lpBaseAddress,
  _Out_ LPVOID  lpBuffer,
  _In_  SIZE_T  nSize,
  _Out_ SIZE_T  *lpNumberOfBytesRead
);
Citar

lpNumberOfBytesRead [out]

A pointer to a variable that receives the number of bytes transferred into the specified buffer. If lpNumberOfBytesRead is NULL, the parameter is ignored.

Pelo que entendi eu deveria definir um ponteiro e aponta-lo para value. Está certo?

 

Link para o comentário
Compartilhar em outros sites

18 horas atrás, bornman disse:

Pelo que entendi eu deveria definir um ponteiro e aponta-lo para value. Está certo?

Sim, mas tem que alocar antes. O mais rápido é simplesmente declara e passar o endereço, tipo:

SIZE_T bytes;

ReadProcessMemory(...., &bytes)

Posta o trecho de código onde você chama a função também, pra gente ver como tá. ;)

Abraço.

Link para o comentário
Compartilhar em outros sites

4 horas atrás, Fernando Mercês disse:

Sim, mas tem que alocar antes. O mais rápido é simplesmente declara e passar o endereço, tipo:


SIZE_T bytes;

ReadProcessMemory(...., &bytes)

Posta o trecho de código onde você chama a função também, pra gente ver como tá. ;)

Abraço.

Já consegui resolver o problema, eu estava esquecendo de dar a permissão.
 

HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS,0,pid);

De qualquer maneira agradeço pela ajuda. Abraços!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...