• Miércoles 24 de Abril de 2024, 11:31

Mostrar Mensajes

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


Mensajes - y0mism0

Páginas: [1] 2
1
C/C++ / Varias Preguntas
« en: Domingo 11 de Febrero de 2007, 22:27 »
1. Cuando tu abres un fichero para entrada y salida ("r+"), y, despues de leer del fichero, por ej, haciendo un "fscanf(FILE *f....) ",   tienes que utilizar la funcion fflush, antes de escribir en el mismo fichero, por ej, haciendo un "fprintf(FILE *f...) ???

2. Es lomismo, para acceder a una estructura, poner " p->campo" que poner " (*p).campo?? y sin parentesis "*p.campo"?

3. Para que se utiliza la barra inclinada y el guion en estas sentencias?? "t[0].campo/t[0].campo2"   y   "t[0].campo-t[0].campo3"


4. Porque esta sentencia es incorrecta "reg3.reg2.reg1-->(*pa)" y esta otra no
" *(reg3.reg2.reg1-->pa)" ??


SAludos.

2
C/C++ / Re: ¿que Falla Aqui?
« en: Jueves 30 de Noviembre de 2006, 02:15 »
ok, entendido, buena explicación, gracias ;)

3
C/C++ / Re: ¿que Falla Aqui?
« en: Miércoles 29 de Noviembre de 2006, 09:35 »
Ya lo hice, gracias por tu ayuda. A ver, si yo el ejemplo que me pusiste lo entiendo, entiendo lo que quieres decir, el puntero modifica su valor apuntado cada vez que algo llama a la funcion...
Yo solo me refiero al primer ejemplo, al de la cadena. Mas facil aún :
Código: Text
  1. #include<stdio.h>
  2. char* funcion(int);
  3. void main()
  4. {
  5. char* a=funcion(8);
  6. printf("%c",a);
  7. }
  8. char *funcion(int a){
  9.   char cad[20]="hola";
  10.   return cad;
  11. }
  12.  

Aqui me imprime caracteres extraños, pero sin embargo si imprimo los caracteres uno a uno, no :
Código: Text
  1. #include<stdio.h>
  2. char* funcion(int);
  3. void main()
  4. {
  5. char* a=funcion(8);
  6. printf("%c",a[2]);
  7. }
  8. char *funcion(int a){
  9.   char cad[20]="hola";
  10.   return cad;
  11. }
  12.  
Aqui me imprime "l", o sea que esta bien. Realmente lo unico que no entiendo es porque al intentar imprimir la cadena entera, no se imprime, y si la intento imprimir caracter a caracter, si...

4
C/C++ / Re: ¿que Falla Aqui?
« en: Miércoles 29 de Noviembre de 2006, 01:52 »
Citar
Es un casting, hace falta ya que tu variable es char[5] y no char *.
Porque tiene que ser "char*"? no estabamos devolviendo antes cad? que deberia ser lo mismo que &cad?



Citar
No hay diferencia, las dos estan mal, vos dijiste que funcionaba y yo te mostre que en ese caso durante un momento funcionaba y ni bien hacias una operacion el valor, que esta en la pila, era modificado. El contenido de v varia, por algo imprime 77 y no 3, v sigue apuntando a la misma direccion en memoria pero su contenido cambia.

Pero cambia, porque invocaste a la funcion primero con 3 y luego con 77, entonces logicamente, la direccion de memoria de v contendra el ultimo valor que le diste, en este caso 77, y te imprime de hecho 77. Pero en el caso que yo puse arriba, invoque a la funcion solo con un valor, solo una vez, y sin embargo, la pila es modificada mientras que con "&v" no.

5
C/C++ / Re: ¿que Falla Aqui?
« en: Martes 28 de Noviembre de 2006, 13:44 »
Citar
Los arrays se pasan siempre por referencia, si retornaras (char*)&cad seria exactamente la misma direccion la que estuvieras devolviendo.
Que es el (char*)? porque hace falta ponerlo?

