Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - The Swash

#31
Hola,

Respecto a lo de agregar un ejecutable dentro de otro, si bien miraste el material y leíste un poco de teoría sabrás que la información de referencia para el lanzador, cargador de Windows se encuentra en la cabecera así que si vas a hacer eso se debe copiar todo el ejecutable. Que lo metas en una sola sección sería lo "ideal" puesto que  tu necesitas la información para hacer una ejecución "casera". Luego tienes unas dependencias de que tu mismo le tienes que dar espacio en memoria, un thread, etc.
Es aquí donde se presentan los problemas, porque además de eso debes resolver las importaciones y relocaciones.

Generalmente muchos ejecutables traen un ImageBase similar a 0x400000 y la única forma de cambiar estos campos sería teniendo una tabla .reloc en tu exe y no todos lo tienen.

Como ves que complica un poco la cosa, cualquier cosa preguntas y con gusto.

En cuanto a las secciones, son muchísimas y la mejor explicación está en el PE COFF de Microsoft, pero entonces te digo las más conocidas:


  • .text -> Sección de código ejecutable
  • .code -> Sección de código ejecutable
  • .data -> Sección de datos (variables)
  • .idata -> Sección de importación de librerías (import data)
  • .rdata -> Igual que la anterior
  • .rsrc -> Sección de recursos.
  • .reloc -> Sección de relocaciones.
  • .debug -> Sección con datos para la depuración

Y esos son los que momentáneamente recuerdo.

Saludos.
#32
Java / Re: [Duda] Interfaces (objetos).
19 Septiembre 2012, 22:41 PM
Hola,

Muchas gracias por vuestras amables y contundentes respuestas.

Un saludo,
Iván Portilla.
#33
Java / [Duda] Interfaces (objetos).
8 Septiembre 2012, 21:19 PM
Buenas tardes,

Tengo una duda muy puntal respecto a las interfaces en java, las interfaces vienen siendo abstracción pura. Según mi concepto obligan a implementar métodos definidos en esta a clases que implementen la interfaz.

Mi duda surge en:
¿Si tengo una clase que implementa una interfaz, pero en dicha clase creo un método que no está definido en la interfaz funcionaría? o me veo límitado a los métodos de la interfaz?.

Con un ejemplo real:
Interfaz:
Código (java) [Seleccionar]
public interface IList<E> {
public void add(E target);
public boolean isEmpty();
public boolean isFull();
public boolean contains (E target);
public void set (int index, E target);
public E get(int index);
public E remove(int index);
public boolean remove (E target);
public void print();
}


Clase que implementa la interfaz:
Código (java) [Seleccionar]
public class CList<E> implements IList<E> {

private E[] data;
private int size;

public void add(int index, E target){
if ((index > 0) && (index < size)){
if(isFull())
stretch();
for (int i = index; i <= size; i++)
data[i+1]= data[i];
data[index]= target;
size++;
}
}

public boolean isEmpty(){
return size==0;
}

public boolean isFull(){
return data.length == size;
}

private void stretch(){
E[]temp = (E[]) new Object[data.length*2];
for (int  i=0; i<data.length; i++)
temp[i]= data[i];
data=temp;
}

public void add(E target){
if(isFull())
stretch();
data [size]= target;
size++;
}

public E get(int index){
if (index >0 && index< size)
return data[index];
return null;
}

public void set(int index, E target){
if((index >= 0)&& (index< size))
data[index]= target;
}

public CList(){
data = (E[]) new Object[1];
size=0;
}

public boolean contains (E target){
for(int i = 0; i < size; i++){
if(data[i].equals(target))
return true;
}
return false;
}

public E remove(int index){
if (index>=0 && index < size){
E element= data[index];
for (int i= index; i<size-1; i++)
data[i]=data[i+1];
size--;
return element;
}
return null;
}

public boolean remove (E target){
for (int i=0; i<size; i++){
if (data[i].equals(target)){
E element= remove(i);
size--;
return true;
}
}
return false;
}

public void print(){
if(! isEmpty()){
for (int i= 0; i<size; i++)
System.out.print(data[i] + " ");
}
}

public boolean removeAll(E target){
boolean resultado = true;
int cont = 0;
if (!isEmpty()){
while(resultado){
cont++;
resultado = remove(target);
}
if (cont > 1)
return true;
}
return false;
}

public static void main(String[] args ){
IList<String> lista=new CList<String>();
lista.print();
lista.add("B");
lista.add("F");
lista.add("A");
lista.add("Z");
lista.add("W");
lista.add("P");
lista.add("R");
lista.add("A");
lista.add("S");
lista.add("A");
lista.add("P");
lista.print();
System.out.println(lista.removeAll("A"));
lista.print();
}
}


