📚 OpenRCE is preserved as a read-only archive. Launched at RECon Montreal in 2005. Registration and posting are disabled.








Flag: Tornado! Hurricane!

Blogs >> fulapol's Blog

Created: Friday, February 8 2008 21:33.41 CST  
Direct Link, View / Make / Edit Comments
Introduccion a la programacion
Author: fulapol # Views: 2651

                      Introduccion a la programacion
                        by  Fulapol (??/??/2006 - ??)
                                                     EL mundo esta lleno de problemas
                                                      y el mas grande es resolverlos.

Bueno escribo esto porque generalmente nadie te ense�a a programar desde 0 o sin referencias y eso es bastante tedioso como cuando dicen "Para entender esto mejor debe saber programar en alg�n otro lenguaje como C o Java, se recomienda aprenderlos primero", y esta es mas una gu�a de referencia para los que inician que un manual o tutorial, sin embargo les sugiero a los que vayan un poco mas adelantados que lo lean pues esto es la base para programar en todo.

Programaci�n, c�digos y lenguajes

Las acciones que hace un programa o un ejecutables o como lo llames es dar al computador ordenes, instrucciones que ya estan programadas en el procesador y que este obviamente sigue pero ademas debemos ver que estos programas estan separados en dos grandes grupos:
   1.- Los programas de sistema: Es la parte mas importante, este tipo de software o programas nosotros lo conocemos como Sistema Operativo o SO que es lo que permite que la computadora este encendida, que veas la pantalla y leas esta guia y practicamente maneja todo el equipo en si mismo, pero este tipo de software adem�s de ser el SO incluye algunos programas b�sicos como editores de texto, compiladores (sistemas unix), y dem�s.
   2.- Los programas de aplicaci�n: Realizan funciones concretas, es decir, que solo se ocupan de sus tareas como crear imagenes, repoducir sonido, etc. apoy�ndose con el Sistema Operativo para realizar funciones complicadas o usar funciones de los mismos hardwares o componentes de la maquina.

Bueno pues ya que sabemos pues basicamente que son los programas y como se clasifican debemos ver lo importante que es como crearlos.
   Para entender mejor esto veamos primero algunas cosas sencillas y no tan sencillas. Para empezar en el mundo todo son instrucciones como por ejemplo "Camina", "Detente" y otras pero la computadora o mejor dicho el procesador no es capas de entender estas instrucci�n.
   Existe un par de instrucciones llamadas x86 y x86-64 siendo la primera la mas usada por el momento y esta misma aparecio en 1985 cuando salio el procesador 80386 o 386 que usaba la arquitectura x86 llamada asi porque depende de las instrucciones x86 y ya despues aparecio para los graficos el 3d-now! y otros pero eso ya es otro tema. Siguiendo con el x86 podemos decir que son instrucciones en binario (0 y 1) pero como recordar 10010 1100 es muy complicado se simplifico usando la numeracion hexadecimal (1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f) pero seguia siendo recordar lo que es 90, f3 y siguiendo con las innovaciones se creo que el assmbler o ensamblador que es usar palabras como nop = 09, jmp = f3 y asi, pero no se quedo ahi y se crearon los lenguajes de programacion; �stos se clasifican en tres grandes categor�as: m�quina, bajo nivel y alto nivel.
   Los lenguajes de maquina son los que como se explico utilizan la lista de instrucciones en su forma original o hexadecimal pero es una forma muy dif�cil de programar.
   Los lenguajes de bajo nivel fueron dise�ados para facilitar la programacion. �stos dependen de la arquitectura f�sica (componentes materiales) y de conocer los nmemotecnicismo (traducci�n hexadecimal - palabras), y los programas escritos en ellos deben ser traducidos a lenguaje m�quina para poder ser ejecutados. Un lenguaje t�pico de bajo nivel es el lenguaje ensamblador.
   Los lenguajes de programaci�n de alto nivel son aquellos en los que las instrucciones son escritas con palabras parecidas a las que usamos (en general son en ingles) lo que facilita la escritura y comprensi�n por parte del programador. Estos lenguajes son independientes de la maquina, o sea que no dependen de la composicion fisica  de la computadora pero al igual que los lenguajes de bajo nivel necesitan ser traducidos a lenguaje maquina en un proceso llamado compilaci�n y el programa que compila es un compilador. La meta de un compilador es compilar c�digo fuente, que son propiamiente las palabras en ingles, a codigo maquina puro, el problema que se tiene es que el SO no puede usar este programa tan "puro" y nesecita tener un formato y este formateo se llama linkeo y el linker o linkeador lo �nico que hace es darle formato a esas instrucciones (formatos: PE [Windows] COOF [Linux]).
   Ejemplos de lenguajes de programaci�n de alto nivel son: Basic, Pascal, C++, Cobol, Fortran, Java y Visual Basic.
   Existen tambien varios tipos de lenguajes de programaci�n de alto nivel, seg�un su uso y la forma de programar. Algunos ejemplos de estos tipos son:
   � Estructurados (Basic, C, Pascal)
   � Orientados a Objetos (Visual Basic, C++, Java)
   � Declarativos (Lisp, Prolog)
   � Funcionales (AML, CAML)

