26-11-2008, 19:32
- Off-topic:
- no leatex... es como cuando te preguntan los budistas que ruido hace un arbol que se cae cuando no hay nadie que lo escuche! son preguntas sin respuesta!
LeaTex escribió:sin usar archivos? quién te planteó este problema? algún profe de paradigmas?
digo, porque si no tenés archivos, dónde está el código fuente? aunque si trabajás con objetos vivos no tenés archivos fuentes, entonces ahí sería posible hacerlo "sin archivos", pero imposible imprimir el código fuente porque estaríamos hablando de métodos, clases, etc.
por cierto, cuando decís "su propio código", te referís al código fuente, no?
en fin, al margen del lenguaje utilizado, hacés que el programa encuentre su archivo fuente, lo lea y lo imprima como si fuera cualquier otro archivo. pero para eso, ya te digo, tenés que tener un archivo fuente.
no se me ocurre otra cosa. tal vez con un poco más de datos se me ocurre algo más.
jarry escribió:uhm...
pienso que puedo buscar el codigo en binario en la memoria, y presentarlo en hexa en la pantalla, quizas se referia a eso, no debe ser muy dificil, haces un un print del code segment y listo( no me preguntes en la practica como se haria esto porque no tengo ni idea...)
no creo que un programa compilado pueda presentar su propio codigo fuente a partir del archivo objeto, o de lo que este en memoria, a lo sumo se podria usar un decompilador como dijeron, pero como un proceso aparte del pgm en si...
obvio que no se me ocurrio, es un concepto de programacion
#include <stdio.h>
int
main (void)
{
char *s1="#include <stdio.h>%c%cint%cmain (void)%c{%c";
char *s2=" char *s%c=%c%s%c;%c char *s%c=%c%s%c;%c";
char *s3=" char n='%cn', q='%c', b='%c%c';%c";
char *sp=" printf(";
char *s4="%ss1,n,n,n,n,n);%c";
char *s5="%ss2,'1',q,s1,q,n,'2',q,s2,q,n);%ss2,'3',q,s3,q,n,'p',q,sp,q,n);%c";
char *s6="%ss2,'4',q,s4,q,n,'5',q,s5,q,n);%ss2,'6',q,s6,q,n,'7',q,s7,q,n);%c";
char *s7="%ss2,'8',q,s8,q,n,'9',q,s9,q,n);%ss2,'0',q,s0,q,n,'x',q,sx,q,n);%c";
char *s8="%ss3,b,q,b,b,n);%ss4,sp,n);%ss5,sp,sp,n);%c";
char *s9="%ss6,sp,sp,n);%ss7,sp,sp,n);%ss8,sp,sp,sp,n);%c";
char *s0="%ss9,sp,sp,sp,n);%ss0,sp,sp,n,n,n);%c return 0;%c}%c";
char *sx="--- This is an intron. ---";
char n='\n', q='"', b='\\';
printf(s1,n,n,n,n,n);
printf(s2,'1',q,s1,q,n,'2',q,s2,q,n); printf(s2,'3',q,s3,q,n,'p',q,sp,q,n);
printf(s2,'4',q,s4,q,n,'5',q,s5,q,n); printf(s2,'6',q,s6,q,n,'7',q,s7,q,n);
printf(s2,'8',q,s8,q,n,'9',q,s9,q,n); printf(s2,'0',q,s0,q,n,'x',q,sx,q,n);
printf(s3,b,q,b,b,n); printf(s4,sp,n); printf(s5,sp,sp,n);
printf(s6,sp,sp,n); printf(s7,sp,sp,n); printf(s8,sp,sp,sp,n);
printf(s9,sp,sp,sp,n); printf(s0,sp,sp,n,n,n);
return 0;
}