hacker


Ingresar con nombre de usuario, contraseña y duración de la sesión
| Portal Hacker | Editorial | Descargas | Ezine |
Inicio Ayuda Ingresar Registrarse
19 de Noviembre de 2008, 02:16:51
Noticias: Participa en el batch lab de CPH
Para ver este enlace Registrate o Inicia Sesion
aqui

+  Foros pOrtal Hacker
|-+  Programacion
| |-+  Visual Studio.Net (Moderador: Mace Windu)
| | |-+  [VB] Direcciones de memoria
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: [VB] Direcciones de memoria  (Leído 824 veces)
Taquión
NZ1
*
Desconectado Desconectado

Mensajes: 35


Ver Perfil
« : 16 de Julio de 2008, 03:28:13 »

Hola a todos!

A ver si me podeis ayudar en este temilla:

Me gustaría cómo poder hacer visible el contenido de una dirección de memoria RAM en VB. ¿Es posible hacerlo?

Gracias a todos, y de verdad, muchas gracias por este foro que de tantos apuros me saca...

Saludosss!
« Última modificación: 17 de Julio de 2008, 12:57:16 por Mace Windu » En línea
Rakzo-Fimbres
NZ3
***
Desconectado Desconectado

Mensajes: 534


Caminando por las calles de la internet...


Ver Perfil
« Respuesta #1 : 16 de Julio de 2008, 03:30:32 »

A ver a ver, quieres mostrar el uso total de la memoria y lo que se esta usando en la memoria en vB?

Bueno es lo que yo entiendo Taquion, si no es lo que querías, dá más detalles men
« Última modificación: 16 de Julio de 2008, 03:31:17 por Rakzo-Fimbres » En línea


Para ver este enlace Registrate o Inicia Sesion


Para ver este enlace Registrate o Inicia Sesion
¿Quieres iniciarte en Photoshop CS?


Para ver este enlace Registrate o Inicia Sesion
¿Deseas abrir tu aplicacion .NET sin .NET Framework instalado?
Taquión
NZ1
*
Desconectado Desconectado

Mensajes: 35


Ver Perfil
« Respuesta #2 : 16 de Julio de 2008, 11:09:18 »

Hola Rakzo!, nono, a ver, yo ahora mismo con cualquier programa puedo acceder a la memoria RAM. Introduzco una dirección de memoria, y leo lo que hay en esa casilla (si es tipo texto) o veo lo que hay (binario, hexadecimal o lo que haya).

Entonces lo que me gustaría hacer es que un programita que estoy desarrollando, pueda estar leyendo continuamente una dirección de memoria y mostrándola por pantalla.

¿Me explico bien?
En línea
Mace Windu
Moderador
*****
Desconectado Desconectado

Mensajes: 556


Fl4ming 0ur Skills T3aM


Ver Perfil WWW
« Respuesta #3 : 18 de Julio de 2008, 11:52:46 »

Creo Taquión que Visual Basic no puede trabajar a tan bajo nivel, y te recomendaría que utilizaras otro lenguaje como C o ASM.

De todos modos, estoy esperando la respuesta de un MVP para ver si existe alguna librería o assembly para ello aunque creo que no es posible. Espero tener su respuesta en la próxima semana Wink.

Salu2
En línea



Para ver este enlace Registrate o Inicia Sesion
Curso de C# para todos los públicos
-
Para ver este enlace Registrate o Inicia Sesion
.NET es mejor que JAVA
-
Para ver este enlace Registrate o Inicia Sesion
Biblioteca de código de Visual Basic
-
Para ver este enlace Registrate o Inicia Sesion
Visual Studio.NET


Para ver este enlace Registrate o Inicia Sesion
Argeniverso Hack Forums, una nueva fuente de información


Para ver este enlace Registrate o Inicia Sesion

Taquión
NZ1
*
Desconectado Desconectado

Mensajes: 35


Ver Perfil
« Respuesta #4 : 18 de Julio de 2008, 01:51:25 »

