bornman Posted January 25, 2018 at 02:01 PM Share Posted January 25, 2018 at 02:01 PM 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 to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted January 26, 2018 at 06:38 PM Administrators Share Posted January 26, 2018 at 06:38 PM 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 to comment Share on other sites More sharing options...
bornman Posted January 26, 2018 at 10:16 PM Author Share Posted January 26, 2018 at 10:16 PM 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 to comment Share on other sites More sharing options...
Administrators Fernando Mercês Posted January 27, 2018 at 04:35 PM Administrators Share Posted January 27, 2018 at 04:35 PM 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 to comment Share on other sites More sharing options...
bornman Posted January 27, 2018 at 08:45 PM Author Share Posted January 27, 2018 at 08:45 PM 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 to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.