Sunteți pe pagina 1din 5

Instituto Politécnico

Nacional
Escuela Superior de Ingeniería
Mecánica y Eléctrica
Unidad; Culhuacán

Practica 1
Desborde de la Memoria.

Alumno:
Guillen Verazaluce Miguel Ángel

Maestro:
Ing. Javier Rodríguez Hernández

Materia:
Análisis Numérico

Grupo:
4EV24
Boleta:
2016350252

1
 Introducción.

Un desbordamiento de memoria es una forma de sobrepasar la memoria que hay reservada para
un dato, hablando en términos de informática. Cuando un programador hace un programa, no se
atiende a escribir todo el código su secuencia, lo normal es utilizar pequeñas funciones que
estructuran ese código y lo hacen más legible.

Los desbordamientos del buffer de memoria siguen siendo uno de los puntos débiles más
peligrosos y más comunes en aplicaciones que utilizan gestión manual de memoria.

En verdad, un buffer se produce en una aplicación informática cuando no cuenta con los controles
de seguridad necesarios en su código de programación. Cabe destacar que para poder llevar a
cabo un desborde de memoria, se debe contar con conocimientos de programación, como
también nociones básicas de arquitectura de Sistemas Operativos.

El principio operativo de un desbordamiento de búfer va de la mano con la arquitectura del


procesador en la que se ejecuta una aplicación vulnerable, ya sea de 32 o 64 bits. Los datos
ingresados en una aplicación se almacenan en la memoria de acceso aleatorio, en una zona que
se conoce como buffer. Un programa con un diseño correcto debería estipular un tamaño máximo
para los datos de entrada y garantizar que no superen ese valor.

Las instrucciones y los datos de un programa en ejecución se almacenan temporalmente en


forma contigua en la memoria, en una zona llamada pila. Los datos ubicados después del búfer
contienen una dirección de retorno (que se denomina puntero de instrucción) que le permite al
programa continuar su tiempo de ejecución. Si el tamaño de los datos es mayor que el del búfer,
la dirección de retorno se sobrescribe y el programa leerá una dirección de memoria no válida,
generando una violación de segmento en la aplicación.

 Desarrollo.
1. Se desarrolla una aplicación, una calculadora básica donde se le solicitan dos variables al
usuario, junto con ella la operación algebraica a realizar.
 Código

2
3
<< endl;
Código;
break;
#include <iostream>

using namespace std;


case 2:
int n1, n2 ,opc,opc1=1, r=0;
system ("cls");
int main (void){
cout << "\n\n La resta de los numeros es: "
do{
<< n1-n2
system("cls");
<< endl;
cout << " * Calculadora basica * \n"
break;
<< endl

<< endl
case 3:
<< "Ingrese el primer numero.....: "; cin >> n1;
system ("cls");
cout << endl
cout << "\n\n La multiplicacion de los
<< endl
numeros es: "
<< "Ingrese el segundo numero....: "; cin >> n2;
<< n1*n2
system ("cls");
<< endl;
cout << " * Calculadora basica * \n"

<< endl
case 4:
<< endl
system ("cls");
<< " Operacion a realizar? "
cout << "\n La division de los numeros es: "
<< endl
<< n1/n2;
<< endl;
cout<< endl;
cout<< " Suma. [1]"<<endl;

cout<< " Resta. [2]"<<endl;


default:
cout<< " Multiplicacion. [3]"<<endl;
break;
cout<< " Division. [4]"<<endl;
}
cout<< " Salir [5]\n\n";

cout<< " Ingrese el numero de la opcion que


cout<<endl<<endl;
desea realizar.....: ";
cout<< " Continuar . . . [1]"<<endl;
cin >> opc;
cout<< " Salir . . . [2]"<<endl;
switch (opc){
cin>>opc1;

}while(opc1!=2);
case 1:
system ("Pause");
system ("cls");
return 0;
cout << "\n\n La suma de los numeros es: " 4
}
<< n1+n2
 Conclusión.

Aprendimos el concepto de desbordamiento así como el desarrollo dentro de nuestros programas


y prevención de ellos.

Evitar el uso de mecanismos que permitan la gestión manual de la memoria, ya que facilitan que
se cometan errores en el manejo de la misma y, por tanto, que se produzcan desbordamientos de
memoria.

Controlar que los datos introducidos están dentro del rango de valores adecuados si son de tipo
numérico y que no sobrepasan la longitud esperada en el caso de ser de tipo cadena.

Este control debe realizarse tanto en el lado del cliente como en el servidor ya que las
validaciones en el cliente son vulnerables.

Por ejemplo, el uso del lenguaje C o C++, donde se permite el uso de punteros a memoria, habría
que dejarlo sólo para cierto tipo de sistemas de alto rendimiento, donde se necesite programar a
bajo nivel la gestión de la memoria.

Fuente.
http://sgotiweb.epn.edu.ec/openjournal/files/journals/2/articles/5/public/5-32-1-PB.pdf

https://es.wikipedia.org/wiki/Desbordamiento_de_b%C3%BAfer

S-ar putea să vă placă și