Mace, muchas gracias por tu información. La cuestión es que con C++ lo he hecho con un puntero dirigido a la dirección de memoria en hexadecimal. Pero lo que quiero hacer es incorporarlo a un programa que ya tengo hecho en VB y necesito incorporar esta opción, (lectura de la memoria), pero claro, todo está en VB. ¿Habría alguna fomra de "unir" los dos programas?

Muchas gracias por toda vuestra ayuda y gracias por cambiar el título a [VB].

Un saludo a todos.
En línea
Rakzo-Fimbres
NZ3
***
Desconectado Desconectado

Mensajes: 534


Caminando por las calles de la internet...


Ver Perfil
« Respuesta #5 : 18 de Julio de 2008, 04:06:34 »

Lo que podrías hacer es compilar la parte que hiciste de los punteros en una biblioteca de clase (dll).
Y ya en Visual Basic lo instancias y listo, podrás usar sus funciones y procedimientos .

PD: No siempre es efectivo hacer esto dependiendo del programa de c++ que te dediques.
En línea


Para ver este enlace Registrate o Inicia Sesion


Para ver este enlace Registrate o Inicia Sesion
¿Quieres iniciarte en Photoshop CS?


Para ver este enlace Registrate o Inicia Sesion
¿Deseas abrir tu aplicacion .NET sin .NET Framework instalado?
Taquión
NZ1
*
Desconectado Desconectado

Mensajes: 35


Ver Perfil
« Respuesta #6 : 18 de Julio de 2008, 04:24:17 »

Lo que podrías hacer es compilar la parte que hiciste de los punteros en una biblioteca de clase (dll).
Y ya en Visual Basic lo instancias y listo, podrás usar sus funciones y procedimientos .

PD: No siempre es efectivo hacer esto dependiendo del programa de c++ que te dediques.

Gracias Rakzo. El programa que uso es Dev C++. Y por cierto, me estoy volviendo loco, porque ahora resulta que no me sale un puñetero puntero  Angry

A ver si me puedes decir dónde tengo el fallo:

Código:
#include <stdio.h>
int main()
{
    int contenido;
    int *puntero=(int *)0xA76680 ;
    contenido=&puntero;
    printf ("%d",contenido);
    getchar();
return (0);
}

Resulta que me da este fallo: invalid conversion from `int**' to `int'

Sin embargo si lo hago sin introducir el contenido del puntero en una variable, es decir así:

Código:
#include <stdio.h>
int main()
{
    int *puntero=(int *)0xA76680 ;
    printf ("%d",&puntero);
    getchar();
return (0);
}

Siempre me sale el mismo número en pantalla: 2359152, que es la dirección de memoria en la que si introduzco cualquier valor, se almacena (comprobado). Así que...

PD: Si veis que me he metido demasiado en C, decidmelo y abro otro hilo en la parte de C.

Saludos y muchas gracias!
En línea
>> s E t H <<
Colaborador
****
Desconectado Desconectado

Mensajes: 1,686


si te gusta, en mi firma esta su direccion!


Ver Perfil WWW
« Respuesta #7 : 18 de Julio de 2008, 04:42:03 »

yo te diria que lo hagas en el foro de c xq ahi van a saber mas

mace mandame un privado diciendome que joraca es un mvp xD
En línea


Para ver este enlace Registrate o Inicia Sesion
MI FIRMA Tongue


 |
Para ver este enlace Registrate o Inicia Sesion
Indice de posts interesantes de VB... manuales, guias, dudas, etc
|
Para ver este enlace Registrate o Inicia Sesion
Libreria de código en VB!
|
Para ver este enlace Registrate o Inicia Sesion
IDE's, compiladores, interpretes, etc!
|

Trunx0z Crypter 0.3: 85%
Interprete de brainfuck: 75%
Trunx0z downloader 0.1: 100%


Para ver este enlace Registrate o Inicia Sesion
¡ENTRA EN MI BLOG O TE JUANKEO!



Para ver este enlace Registrate o Inicia Sesion
EL MSN DE  LA DE MI AVATAR
Mace Windu
Moderador
*****
Desconectado Desconectado

