• Domingo 22 de Diciembre de 2024, 14:20

Autor Tema:  Ayuda En Asm ( 2 ) :)  (Leído 5884 veces)

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Ayuda En Asm ( 2 ) :)
« en: Miércoles 13 de Septiembre de 2006, 04:18 »
0
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 \masm32\include\windows.inc
  6. include \masm32\include\kernel32.inc
  7. includelib \masm32\lib\kernel32.lib
  8. include \masm32\include\user32.inc
  9. includelib \masm32\lib\user32.lib
  10.  
  11. .data
  12. MsgBoxCaption  db "msgboX",0
  13. MsgBoxText       db "¿hola, que tal?",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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #1 en: Miércoles 13 de Septiembre de 2006, 09:55 »
0
Cita de: "y0mism0"
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...

A q se puede deber?

No devolves el control al sistema de ninguna manera, el codigo que se ejecute despues de tu instruccion mov es indeterminado; si agregas un ret o como en el otro codigo un ExitProcess funcionara perfectamente.

Cita de: "y0mism0"
2.Mira este code, funciona sin problema pero me gustaria interpretarlo al depurarlo (utilizo ollydbg).

invoke es una directiva que sirve para que MASM se encargue por si solo de emitir el codigo necesario para una llamada de tipo stdcall. Este tipo de convencion de llamada hace el pasaje de parametros en la pila y el llamador es el encargado de limpiarla. Por lo tanto lo que ves son push's por cada uno de los parametros y un call. En cuanto a esos numeros son direcciones en hexadecimal de las cadenas de caracteres (supongo que tu ejecutable se llama 1 ...). Los saltos esos son un poco mas dificiles de explicar pero digamos que debido a las DLLs que usa Windows no necesitas direcciones fijas y eso se llena en tiempo de ejecucion. Si queres podes investigar mas sobre el formato PE para saber como funciona pero no te lo recomiendo todavia ...


Cita de: "y0mism0"
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?

system no imprime una cadena sino que intenta ejecutarla; printf si imprime una cadena y podes usar entre otras, como creo haberte dicho en el anterior hilo, WriteFile y GetStdHandle.

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

ReadFile entre otras.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #2 en: Jueves 14 de Septiembre de 2006, 03:35 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #3 en: Jueves 14 de Septiembre de 2006, 08:12 »
0
Cita de: "y0mism0"
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?

La respuesta es simple: correctamente. ¿Porque hay un push NULL? Bueno, NULL es en realidad 0, se le estara pasando 0 como primer parametro a esas funciones, asi de simple tambien.

Estas usando mal tanto GetStdHandle como WriteFile, al igual que ReadFile podes encontrar como usarlas en http://msdn.microsoft.com

Cita de: "y0mism0"
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?

Yo creo que siempre se hizo con etiqueta: asi que probalo asi jeje.

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

Nop es no-operation, basicamente no hace nada.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #4 en: Jueves 14 de Septiembre de 2006, 19:16 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #5 en: Jueves 14 de Septiembre de 2006, 19:27 »
0
Cita de: "y0mism0"
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...

Si te devuelve 0 es que hubo un error ... ¿Estas creando un programa de consola no? El parametro SUBSYSTEM del enlazador tiene que ser CONSOLE y no WINDOWS. La pagina esta en Ingles como todo, y la ayuda esta mas que nada orientada a C, es lo que hay ... si queres hacerlo en asm tenes que saber los dos lenguajes o pedir a alguien que te ayude. Como decis los dos no pueden valer NULL y ese es el error de tu programa, tenes que pasarle un puntero a una variable de tipo DWORD donde el ponga cuando logro escribir y ademas darle un tamaño del buffer de escritura que sea logico (estas pasandole que escriba 0 bytes ...).

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

Eso funciona siempre, hay que comprobar mejor.

Cita de: "y0mism0"
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?

Una excepcion no controlada.

Cita de: "y0mism0"
PEro lo que no entiendo es, el que ejecuta, para que detecte un problema y se cierre, que secuencia de codigo

Justamente ejecuta el manejador de excepciones por defecto.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #6 en: Viernes 15 de Septiembre de 2006, 02:45 »
0
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!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #7 en: Viernes 15 de Septiembre de 2006, 07:59 »
0
Cita de: "y0mism0"
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...

No se, pone el codigo del programa ... habra algo mal.

Cita de: "y0mism0"
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.

Si, baicamente funciona de esa manera. EAX en ese punto debe ser una direccion invalida. Si queres mas informacion busca SEH, yo puedo ayudarte con problemas pero no soy profesor.

Cita de: "y0mism0"
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....)

Esos numeros inicializan la variable a 0. Un overflow no tiene siempre que generar una excepcion ... depende que escribas y donde ...

Cita de: "y0mism0"
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?

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 ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #8 en: Viernes 15 de Septiembre de 2006, 18:03 »
0
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?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #9 en: Viernes 15 de Septiembre de 2006, 19:37 »
0
Cita de: "y0mism0"
POngo el codigo por si ves algo mal. cadena2      "dd 20h", no es necesario, vd?

cadena2      dd 20h<< Eso te lo inventaste ... con eso declaras una variable de tipo DWORD (4 bytes) cuyo valor al inicio es 0x20.

Para hacer un array de 20 bytes inicializados a 0 tenes que poner esto:
cadena2 db 20 dup(0)

Por otro lado le estas pasando un valor fijo al WriteFile, entonces escribira ese tamaño ... pese a que tu cadena sea menor ... pasale aunque sea un byte menos de tamaño asi la cadena termina en cero y no lo que haya justo despues ...

Cita de: "y0mism0"
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?

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

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #10 en: Sábado 16 de Septiembre de 2006, 03:33 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #11 en: Sábado 16 de Septiembre de 2006, 08:12 »
0
Cita de: "y0mism0"
Cual era la instruccion del entry point, y donde hay q situarla?

No se a que te referis con eso realmente.

Cita de: "y0mism0"
PUes cargue varios procesos con el olly, y se me cargan siempre en 00401000...

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 ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #12 en: Sábado 16 de Septiembre de 2006, 16:37 »
0
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.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #13 en: Sábado 16 de Septiembre de 2006, 20:59 »
0
Cita de: "y0mism0"
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.....

MASM usa por defecto la primera funcion de la seccion llamada .code; si queres podes usar /ENTRY:funcion como parametro al enlazador. Obviamente eso es totalmente dependiente del enlazador que uses ... en MASM es como te decia.

Cita de: "y0mism0"
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...

Tenes el privilegio SE_SHUTDOWN_NAME al ser administrador pero esta deshabilitado por defecto para todos los procesos. Fijate en la MSDN que viene el ejemplo de como apagar la PC donde muestra como habilitar este privilegio.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

y0mism0

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #14 en: Martes 19 de Septiembre de 2006, 00:37 »
0
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?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda En Asm ( 2 ) :)
« Respuesta #15 en: Martes 19 de Septiembre de 2006, 08:17 »
0
Cita de: "y0mism0"
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?
Pones esa instruccion primero y listo, la opcion /ENTRY es para el linker. Tenes la direccion de la MSDN en este mismo hilo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.