Jump to content
Sign in to follow this  
bornman

Leitura de memória (ReadProcessMemory)

Recommended Posts

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?

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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?

 

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...