Mensajes: 556


Fl4ming 0ur Skills T3aM


Ver Perfil WWW
« Respuesta #8 : 19 de Julio de 2008, 12:45:49 »

Hasta donde llegan mis conocimientos en C, para asignarle una dirección a un puntero es así:

Código:
int *puntero = 103825; // Iniciamos puntero con la dirección 103825

En general, no tiene sentido asignar enteros a punteros porque quien gestiona la memoria es el sistema operativo y por lo tanto es él, el que sabe en todo momento qué direcciones están libres y cuáles están ocupadas.

El ejemplo anterior no tiene sentido porque, ¿qué sabemos nosotros acerca de la dirección 103825?

Otra cosa es que el puntero tenga la dirección de otra variable, y en este caso ya se puede usar VB con ByVal y ByRef, por ejemplo Wink.

De todos modos, si quieres implementar lo primero, deberás crear una librería para luego llamarla desde VB.

Por cierto, para saber el valor que contiene la dirección del puntero, se hace así:

Código:
printf ("En la dirección %.4X está el valor %d\n", puntero, *puntero);

Salu2
« Última modificación: 19 de Julio de 2008, 12:51:58 por Mace Windu » En línea



Para ver este enlace Registrate o Inicia Sesion
Curso de C# para todos los públicos
-
Para ver este enlace Registrate o Inicia Sesion
.NET es mejor que JAVA
-
Para ver este enlace Registrate o Inicia Sesion
Biblioteca de código de Visual Basic
-
Para ver este enlace Registrate o Inicia Sesion
Visual Studio.NET


Para ver este enlace Registrate o Inicia Sesion
Argeniverso Hack Forums, una nueva fuente de información


Para ver este enlace Registrate o Inicia Sesion

Taquión
NZ1
*
Desconectado Desconectado

Mensajes: 35


Ver Perfil
« Respuesta #9 : 19 de Julio de 2008, 04:57:22 »

Hasta donde llegan mis conocimientos en C, para asignarle una dirección a un puntero es así:

Código:
int *puntero = 103825; // Iniciamos puntero con la dirección 103825

En general, no tiene sentido asignar enteros a punteros porque quien gestiona la memoria es el sistema operativo y por lo tanto es él, el que sabe en todo momento qué direcciones están libres y cuáles están ocupadas.

El ejemplo anterior no tiene sentido porque, ¿qué sabemos nosotros acerca de la dirección 103825?

Otra cosa es que el puntero tenga la dirección de otra variable, y en este caso ya se puede usar VB con ByVal y ByRef, por ejemplo Wink.

De todos modos, si quieres implementar lo primero, deberás crear una librería para luego llamarla desde VB.

Por cierto, para saber el valor que contiene la dirección del puntero, se hace así:

Código:
printf ("En la dirección %.4X está el valor %d\n", puntero, *puntero);

Salu2

Hola! Gracias por contestar.

A ver Mace,

Código:
int *puntero = 103825; // Iniciamos puntero con la dirección 103825

esto dice que invalid conversion int* to int, por eso le puse yo el (int*).

El porqué de este programa es porque en un juego se guardan unas conversaciones siempre en la misma dirección de memoria, y quiero hacer un programa que lea las conversaciones (ya que se almacenan aunque después no se visualizan en pantalla, sin embargo si miras en la dirección de memoria lo puedes leer todo).

He probado lo que me has dicho, lo de:
Código:
printf ("En la dirección %.4X está el valor %d\n", puntero, *puntero);

y no funciona, ya que me sale la ventanita de enviar error a Microsoft, supongo que será una violación de memoria ya que esa dirección no la está usando el programa en ejecución, puede ser correcto? En este caso, ¿qué puedo hacer para leer esa dirección, ya que con otros programas (tipo cheats) si puedo acceder a las direcciones y hasta modificarlas.. .

Gracias por todo, un saludo.
En línea
Rakzo-Fimbres
NZ3
***
Desconectado Desconectado

Mensajes: 534