Entornos, algo mas que el compilador

Un entorno de programaci�n es un programa que contiene el compilador y utilidades. Estos entornos se integran para facilitar la programacion para facilitar este proceso y sun llamados IDE (en ingles, Integrated Development Envirnonment, o Entorno de programaci�n integrado).
   Un entorno t�pico contiene:
   � Un editor, que sirve para introducir c�digo fuente y en algunos casos provee funciones como colorear texto para diferenciar cada parte, etc.
   � Un int�rprete o un compilador, que convierte el c�digo fuente en instrucciones.
   � Un depurador (o debugger), que ayuda a seguir el proceso cuando se ejecuta y poder encontrar fallas.

Datos, variable, constantes �para que sirven?

Todo la informacion usada en la programacion es un dato. Estos datos tienen un tipo que ayuda a realizar funciones para cada dato y puede ser desde un simple numero como 65, un numero real (o con decimales) as� 56,84, o simplemente una car�cter "S" pero existen limitacones algo logicas como por ejemplo un error es sumar de caracteres por que simplemente no tiene sentido.
   La asignaci�n de tipos a los datos tiene dos objetivos principales:
   1- Crear funciones cada tipo como hacer una suma o una concatenacion.
   2- Determinar los errores cuando se ejecutan los programas.

   A los lenguajes que exigen que todos los datos deban tener sus tipos declarados o establecidos se les conoce como "fuertemente tipados". El tipo de un dato puede ser convertido bajo ciertas condiciones a otro tipo mediante un mecanismo que se suele llamar "cast" o "casting".

   Todos los programas necesitan datos y estos a grandes rasgos pueden clasificarse en dos grupos:
   1 - A un dato cuyo valor no puede cambiar se lo denomina Constante. Las constantes deben ser declaradas antes de utilizarlas y deben tener un valor antes de compilar.
   2 - Los datos de un programa cuyo valor puede cambiar se conocen como Variables. Una variable es una posici�n de memoria con nombre (Nombre de la Variable), y que contiene un valor (Valor de la Variable).

Tipos de sentencias

