bornman Postado Janeiro 25, 2018 em 14:01 Compartilhar Postado Janeiro 25, 2018 em 14:01 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 More sharing options...
Fernando Mercês Postado Janeiro 26, 2018 em 18:38 Compartilhar Postado Janeiro 26, 2018 em 18:38 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 More sharing options...
bornman Postado Janeiro 26, 2018 em 22:16 Autor Compartilhar Postado Janeiro 26, 2018 em 22:16 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 More sharing options...
Fernando Mercês Postado Janeiro 27, 2018 em 16:35 Compartilhar Postado Janeiro 27, 2018 em 16:35 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 More sharing options...
bornman Postado Janeiro 27, 2018 em 20:45 Autor Compartilhar Postado Janeiro 27, 2018 em 20:45 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 More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.