Citar
Eso te imprime 77, el puntero es correcto, pero el valor en la pila es modificado posteriormente.
Pues no entiendo la diferencia entre retornar "cad" y retornar "&v", ambas son direcciones de memoria, y ambas son modificadas al retornar la funcion, por lo que tambien tendria que variar el contenido de "&v"... incluso el compilador te marca el mismo aviso que dijiste "warning C4172: returning address of local variable or temporary".

Otra cosa, que estas comparando en esta sentencia? : "if(cad1<cad2)"... ya se que para comparar se utiliza strcmp...

6
C/C++ / Re: ¿que Falla Aqui?
« en: Martes 28 de Noviembre de 2006, 02:24 »
ok, gracias por el consejo.
Alguna explicacion enotnces, para que, si retorno una variable int v; declarada dentro de la funcion y definida con el valor "3", al retornarla por referencia &v al puntero p, si me imprima "3", al desrreferenciar el puntero , *p??

A ver una cosa que no entiendo con el ejemplo de antes retornado cad. Si cad es un una variable de tipo array, digamos que se comporta como un puntero. Entonces digamos que "cad" contiene la direccion de memoria a partir de la cual se almacena el array de caracteres. Por lo que "&cad", seria la direccion de memoria de la propia variable cad de tipo array. Entoces, a mi entender, si tu retornas "cad", estas retornando la direccion de memoria inicial de la cadena. SI tu retornaras esto "&cad", estarias retornando la propia direccion de memoria de la variable cad. La pila, despues de retornar la direccion de memoria inicial de la cadena, osea "cad", se modificaria de tal manera que, ahora, la direccion de memoria de la variable "cad" ya no contendria la direccion de memoria de la cadena, por lo que ya no seria la variable cad. EL caso esque que lo que se destruye al retornar la funcion, es lo que contiene la direccion de memoria de cad, que seria esta "&cad" y no lo que contiene la direccion que apuntaba por cad, osea la cadena, por lo que la direccion de la cadena deberia seguir siendo la misma y contiendo la misma cadena, eso es lo que no entiendo, nose si me explico...

Bueno nose si se entiende lo que quise decir, ahora una pregunta mas secilla :P, por que no se puede retornar "&cad", la direccion de memoria de la variable de tipo cadena? no tienen los punteros tambien su propia direccion de memoria como las variables?

7
C/C++ / ¿que Falla Aqui?
« en: Lunes 27 de Noviembre de 2006, 08:23 »
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char *Pchar;
typedef char cadena[5];
Pchar devuelve(int);
void main()
{
      printf("%s",devuelve(1));

}

Pchar devuelve(int i)
{
   cadena cad;
   if (i==0)
      strcpy(cad," cero");
   else
      strcpy(cad," uno");
   return cad;
}

Me imprime un simbolo extraño en vez de uno o cero...

8
C/C++ / Re: Varias Preguntas
« en: Lunes 27 de Noviembre de 2006, 03:42 »
ok.
Mira este programa:

#include<stdio.h>
#include<conio.h>
void main()
{
int a[]; //"Error: Size of a in unknown or zero"
int i;
for(i=0;i<10;i++)
a=i*2;
printf("%d",a);
}
POrque me da este error??


Otra cosa, alguna explicacion para que este programa me ejecute una instruccion no permitida y se me cierre?

#include<stdio.h>
void main()
{
int cad[10][10];
int i,j;
for(i=0;i<10;i++)
{

   for (j=0;j<10;j++)
   {
      scanf("%d",cad[1][1]);

}}}



Respecto a lo del ^, no me da ningun error, simplemente me devuelve unos valores distintos de si pongo i*i...  ^ es el operador de xor?? se puede utilizar en sentecias logicas dentro de if por ej??