Las sentencias son las instrucciones en el codigo fuente y pueden ser anidadas o interiores. En general las sentencias son Ejecutables (realizan operaciones) y No ejecutables (comentarios).
   Cada sentencia ejecutable se traduce por el compilador en una o m�s instrucciones de lenguaje maquina. Las sentencias se clasifican seg�n su tipo y n�mero en:
   � Sentencias Simples: son sentencias que no contienen ninguna otra sentencia. Un ejemplo puede ser cuando se asignan valores a las variables. Ej. a = 2.
   � Sentencias Estructuradas: son sentencias compuestas de otras sentencias que se ejecutan condicionalmente o repetidamente.

   Una expresi�n es un conjunto de variables y/o constantes unidas por un operador. Si en una expresi�n existe mas de una operaci�n debe tenerse en cuenta que existen una serie de reglas para definir la prioridad. Por este motivo es que se suelen utilizar los par�ntesis para establecer la prioridad de los operadores.
   Existen diversos tipos de operadores, por ejemplo:
   � Aritm�ticos: Se usan o deber�an usarse en variables de tipo num�rico. Ejemplos son "+", "-", "*" y "/", que sirven para obtener el resultado de la suma, la resta, la multiplicaci�n y la divisi�n respectivamente.
  � De relaci�n: Los operadores de relaci�n (o relacionales) se utilizan para expresar condiciones y describen una relaci�n entre dos valores. Ejemplos de operadores relacionales son "< (Menor que)", "> (Mayor que)", "=  (Igual a)" y  "<> o != (Distinto a)". Los operadores aritm�ticos y los relacionales se utilizan de la siguiente forma: variable o constante + operador + variable o constante. Por ejemplo: a + b, c / d, a < b, c <> d, etc.
  � L�gicos: Estos operadores sirven verificar expresiones y devuelven valores l�gicos para expresar si es verdad (true) o es mentira (False). La operaci�n "and" (&&) combina dos expresiones simples y produce un resultado verdadero solo si las dos son verdaderas. La operaci�n "OR" (||) es verdadera si uno de las dos es verdadera. La operaci�n "not" (!) act�a sobre una sola expresi�n simple y niega (o invierte) su valor. Existen otros operadores l�gicos adem�s de los mencionados.

Estructuras de control

El control de flujo es la forma en la que se ejecutan las instruccion y algo que era comun es la programacion lineal o de linea por que sigue linea a linea el programa, pero con el tiempo se nesecitaban poder establacer acciones por cada situacion que hubiera y romper este fljo lineal
   Las estructuras de control de un lenguaje de programaci�n son m�todos para especificar el orden en que las instrucciones se ejecutaran. Estas estructuras son fundamentales en los lenguajes de programaci�n.
   Existen dos tipos b�sicos de estructuras de control:

   � De Selecci�n
   � De Repetici�n o Iteraci�n

Las estructuras de selecci�n se utilizan cuando queremos hacer algo dependiendo de las condiciones que tengamos, como un valor de las variables. Una estructura muy com�n es el IF, las condiciones para esta estructura deben ser de tipo logicas, que se puedan o no cumplir y es de la siguiente forma general (espa�ol - general)

    S� expresion_logica                       If (condicion o expresi�n)
       Entonces hacer acci�n A                  "acci�n A"
    Sino                                      else
       Hacer accion B                           "acci�n B"

La estructura if funciona de la siguiente manera:
  1 - Se eval�a la expresi�n l�gica, supongamos 5 > 4 (5 es mayor que 4)
  2 - Si la expresi�n es verdadera (es verdad 5 es mayor que 4), se ejecutara la sentencia A y saldr� del if a la siguiente expresi�n o sentencia
  3 - Si la expresi�n fuera falsa (que tal en marte 5 es menor que 4), entonces se ejecutara la sentencia B. La parte else (sino) es opcional

Otra sentencia es el Switch que se utiliza para elegir entre diferentes alternativas. Una sentencia case se compone de varias sentencias simples. Cuando switch se ejecuta, una de las sentencias simples se selecciona y ejecuta.

    Seg�n_sea selector hacer        switch opci�n {
        C11, C12,�: sentencia 1         case 15: "sentencia para 15"
        C21, C22,�: sentencia 2         case 86: "sentencia para 86"
      [Sino sentencia x]                default "acci�n si no es 15 o 86"
    fin_seg�n                                      }