Claramente se puede notar al compilar un error por no encontrar el símbolo de la función "removeAll". Si declaro el método en la interfaz funciona sin ningún pero, entonces sólo quiero asegurarme de que la interfaz me limita los métodos que puede tener mi clase como "públicos".

Ahora mismo comprobé que si instancio la clase utilizando su mismo tipo de dato así:

Código (java) [Seleccionar]
CList<String> lista = new CList<String>;

El problema desaparece y todo recae en crear un objeto del tipo Interfaz e instanciarlo con una clase que contiene métodos que la interfaz no contiene.

¿Estoy en lo correcto?
¿Por qué el error de la primera forma de instanciar la clase?

De poder entrar en detalle lo agradecería.

Muchas gracias,
Iván Portilla.
#34
Hola,

Gracias por leer el material de he dejado.
En cuanto a tu duda temo que es porque el archivo tiene "overlay" que es información sobrante que no pertenece a ninguna sección.

Estaría bien si puedes subirlo y así lo miramos todos.

Un saludo,
Iván Portilla.
#35
Programación C/C++ / Re: ayuda con caracteres
2 Septiembre 2012, 03:11 AM
Hola,

Tío bjpenn, es apenas creíble que después de la gran explicación que te ha dado BlackZeroX primero no la aceptes e interpretes, luego que busques otra fuente (de complemento no iría mal). Agradece el esfuerzo que ha puesto el compañero para explicarte al detalle cada duda que tenías.

Un saludo,
Iván Portilla.
#36
Programación C/C++ / Re: programa confuso
27 Agosto 2012, 20:00 PM
Hola,

Ese código podría representarse de una forma más legible con etiquetas geshi y además con una mejor indentación:

#include <stdio.h>
int main()
{
    int i, media=1, suma=0, tabla[4];
    printf("\nEscriba 4 numeros\n\n");
    for (i=0; i<=3; i++)
        scanf("%d", &tabla[i]);
   
    for (i=0; i<=3; i++)
        suma+=tabla[i];

    media=(suma/4);
    printf("\n\n...La media es: %d", media);
    printf("\nLos numeros introducidos son: ");
    for (i=0; i<=3; i++)
        printf(" %d ", tabla[i]);   
    return 0;                   
}


Sencillamente el código pide 4 números que posteriormente los almacena en un arreglo de enteros y luego los suma y saca su media. Muestra los numeros que ingresaste, la media y esto es todo.

Un saludo,
Iván Portilla.
#37
Programación C/C++ / Re: numeros iguales
25 Agosto 2012, 13:22 PM
#include <stdio.h>
main()
{
  int a, b, iguales;

  printf("Escribe el primer numero");
  scanf("%d", &a);
  printf("Ecribe el segundo numero");
  scanf("%d", &b);
  printf("Son iguales (1 = si; 0 = no): " );
  scanf("%d", &iguales);
 
  (a == d)? printf("Los números son iguales"):printf("Los números no son iguales");
 
}


Si no es lo que buscas, comentas.

Un saludo,
Iván Portilla.
#38
Hola,

Seré breve, el tamaño de SizeOfCode es 0x2000 porque solo hay una sección con el FLAG de ser sección con código ejecutable y en defecto ocurre lo mismo con el SizeOfInitializedData pero con el flag de InitielizedData.

Un saludo,
Iván Portilla.
#39
Hola,

Danyfirex, para encontrar dicho campo debes primero:

  • Encontrar el valor de e_lfanew.
  • Sumarle 0x24 que corresponde a PE_SIGNATURE + SIZE_IMAGE_FILE_HEADER.
  • Luego súmale la posición del campo SizeOfInitializedData que es 0x08.
  • Ya estás en el campo que requieres.

Un saludo,
Iván Portilla.
#40
Hola,

Copias tu archivo en "/etc/init.d", no olvides darle permisos de ejecución. Luego editas el archivo "/etc/rc.local" y añades la línea que ejecute tu archivo en "/etc/init.d" (/etc/init.d/archivo).

Un saludo,
Iván Portilla.