Ah, y una ultima cosa, como podria hacer un programa que lea un entero de n cifras, y almacene sus cifras en un arreglo de n dimensiones? Lo estaba pensando hacer con divisiones entre 10 y conversiones de tipo para truncar, pero no me sale, alguna idea para aislar cada cifra y meterla en un array?



Saludos.

9
C/C++ / Re: Varias Preguntas
« en: Lunes 27 de Noviembre de 2006, 01:33 »
Respecto a la pregunta 1, la escribi mal. Queria decir, que por que se puede poner esto: "int cad[]={1}" o esto "int cad[]"  y no esto "int cad[][]" o esto "int cad[][]={1,2}" ?
Por eso preguntaba tambien, que cuando se pueden dejar los arrays sin poner el tamaño completo, y cuando no. En este caso si pongo "int cad [8][8]", si me funciona. Si lo dejo como lo puse, el compilador me marca este error "Size of the type is unknown or zero"...

Eternal Idol, no entiendo lo que me dijiste de que me falta el codigo para la comprobación.

Otra pregunta, porque no me deja poner "cad[j]=i^2" y si "cad[j]=i*i;" ?? Como esque el compilador no reconoce el caracter ^ de elevado?

Saludos.

10
C/C++ / Varias Preguntas
« en: Domingo 26 de Noviembre de 2006, 04:29 »
HOla!

1. En primer lugar tengo una duda con los arrays. Porque no se puede poner esto
"int cad[]={1}" y si esto "int cad{1, 7}" ? (el primero es un vector y el segundo una matriz).
Cuando hay que asiganarle una cantidad de memoria fija a los arrays y cuando no hace falta, por ej cad[10]??? cuando puedes hacer esto "cad[]" o "cad[][]"??

2. porque no puedes hacer esto:?
#define MAX 5
typedef int a[MAX];
int a[MAX];
if(2<MAX)

Por ej, ninguna de estas 3 intrucciones me funciona, el compilador me dice que esta "missing..". No lo entiendo, si se supone q el preprocesador sustitye los el valor de MAX por 5 en todas las intrucciones.

Lo mismo, porque esto no me imprime 8?
#define HOLA 8
printf("HOLA");
porque esto si:
printf("%s",HOLA);

4. que quiere decir el compilador cuando te da un error de "Lvalue"?

Saludos.

11
C/C++ / Ayuda Con Funcion
« en: Jueves 23 de Noviembre de 2006, 21:11 »
PUede una funcion rerttornar dos valores?? POr ej, una funcion q intercambie dos numeros, como se haria??

ej:

......

introduzca a y b;
funcion intercambio(int a,int B)
{
tmp=a;
a=b;
b=tmp;
return a y b;
}

printf("ahora el numero %d y %d son %d y %d",a,b,intercambio(a,B));


Algo asi, Como podria retornar dos valores y q se imprima uno d ellos por el printf segun yo lo pida?

12
C/C++ / Ayuda Para Hacer Dos Programas
« en: Jueves 23 de Noviembre de 2006, 21:05 »
Necesito ayuda para hacer dos programas, alguna idea, indicacion de como hacerlo.

1 .

"Escriba un programa realice la siguiente operación:

1. generará un número aleatorio de cuatro cifras.
2. leerá desde la entrada estándar un número de cuatro cifras diferentes.
3. comparará el número leído con el número generado por la máquina
4. Mostrará en la pantalla un número que indicará cuántas cifras del número leído existen y están colocadas
en su posición correcta en el número generado, y cuántas cifras existen pero no están colocadas en su
posición correcta.
El programa repetirá los pasos 2 a 4 hasta que el número de cifras en posición correcta sea 4. Sea el siguiente
ejemplo de ejecución (para el número generado 5234)
Introduza su número: 2754
Cifras en su posición: 1
Cifras en otra posición: 2
Introduza su número: 1534
Cifras en su posición: 2
Cifras en otra posición: 1
..."

En este lo que se hacer es el apartado 4, comparar cifras y posiciones.



2.