Caminando por las calles de la internet...


Ver Perfil
« Respuesta #10 : 19 de Julio de 2008, 05:21:54 »

Yo que sepa, para declarar una variable con puntero en .net generalmente es:

Código:
int * puntero = 103825;
//o
int*[]  puntero = 103825;
« Última modificación: 19 de Julio de 2008, 05:24:35 por Rakzo-Fimbres » En línea


Para ver este enlace Registrate o Inicia Sesion


Para ver este enlace Registrate o Inicia Sesion
¿Quieres iniciarte en Photoshop CS?


Para ver este enlace Registrate o Inicia Sesion
¿Deseas abrir tu aplicacion .NET sin .NET Framework instalado?
Mace Windu
Moderador
*****
Desconectado Desconectado

Mensajes: 556


Fl4ming 0ur Skills T3aM


Ver Perfil WWW
« Respuesta #11 : 19 de Julio de 2008, 06:25:00 »

Yo que sepa, para declarar una variable con puntero en .net generalmente es:

Código:
int * puntero = 103825;
//o
int*[]  puntero = 103825;

Recuerdo que estamos hablando de Visual Basic, no de C# Wink.

y no funciona, ya que me sale la ventanita de enviar error a Microsoft, supongo que será una violación de memoria ya que esa dirección no la está usando el programa en ejecución, puede ser correcto? En este caso, ¿qué puedo hacer para leer esa dirección, ya que con otros programas (tipo cheats) si puedo acceder a las direcciones y hasta modificarlas.. .

Taquión, en teoría no debería dar problemas el código. La dirección de memoria me la inventé, por lo que a lo mejor corresponde a una memoria restringida por Windows. Simplemente era para que conocieras que para saber el valor de la dirección de un puntero no debes poner &puntero sino *puntero.

Si sabes la dirección de memoria lo mejor que puedes hacer es preguntar en el subforo de C/C++ como tratarla, ya que creo que esto ya no tiene nada que ver con .NET.

Salu2
En línea



Para ver este enlace Registrate o Inicia Sesion
Curso de C# para todos los públicos
-
Para ver este enlace Registrate o Inicia Sesion
.NET es mejor que JAVA
-
Para ver este enlace Registrate o Inicia Sesion
Biblioteca de código de Visual Basic
-
Para ver este enlace Registrate o Inicia Sesion
Visual Studio.NET


Para ver este enlace Registrate o Inicia Sesion
Argeniverso Hack Forums, una nueva fuente de información


Para ver este enlace Registrate o Inicia Sesion

kamui23
Colaborador
****
Desconectado Desconectado

Mensajes: 953



Ver Perfil
« Respuesta #12 : 19 de Julio de 2008, 07:03:35 »

Visual Basic es un lenguaje de alto nivel y no te permite acceder a bajo nivel, como la RAM.

Si necesitas eso, tendrás que pensar en otro lenguaje.

Saludos.
En línea

Busco una meta: conseguir lo que nadie ha conseguido. Y hacerlo en la mitad de tiempo.


No respondo preguntas por mensaje privado. para dudas, escribid en el foro, por favor.
Taquión
NZ1
*
Desconectado Desconectado

Mensajes: 35


Ver Perfil
« Respuesta #13 : 27 de Julio de 2008, 04:59:06 »

Hola a todos! a ver, he estado investigando y por medio de otro programa (Cheat Engine) me he dado cuenta de una cosa, no me funcionaba porque en la dirección de memoria que le introducía por puntero, no tenía nada PERO EN LA PARTE DE MEMORIA OCUPADA POR EL PROGRAMA.

Bueno no me extiendo más porque voy a abrir otro tema en el foro de C/C++ ya que esto es puro C y ya el VB se olvidó un poquito.

Gracias a todos por vuestra ayuda y perdonad si me he entrometido demasiado con C en una parte de VB.

Gracias!
En línea
Páginas: [1] Ir Arriba Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC hacker

Juegos gratis - Articulos PHP - Juegos - Trucos - Letras - Juegos - Juegos Online