En este caso la expresi�n selector se eval�a y se compara con las listas de constantes o casos; las listas de constantes son listas de posibles valores del selector separados por comas. Solo se ejecuta una sentencia.
   La sino es opcional, como en la sentencia if.
   El selector debe ser un tipo ordinal (numero entero, car�cter, o booleano). Los n�meros reales no pueden ser utilizados ya que no son ordinales.
   Todas las constantes Case deben ser �nicas y de un tipo ordinal igual que el tipo de selector.


Las computadoras est�n preparadas para ejecutar tareas repetidamente. Los c�lculos simples se pueden realizar f�cilmente a mano, pero las tareas grandes o repetitivas son realizadas por una computadora.    Las estructuras de control repetitivas son en las que una sentencia o grupos de sentencias se repiten muchas veces. Este conjunto de sentencias se denomina bucle, o loop. Las acciones que se repiten en un bucle son el cuerpo del bucle, y cada repetici�n del cuerpo del bucle es una iteraci�n.

La estructura for es la mas basica y se especifica que nesecita para acabar el bucle un ejemplo seria

  Por (sentencias de condicion)    for (veces = 0; veces < 50; veces+1) {
       tarea a repetir               "tarea a repetir"
  fin_Por                           }

Aqui vemos que la condicion para hacer el for es que la variable veces sea menor que 50, que empieza en 0 y que para terminar la condicion aumentamos el valor de veces + 1.
   Este tipo de bucles es muy comun pero no debe olvidarse poner poner las comdiciones pues en ese caso el bucle nunca y esto no es muy bueno

Ademas de for la estructura repetitiva while es aquella en la que no se conoce el n�mero de iteraciones y el cuerpo del bucle se repite mientras se cumple una condici�n.

    Mientras (condicion)          while (repetir < 10) {
        sentencia 1                    repetir + 1
        sentencia 2                    Escribir ("algo")
    fin_Mientras                                 }

Como vemos dentro del bucle nesecitamos hacer que la condicion se cumpla a diferencia del for y estoes algo complicado porque es muy problable que nunca salga de este bucle si no tenemos cuidado con lo que hacemos.

Hasta aqui llegue y espero que les sirva, si encuentro algo interesante lo metere despues o escribire otro manual-guia para ustedes.


Archived Entries for fulapol
Subject # Views Created On
No archived blog entries found.

There are 31,328 total registered users.


Recently Created Topics
[help] Unpacking VMP...
Mar/12
Reverse Engineering ...
Jul/06
let 'IDAPython' impo...
Sep/24
set 'IDAPython' as t...
Sep/24
GuessType return une...
Sep/20
About retrieving the...
Sep/07
How to find specific...
Aug/15
How to get data depe...
Jul/07
Identify RVA data in...
May/06
Question about memor...
Dec/12


Recent Forum Posts
Finding the procedur...
rolEYder
Question about debbu...
rolEYder
Identify RVA data in...
sohlow
let 'IDAPython' impo...
sohlow
How to find specific...
hackgreti
Problem with ollydbg
sh3dow
How can I write olly...
sh3dow
New LoadMAP plugin v...
mefisto...
Intel pin in loaded ...
djnemo
OOP_RE tool available?
Bl4ckm4n


Recent Blog Entries
halsten
Mar/14
Breaking IonCUBE VM

oleavr
Oct/24
Anatomy of a code tracer

hasherezade
Sep/24
IAT Patcher - new tool for ...

oleavr
Aug/27
CryptoShark: code tracer ba...

oleavr
Jun/25
Build a debugger in 5 minutes

More ...


Recent Blog Comments
nieo on:
Mar/22
IAT Patcher - new tool for ...

djnemo on:
Nov/17
Kernel debugger vs user mod...

acel on:
Nov/14
Kernel debugger vs user mod...

pedram on:
Dec/21
frida.github.io: scriptable...

capadleman on:
Jun/19
Using NtCreateThreadEx for ...

More ...


Imagery
SoySauce Blueprint
Jun 6, 2008

[+] expand

View Gallery (11) / Submit