"Realice un programa que lea de la entrada estándar un número de hasta 8 cifras y muestre por la salida estándar la
cifra resultante de aplicar el siguiente proceso:

a) Sumar el valor absoluto de todas las cifras del número.
B) Si el valor resultante tiene más de una cifra, volver a sumar todas sus cifras sucesivamente hasta obtener
un valor de una única cifra.
Ejemplos:
Valor introducido por el usuario: 68543210
68543210 -> 6+8+5+4+3+2+1+0 = 29
29 -> 2+9 = 11
11 -> 1+1 = 2
Valor a mostrar: 2
Valor introducido por el usuario: 10000
10000 -> 1+0+0+0+0 = 1
Valor a mostrar: 1
"

13
ASM (Ensamblador) / Re: 2 Preguntas
« en: Viernes 29 de Septiembre de 2006, 18:06 »
Cita de: "robokop"

Me choca que la gente que aparte de que va a hacer malware quiere todo en un solo cómando.
Eternal es experto de este tema y si dice que no es porque
y yo lo confirmo no existe ningun comando para esconder procesos , crees que windows haria eso ??.. porfavor  ..

....

No quieras todo tan fácil y lo peor es la actitud tan sobervia de contestar , aqui nadie te va a ayudar a hacer malware .
No quiero hacer ningun malware, solo es curiosidad. Ya se que Eternal es experto, no le contradigo, solo me extraño de como lo hacen los "malwares"... y pensandolo bien es de logica que no halla ninguna funcion de las apis que esconda un proceso, ni supongo que de C tampoco.. C utilizas las apis...

Nose que tiene de soberbia mi respuesta.... en cualquier caso no fue mi intencion..

14
ASM (Ensamblador) / Re: 2 Preguntas
« en: Jueves 28 de Septiembre de 2006, 00:50 »
Cita de: "Eternal Idol"
1. Por supuesto que no.

 
A no? Y entonces como lo hacen los troyanos, por ej, para ocultar su proceso? Fui mirando uno por uno, todos los procesos antes de ejecutar el servidor del  troyano, y despues, y no se abrio ninguno nuevo...

15
ASM (Ensamblador) / 2 Preguntas
« en: Miércoles 27 de Septiembre de 2006, 17:13 »
1.  Existe alguna funcion de la api para ocultar un proceso del administrador de tareas en windows?

2. Necesito una funcion, del tipo execv("prog.exe",argv); pero para windows. Ya se que esta funcion es de C, pero como en C ya mire y no vi ninguna que me pudiera servir, quisiera saber si hay alguna funcion de la api que valga para esto, es decir, que habra un programa, con los argumentos que le indiques en la funcion...

16
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Martes 19 de Septiembre de 2006, 00:37 »
Y si yo quiero que el procesador empiece a ejecutar en la instruccion "mov eax,ebp" por ej, que pongo?? Eso del entry:funcion, lo puse con readfile y se me fue directamente al jmp readfile de abajo.

MSDN? donde esta eso? donde esta el ejemplo?

18
ASM (Ensamblador) / Re: .... Asesoria Con El Debug
« en: Domingo 17 de Septiembre de 2006, 02:40 »
Yo tambien empece con el Debug, aunque dure 2 dias y me pase al Masm, y no me arrepiento...

19
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Sábado 16 de Septiembre de 2006, 16:37 »
Cita de: "Eternal Idol"

No se a que te referis con eso realmente.
Me refiero, a, la instruccion que debo poner en la cabecera del archivo, para que el programa comience a ejecutarse a partir de una direccion, no a partir de la direccion donde se cargue el archivo, y en que seccion hay que situar dicha intruccion.... cambiar el entry point y situaro en otro lugar del codigo.....

Cita de: "Eternal Idol"

Es la direccion por defecto del enlazador de Microsoft, eso te demuestra lo que te dije, si no fuera asi todos esos programas sobreescribirian a los demas ...

