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)
| | |-+  Escribir directamente en zona de memoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Escribir directamente en zona de memoria  (Leído 2,445 veces)
hanfix

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Escribir directamente en zona de memoria
« en: 8 Mayo 2012, 09:03 am »

Hola.

Esto es una curiosidad, simplemente. Estoy empezando con C++. Me gustaría saber si es posible escribir en una zona de memoria determinada del ordenador, y que, después, leer de esta dirección de memoria este valor (como un debug del DOS, de antiguamente, vamos).

El tema viene porque lo he leído en otro foro. Cuando con Microsoft Visual C++ Express Edition haces

#include <iostream>
using namespace std;

int main{

int n;

cout << n ;
}

n vale 1; en mi ordenador, o incluso si lo ejecuto en una máquina virtual.

Si declaro otra variable, ya no, ya toma otros valores aleatorios.

Es una curiosidad, tal vez no sirva para nada. Por ahí comentan que tiene que ver con la memoria dinámica y tal, que si es valor basura. Estoy de acuerdo, pero; ¿cómo saber de dónde sale ese valor? ¿Se podría escribir un "2" por ejemplo y que cuando vuelva a ejecutar el anterior programa n valiese "2", sin haberla inicializado? ¿O es que el compilador tiene "algo" que la inicializa a "1"?

Es que estoy jubilado y tengo que perder el tiempo con algo...entendedme.

Saludos....


En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: Escribir directamente en zona de memoria
« Respuesta #1 en: 8 Mayo 2012, 09:46 am »

Te respondo un poco por alto.

Cuando tu ejecutas un programa en windows, se hace de tal modo que no puedas escribir en cualquier zona de memoria, cada programa tiene una zona reservada, el modo de escribir en memoria sería con un puntero, a este le asignas una zona de memoria, y apartir de ahí puede escribir en esa zona de memoria o en otras si vas cambiando el puntero.

La respues es muy por alto para que te hagas una idea, y no funciona exactamente así.

Código
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int _tmain(int argc, char** argv[])
  6. {
  7. int ejemplo = 4; // variable de ejemplo
  8. int *punteroAejemplo = &ejemplo;
  9. printf(" Puntero a ejemplo %x   Valor que contiene : %d",punteroAejemplo,*punteroAejemplo);
  10. system("PAUSE");
  11. return 0;
  12.  
  13. }

puntero a ejemplo contiene la direccion de memoria de la variable ejemplo, y el operador & le asigna su direccion de memoria al puntero "punteroAejemplo". Despues en el printf * desreferncia (accede a) la direccion de memoria a la que apunta "punteroAejemplo". Sin este operador, debería de imprimirse la direccion  de memoria de la variable ejemplo


En línea

hanfix

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Escribir directamente en zona de memoria
« Respuesta #2 en: 8 Mayo 2012, 09:54 am »

Gracias. Ya entiendo más o menos por dónde van los tiros.
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.718


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Escribir directamente en zona de memoria
« Respuesta #3 en: 8 Mayo 2012, 11:31 am »

Hay que inicializar las variables antes de usarlas, las locales como n se alojan en la pila y su valor es aleatorio en estos casos (lo que sea que hubiera en la pila).
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
hanfix

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Escribir directamente en zona de memoria
« Respuesta #4 en: 9 Mayo 2012, 21:52 pm »

No obstante, resulta extraño que, siendo valores aleatorios, en otro ordenador, ejecutando el programa, el valor de n siga valiendo 1 si no la inicializas. Es como si el propio compilador la inicializara a 1 por algún motivo...
Lo que me demuestra que debe ser el compilador es que si ahora declaro 2 variables tipo int; por ejemplo "p" y "n", sin inicializar, me dan dos valores "aleatorios"
n=4294156 y p=4248043. Resulta que si ejecuto el mismo programa en otro PC, ¡me dan los mismos valores!
Da igual cómo llame a las variables. Esto quiere decir que el compilador "da" unos valores a las variables; o algo así... En fin, no sé si darle más vueltas a estas chorradillas.

Saludos...no perdáis el tiempo por mi.
En línea

Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: Escribir directamente en zona de memoria
« Respuesta #5 en: 9 Mayo 2012, 23:34 pm »

No obstante, resulta extraño que, siendo valores aleatorios, en otro ordenador, ejecutando el programa, el valor de n siga valiendo 1 si no la inicializas. Es como si el propio compilador la inicializara a 1 por algún motivo...
Lo que me demuestra que debe ser el compilador es que si ahora declaro 2 variables tipo int; por ejemplo "p" y "n", sin inicializar, me dan dos valores "aleatorios"
n=4294156 y p=4248043. Resulta que si ejecuto el mismo programa en otro PC, ¡me dan los mismos valores!
Da igual cómo llame a las variables. Esto quiere decir que el compilador "da" unos valores a las variables; o algo así... En fin, no sé si darle más vueltas a estas chorradillas.

Saludos...no perdáis el tiempo por mi.

En este caso la palabra aleatorio deberia de ser reemplazada por "valor no garantizado" puede ser 1, 129308129038 o cualquier otro numero, puede ser el mismo en varios PC (por la manera que el windows inicializa el stack) pero el tema es que nada te garantiza el valor inicial.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como pasar DVD zona 2-PAL a zona 4-NTSC?
Multimedia
kikeromero 0 2,749 Último mensaje 11 Febrero 2005, 02:56 am
por kikeromero
cambiar memoria de un juego y escribir en memoria By Sacha
Ingeniería Inversa
EL PRINTERO 0 2,836 Último mensaje 24 Agosto 2007, 23:36 pm
por EL PRINTERO
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines