Autor
|
Tema: (Duda) Pregunta readprocessmemory array (Leído 4,818 veces)
|
Cromatico
Desconectado
Mensajes: 110
|
Hola que tall, queria hacer una pregunta... Yo programo en vb6, pero la verdad queria pasar parte de las funciones de mi programa a c++ e interactuar con una dll... Ya logre crear una funcion de readprocessmemory y usarla desde vb: void ReadLong(DWORD lpAddress, void* buf, long len) { DWORD oldprot, dummy = 0; HWND hwnd = FindWindow(NULL, "VENTANA");
if (hwnd) { DWORD proc_id; GetWindowThreadProcessId(hwnd, &proc_id); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
ReadProcessMemory(hProcess, (void *) lpAddress, buf, len, 0); CloseHandle(hProcess); } else { // Error } } El problema es que esta funcion, me devuelve un valor de 4 bytes, y estoy tratando de leer un texto, "70 00 72 00 75 00 65 00 62 00 61" ("prueba" sin los nops), y en 4bytes seria "7471216", la cuestion es que no se como hacer que la funcion me devuelva el array "70 00 72 00 75 00 65 00 62 00 61", para luego convertirlo a texto ... Alguien me puede dar una mano? Gracias!!!
|
|
« Última modificación: 13 Abril 2011, 00:18 am por Cromatico »
|
En línea
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
el parámetro len de ReadProcessMemory(hProcess, (void *) lpAddress, buf, len, 0); le dice cuanto puede leer de maximo.
|
|
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Hola Arcangel_0x7C5, gracias por contestarme... Bueno aver yo la llamo asi mira: DWORD dwHP; ReadLong(Address,&dwHP,"4");
Pero si en vez de 4 pongo mas, me tira error Esto me devuelve la funcion: "7471216" Que no se que tiene que ver con: "70 00 72 00 75 00 65 00 62 00 61" :S Gracias!
|
|
|
En línea
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
Hola Arcangel_0x7C5, gracias por contestarme... Bueno aver yo la llamo asi mira: DWORD dwHP; ReadLong(Address,&dwHP,"4");
Pero si en vez de 4 pongo mas, me tira error Esto me devuelve la funcion: "7471216" Que no se que tiene que ver con: "70 00 72 00 75 00 65 00 62 00 61" :S Gracias! porque un DWORD solo permite almacenar 4 bytes. De todas maneras, el 4 entre comillas es una cadena de caracteres y no un numero entero. por lo que me extraña que no te de error yo haria esto: BYTE Array[20]; ReadLong(Address,&Array,20);
y con DWORD asi: DWORD Array[20]; ReadLong(Address,&Array,sizeof(DWORD)*20);
|
|
« Última modificación: 12 Abril 2011, 22:05 pm por Arcangel_0x7C5 »
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Si disculpame es que lo escribi desde aca, y tengo muy adoptado el vb me olvide de las comillas... Ahora pruebo y te comento, muchas gracias!
EDIT: Mejor imposible, muchisimas gracias Arcangel_0x7C5!!!
SOLUCIONADO!
|
|
« Última modificación: 12 Abril 2011, 22:28 pm por Cromatico »
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Hola disculpen que postee de nuevo, tengo una duda!! yo llamo asi a la funcion: long ReadLongVb (long Address) { BYTE Array[30]; ReadLong(Address,&Array,30); return (Array[0]); } Esa es la funcion a la que llamo desde vb, seguramente se podra hacer directamente a la funcion ReadLong, pero bueno es la forma mas facil que encontre y funciona bien . Entonces en vb recibo el array 0, pero la pregunta es, como hago para que me retorne todo el array completo? E intentado muchas cosas pero no logre hacer que me retorne todo el array: 30... Gracias!
|
|
|
En línea
|
|
|
|
Иōҳ
Desconectado
Mensajes: 563
|
as que retorne un puntero al array y luego solo accedes a sus items....
Salu2!
|
|
|
En línea
|
|
|
|
Cromatico
Desconectado
Mensajes: 110
|
Mmm no entiendo lo que me intentas decir... yo llamo desde vb a la funcion ReadLongVb, la cual llama a ReadLong y le da el array... Pero ReadLongVb me retorna solo 1 valor del array, en este caso el array[0] No hay alguna forma de que me envie todos? return (array[0] && array[1]); ............... Gracias!
|
|
|
En línea
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
Hola disculpen que postee de nuevo, tengo una duda!! yo llamo asi a la funcion: long ReadLongVb (long Address) { BYTE Array[30]; ReadLong(Address,&Array,30); return (Array[0]); } Esa es la funcion a la que llamo desde vb, seguramente se podra hacer directamente a la funcion ReadLong, pero bueno es la forma mas facil que encontre y funciona bien . Entonces en vb recibo el array 0, pero la pregunta es, como hago para que me retorne todo el array completo? E intentado muchas cosas pero no logre hacer que me retorne todo el array: 30... Gracias! para eso necesitas usar punteros, el problema es que VB no te deja manejar punteros directamente. tambien necesitarias usar memoria dinamica, porque las variables locales son sobrescritas al salir de la funcion que las creo, por lo que si la funcion debuelve un puntero a una variable local en esta no estara el contenido que uno espera. EDIT: mirate esta pagina: http://www.psicofxp.com/forums/programacion.313/292049-punteros-en-vb.html
|
|
« Última modificación: 15 Abril 2011, 18:55 pm por Arcangel_0x7C5 »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda con array
Java
|
anman
|
4
|
3,205
|
2 Abril 2008, 22:29 pm
por Lu15_CL4
|
|
|
duda de array
Programación C/C++
|
mapers
|
1
|
2,436
|
6 Septiembre 2010, 15:48 pm
por darkraider
|
|
|
Pregunta readprocessmemory
Programación Visual Basic
|
Cromatico
|
4
|
3,683
|
5 Enero 2011, 21:34 pm
por Cromatico
|
|
|
Duda con array
Java
|
~ Yoya ~
|
0
|
1,614
|
13 Marzo 2011, 21:18 pm
por ~ Yoya ~
|
|
|
[Pregunta]: Un array en la base de datos.
Desarrollo Web
|
Leguim
|
2
|
2,025
|
18 Enero 2019, 01:18 am
por Leguim
|
|