Ya... pues cargue varios programas A LA VEZ y siempre se cargaban a partir de la misma  direccion..


Oye, y porque no puedo utilizar ExitWindowsEx? Esque corro el programa con el debug y me dice q no tengo privilegios......y soy el admn....ombre ya se que los programas corren el ext3, pero al llamar a la funcion el micro cambia a modo kernel y se ejecuta.. COmo puedo tener privilegios para utilizar esa funcion?tb trate de usar
InitiateSystemShutdownEx, pero por muchas librerias q pongo el compilador me sigue diciendo q la funcion esta indefinida... nose como pagar el pc..


Saludos.

20
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Sábado 16 de Septiembre de 2006, 03:33 »
OK, gracias, ya me funciona bien el programa...

Cual era la instruccion del entry point, y donde hay q situarla?

Citar
Cada proceso tiene su propio espacio de direccion totalmente independiente de los demas.

PUes cargue varios procesos con el olly, y se me cargan siempre en 00401000...

POr cierto, ya me di cuenta de porque el otro dia no me funcionaban las etiquetas, por lo visto, debe ser que utilizaba una palabra reservada del compilador.
Yo ponia esto :    " goto: (y me referia asi -->) jmp goto".
Claro, cuando probe al dia siguiente, no puse goto como nombre de etiqueta, y me funciono normalmente.. jejej.. en fin no sabia que goto era una palabra reservada...

Saludos.

21
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Viernes 15 de Septiembre de 2006, 18:03 »
Código: Text
  1.  
  2. .386
  3. .model flat,stdcall
  4. option casemap:none
  5. include &#092;masm32&#092;include&#092;windows.inc
  6. include &#092;masm32&#092;include&#092;kernel32.inc
  7. includelib &#092;masm32&#092;lib&#092;kernel32.lib
  8. include &#092;masm32&#092;include&#092;user32.inc
  9. includelib &#092;masm32&#092;lib&#092;user32.lib
  10.  
  11.  
  12. .data
  13. MsgBoxCaption  db &#34;msgboX&#34;,0
  14. MsgBoxText       db &#34;¿hola, que tal?&#34;,0
  15. cadena      db &#34;hola, xD&#34;,0
  16. cadena2      dd 20h
  17. lpdword      db 0h
  18. lpdword2      db 0h
  19. hInstance          dd 0h
  20. hInstance2          dd 0h
  21.  
  22. .code
  23. start:
  24. push MB_OK
  25. push OFFSET MsgBoxCaption
  26. push OFFSET MsgBoxText
  27. push NULL
  28. call MessageBox
  29.  
  30. push STD_INPUT_HANDLE
  31. call GetStdHandle
  32. mov hInstance2,eax
  33.  
  34.  
  35.  
  36. push NULL
  37. push OFFSET lpdword2
  38. push 20h
  39. push OFFset cadena2
  40. push hInstance2
  41. call ReadFile
  42.  
  43. push STD_OUTPUT_HANDLE
  44. call GetStdHandle
  45. mov hInstance,eax
  46.  
  47. push NULL
  48. push OFFSET lpdword
  49. push 20h
  50. push OFFset cadena2
  51. push hInstance
  52. call WriteFile
  53.  
  54.  
  55. call ExitProcess
  56. end start
  57.  
  58.  

POngo el codigo por si ves algo mal. cadena2      "dd 20h", no es necesario, vd?


Citar
No, los ejecutables suelen tener una direccion de carga unica que es repestada por el loader de Windows, proba a ponerle la direccion base de Kernel32 o NTDLL y vas a ver lo que pasa ...

Y el que se carguen 2 programas a la vez, y no se pisen al cargarse en la misma direccion (0040100), es por el tema de la memoria virtual, vd?

22
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Viernes 15 de Septiembre de 2006, 02:45 »
Gracias, y me funciona prefectamente el programa, bueno solo un pequeño detalle...
Que cuando intenta mostrar por la shell la cadena que introduci previamente se come algunas letras :
ej:
escribo: hola, que tal?
me sale:hola, (espacios)      tal?
...pero bueno al menos sale algo.. xD...


Respecto al tema de las excepciones. Supongo que el tema ira asi:
El control de excepciones del SO detecta una excepcion en el codigo(stack overflow, se agota la mem,asignacion a una variable un valor no valido...) , y entonces lanza la excepcion e intenta encontrar un manejador de excepciones dentro del ejecutable, que como no lo encuentra, aborta la ejecucion del programa y muestra el cuadro ese de la aplicacion.exe ha detectado un problema, indicandote el offset donde lo encontro. (no si te referias a eso con el manejador por defecto). Esto es lo que yo entiendo, corrijeme si estoy equivocado. Entonces utilice un hex editor, para borrar lo que se me antojara, sin borrar la cabecera, y luego lo abri con el debugger para ver ejemplos de excepcion generados por casualidad ( es bastante facil generar errores xD). El primero que encontre fue en esta linea "OR DWORD PTR DS:[EAX],EBP". Esto por lo visto es un error. Lo que me gustaria que me dijeras, son ejemplo de errores, y explicarlos brevemente, como este, para no cometerlos yo al programar.

Otra cosilla, que me viene a la cabeza, jejej, como es posible desbordar el buffer asignado a una variable?  EJ: pongo en la zona de .data algo asi : dd 2, y por muy larga que sea la cadena de caracteres que meto, no me salta el cuadrito de la excepcion. POr cierto, que significa declarar datos asi : dd 0h, porque se pone el 0h? es el tamaño del buffer? (no creo....)

Y la ultima cosa, (perdona por tantas preguntas xD,..) cuando un programa se carga en memoria, cada vez se carga a partir de un offset, que le asigna el SO vd? no siempre en el mismo... Entonces si por ej, te salta un cuadro de excepcion, indicandote el offset donde esta el error, si tu lo abres con un debugger, no tiene porque estar en el mismo offset, o si? Y cuando lo abres con un hex editor?



Saludos!

23
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Jueves 14 de Septiembre de 2006, 19:16 »
Cita de: "Eternal Idol"
La respuesta es simple: correctamente.
 :huh:
Me sigue dando error:
Código: Text
  1.  
  2. push STD_OUTPUT_HANDLE
  3. call GetStdHandle
  4. mov hInstance,eax
  5.  
  6.  
  7. push NULL
  8. push NULL
  9. push 0
  10. push OFFset cadena
  11. push hInstance
  12. call WriteFile
  13.  
  14.  

Al debugearlo, que de esa manera me ayuda, y hasta te dice el orden el que hay que meter los parametros, me devuelve en eax un handle con el valor 00000, que ya es raro.. lugo lei donde me dijiste que lpNumberOfBytesWritten y lpOverlapped no pueden valer los 2 NULL. En fin, el codigo debe ser bastante sencillo xD... Aunque en la pagina que me diste esta todo en ingles,  tampoco tengo soltura para el ingles y ademas las funciones apis estan para otros lenguaje, aunque supongo que dara igual...

4.ok, esque ayer lo probe y no me funcionaba, y hoy, misteriosamente si :D

BUeno, y ya, te pregunto otra cosa a ver si me vas despejando las dudillas que tengo, jejej..
Cuando te sale el cuadro ese de tuaplicacion.exe a detectado un problema y debe cerrarse, a que puede deberse? Quiero decir, que cuales son las causas fundamentales? Por ej, una de ellas, seria el stack overflow, declarar una variable de un tamaño y meterle un tamaño mayor, entonces se borra el valor de retorno de la funcion, y se sigue ejecutando codigo, y entonces te saldria el cuadrito ese. PEro lo que no entiendo es, el que ejecuta, para que detecte un problema y se cierre, que secuencia de codigo, por ej. Es igual que cuando no ponia el ret al final de programa para devolverle el control al SO, que seguia ejecutando codigo y provocaba un error.

Saludos.

24
ASM (Ensamblador) / Re: Ayuda En Asm ( 2 ) :)
« en: Jueves 14 de Septiembre de 2006, 03:35 »
3. ok, jeje, me equivoque, nose porque puse system, queria poner printf como tu dices.
Intente utilizar WriteFile y GetStdHandle, pongo el code( esta vez utilizo call, jeje):
Código: Text
  1.  
  2. ....
  3. .data
  4. ....
  5. cadena      db &#34;hola, xD&#34;,0
  6. .....
  7. .....
  8. push NULL
  9. call GetStdHandle
  10.  
  11. push OFFset cadena
  12. push eax
  13. call WriteFile
  14. ......
  15.  
  16.  
Y me da un error en tiempo de ejecucion (ya puse el ret :P). MI pregunta es, como debo  poner el codigo para que me funcione? Y para que hay que hacer un push NULL en muchas ocasiones antes de llamar a la funcion? Esque lo vi en muchos codigos en internet y nose el porque hay que pornerlo..

Y el de ReadFile?No sabes de algun sitio donde te diga los parametros que hay que meterles a las funciones y como hay que utilizarlas?

4. Otra cosa, como se ponen las etiquetas y sus referencias en masm para 32 bits?
Esque cuando programaba para win16, bastaba con poner las etiquetas asi:
:etiqueta, y te referias a ella con su nombre, jmp etiqueta... como se hace ahora?

Y otra pregunta, que significa el "NOP" que pone muchas veces cuando debugeas un codigo??

Saludos.

25
ASM (Ensamblador) / Ayuda En Asm ( 2 ) :)
« en: Miércoles 13 de Septiembre de 2006, 04:18 »
Bueno, hice lo q me dijiste Eternal Idol, y me baje el Masm32, y me lei un manual, pero tengo algunas dudas.

1.
Este codigo tan secillo me compila bien, pero sin embargo me da un error en timepo de ejecucion, la tipica ventanita de windows diciendo q aplicacion.exe a detectado un problema y debe cerrarse...
Código: Text
  1.  
  2. .386
  3. .model flat,stdcall
  4. option casemap:none
  5.  
  6. .data
  7. .code
  8. start:
  9. mov eax,04447h
  10. end start
  11.  
  12.  
A q se puede deber?

2.

Mira este code, funciona sin problema pero me gustaria interpretarlo al depurarlo (utilizo ollydbg).
Código: Text
  1.  
  2. .386
  3. .model flat,stdcall
  4. option casemap:none
  5. include &#092;masm32&#092;include&#092;windows.inc
  6. include &#092;masm32&#092;include&#092;kernel32.inc
  7. includelib &#092;masm32&#092;lib&#092;kernel32.lib
  8. include &#092;masm32&#092;include&#092;user32.inc
  9. includelib &#092;masm32&#092;lib&#092;user32.lib
  10.  
  11. .data
  12. MsgBoxCaption  db &#34;msgboX&#34;,0
  13. MsgBoxText       db &#34;¿hola, que tal?&#34;,0
  14.  
  15. .code
  16. start:
  17. invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
  18. invoke ExitProcess, NULL
  19. end start
  20.  

Esto es lo que me sale debugeando



Podrian explicarme lo que significa cada linea del debugeo para ver como trabaja un debug? A ver, las instrucciones mov, call etc, estiendo para que sirven , pero no como debugea el codigo el debugger. POr ej no entiendo para k pone push 0, o push 1.0040... ( no entiendo que es el putno ni los parametros), call <jmp..., y los dos Jmp del final, que no entiendo a que vienen...

3. Que funcion del SO tengo q utilizar para imprimir una cadema de caracteres por la linea de comandos, como si fuera el system("cadena"); del lenguaje C?

4. Y que funcion para almacenar una cadena de caracteres q escriba por el teclado?

Saludos.

Páginas: [1] 2