elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ReadProcessMemory da resultados diferentes w7/XP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ReadProcessMemory da resultados diferentes w7/XP  (Leído 3,137 veces)
Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
ReadProcessMemory da resultados diferentes w7/XP
« en: 5 Julio 2010, 02:01 am »

Hola, tengo una duda que la verdad me resulta un poco curiosa. El tema es este:

En mi aplicación(C++) tengo el siguiente código:

Código
  1. int x = ReadProcessMemory(....);
  2. int y = ReadProcessMemory(....);
  3. int div = (x*100)/y;
  4.  

Lo compilo (junto con el resto del código. Pongo éste porque se que es donde luego me falla) con VSC++ BETA y, bajo mi entorno w7 x64, me funciona bien. El tema es que cuando ejecuto el mismo exe en mi windows XP x86 el proceso se bloquea y queda colgado... he debugeado un poco y el error es en la parte de código de antes ya que las variables x e y cogen valores que nada tendrían que ser y causan problemas.

Después de ésto me he descargado en el windows xp el VSC++ Express y he puesto ese trozo de código para ver si era cuestión de tamaños de variables y que al leer no leyese lo mismo en x64 que en x86 (cosa que no le hubiera encontrado sentido), pero no, el caso es que el mismo código compilado con el express en windows XP leía correctamente de la memoria...

¿Alguna idea de que puede ser? :S

Gracias de antemano.


En línea

C' Est La Vie
bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: ReadProcessMemory da resultados diferentes w7/XP
« Respuesta #1 en: 5 Julio 2010, 02:14 am »

codigo


En línea

Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: ReadProcessMemory da resultados diferentes w7/XP
« Respuesta #2 en: 5 Julio 2010, 02:28 am »

Código
  1.  
  2. void CAPCyborgDlg::OnTimer(UINT_PTR nIDEvent)
  3. {
  4.                CJugador j;
  5. short max = 0;
  6. max = j.consultar_vidaMax();
  7. short actual = 0;
  8. actual = j.consultar_vida();
  9. short div = 0;
  10. div = (actual*100)/max;
  11.  
  12.                CDialog::OnTimer(nIDEvent);
  13. }
  14.  

Las llamadas a consultar_vidaMax y consultar_vida:

Código
  1. short CJugador::consultar_vida() {
  2. short vida;
  3. ReadProcessMemory(h_proc, (void*)Jugador_vida, &vida, 2, 0);
  4. return vida;
  5. }
  6.  
  7. short CJugador::consultar_vidaMax() {
  8. short vida;
  9. ReadProcessMemory(h_proc, (void*)Jugador_vidaMax, &vida, 2, 0);
  10. return vida;
  11. }


P.D: He compilado solamente el código que he puesto arriba por separado y en w7 me funciona bien y en windows XP me da valores aleatorios y erróneos  :-\
« Última modificación: 5 Julio 2010, 12:33 pm por Nork » En línea

C' Est La Vie
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: ReadProcessMemory da resultados diferentes w7/XP
« Respuesta #3 en: 5 Julio 2010, 03:19 am »

De donde proviene el handle del proceso? es un proceso propio o no lo es?
Intenta reproducir el error pero esta vez llamando a GetLastError luego de las llamadas a ReadProcessMemory para ver cual puede ser el error.
Siempre que tengas un argumento de conteo como el cuarto de ReadProcessMemory, intenta usar operadores como sizeof.

Saludos

En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Nork

Desconectado Desconectado

Mensajes: 196



Ver Perfil
Re: ReadProcessMemory da resultados diferentes w7/XP
« Respuesta #4 en: 5 Julio 2010, 13:32 pm »

Intenta reproducir el error pero esta vez llamando a GetLastError luego de las llamadas a ReadProcessMemory para ver cual puede ser el error.

Gracias!! El GetLastError en w7 me devolvía un 0 OK pero el mismo exe en XP me devolvía un 6, es decir, el handle era erróneo. Al final cambié los permisos para abrir el proceso y se arregló!

Código
  1. h_proc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);

por

Código
  1. h_proc = OpenProcess(PROCESS_VM_READ, false, pid);
En línea

C' Est La Vie
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pregunta readprocessmemory
Programación Visual Basic
Cromatico 4 3,673 Último mensaje 5 Enero 2011, 21:34 pm
por Cromatico
ReadProcessMemory en Windows 7
.NET (C#, VB.NET, ASP)
Keyen Night 1 3,246 Último mensaje 28 Febrero 2011, 06:00 am
por BlackZeroX
Tratar resultados de diferentes procesos en proceso parent
Programación C/C++
daphataz 0 1,613 Último mensaje 9 Mayo 2016, 17:39 pm
por daphataz
cifrado Java - PHP con resultados diferentes.
Programación General
turion 3 4,408 Último mensaje 9 Octubre 2016, 00:22 am
por 6hiii
Convertir valor a base 16, resultados diferentes
PHP
:ohk<any> 1 3,481 Último mensaje 27 Marzo 2022, 21:14 pm
por :ohk<any>
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines