Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: S3kh en 30 Abril 2011, 00:51 am



Título: ASM 32Bits (Consola?)
Publicado por: S3kh en 30 Abril 2011, 00:51 am
De nuevo yo con mis inquietudes...

Es posible (Usando FASM), programar una aplicación de Consola?
Se puede usar interrupciones en FASM? Digamos, (Seguramente hablo guasadas para ustedes que la tienen mas clara que yo), puedo en vez de programar para 32bits usando APIS, usar en modo 16bits usando interrupciones o demás?


Y otro tema, (que hize en otro TH).
En ASM de 16bits, para crear un archivo tengo que hacer lo siguiente:

Poner 3C en AX
Poner en DS:DX el sector que contiene la cadena en ASCII de la ruta del archivo
Poner en CX los atributos del archivo
INT 21
Ahora bien, haciéndolo dede debug da:

Citar
-a100
jmp 125

-e 102 'RutaArchivo' 0a 0d '$'
-a125
MOV DX,0102
MOV CX,00
MOV AX,3C
INT 21H
INT 20H

Bueno, genero el .com y todo, y cuando lo ejecuto, no me crea el archivo. Estuve leyendo, y puede ser que tenga que ver con "modo protegido vs modo real"?

Ténganme paciencia, estoy dando los primeros pasos.

También, quiero que borren mi otro TH, ya que planteo una duda parecida acá. El TH es "Dudas asm 16bits".

Disculpen mi infinita ignorancia respecto a esto, y de antemano, mil gracias por la ayuda.


Título: Re: ASM 32Bits (Consola?)
Publicado por: Riki_89D en 30 Abril 2011, 02:36 am
Respecto a si es posible hacer una aplicacion de consola en FASM,si se puede,claro :)

y por lo de la creacion del archivo no lo se,alguiene aqui te giara mucho mejor que yo,ademas no uso ya interrupciones el DOS,y el debug de Windows lo uso poco po no decir NADA,pero en FAMS o cualquie otro ensamblador deberias pasar la direccion del arcvhios al registro de segmento DS mediante AX,y operar con la funcion del DOS,debes de buscar un poco mas en google...hay mucha inf de esto.


en MASM seria asin:

Crear archivo
Código
  1. ; Crear un archivo en ASM
  2.  
  3. .model small
  4. .stack 100h
  5. .data
  6.  
  7. nombre db "c:\tasm\bin\bogota.txt",00h ;especificar directorio del archivo
  8. maneja dw ?
  9. .code
  10. algo proc near
  11. mov ax,@data
  12. mov ds,ax
  13. mov ah,3ch
  14. mov cx,00
  15. lea dx,nombre
  16. int 21h
  17. jc salir
  18. mov maneja,ax
  19. salir: mov ax,4c00h
  20. int 21h
  21. endp
  22. end algo
  23.  


Escribir:
Código
  1. .model small
  2. .stack 100h
  3. .data
  4. nombre db "c:\tasm\bin\bogota.txt",00h
  5. texto db "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  6. maneja dw ?
  7. .code
  8. algo proc near
  9. mov ax,@data
  10. mov ds,ax
  11. mov ah,3ch
  12. mov cx,00
  13. lea dx,nombre
  14. int 21h
  15. jc salir
  16. mov maneja,ax
  17. mov cx,500
  18. nuevo: push cx
  19. mov ah,40h
  20. mov bx,maneja
  21. mov cx,25
  22. lea dx,texto
  23. int 21h
  24. pop cx
  25. loop nuevo
  26. mov ah,3eh
  27. mov bx,maneja
  28. int 21h
  29. salir: mov ax,4c00h
  30. int 21h
  31. endp
  32. end algo
  33.  


siento no poder ayudarte



Título: Re: ASM 32Bits (Consola?)
Publicado por: S3kh en 30 Abril 2011, 18:59 pm
Creo que entonces tengo que intentar entender lo de DS/CS, etc, porque realmente, no entiendo la funcionalidad, y estoy leyendo pero seguramente ya lo voy a entender. No entiendo realmente qué es. (Entiendo, pero mal por lo visto). Ahora examino bien bien los códigos.
Yo busqué mucho en google, pero es que realmente la idea de los registros de segmento que tengo soy muy "vagas". Se que en DS se guardan los datos, (O eso entendí yo), pero no sé como guardarlos ahí, no sé exactamente como funciona todo, digamos, es algo bastante estúpido, pero ahora voy a ojear ambos códigos y voy a seguir intentando.

Muchas gracias..
Y si alguien puede darme una manita con lo del debug o lo que fuere lo agradecería ETERNAMENTE.



Título: Re: ASM 32Bits (Consola?)
Publicado por: Riki_89D en 3 Mayo 2011, 20:17 pm
Nose si entendi bien la pregunta,si la pregunta es si se puede hacer una app de 32 bits de tipo consola no creo que se pueda....lo de DS/CS son registros de segmento.y en 32 bits no estan,es mas comodo.



saludos


Título: Re: ASM 32Bits (Consola?)
Publicado por: Иōҳ en 4 Mayo 2011, 07:11 am
si se puede en 32bits.


Título: Re: ASM 32Bits (Consola?)
Publicado por: Eternal Idol en 4 Mayo 2011, 09:09 am
Los libros no muerden, lean un poco, un poco nada mas y encontraran las respuestas.


Título: Re: ASM 32Bits (Consola?)
Publicado por: fary en 4 Mayo 2011, 20:34 pm
format PE Console

Lo unico que para entrada y salida de datos tendras que usar API, no puedes usar interrupciones.

salu2!


Título: Re: ASM 32Bits (Consola?)
Publicado por: _Enko en 19 Junio 2011, 00:19 am
Hasta puedes usar la C runtime si quieres.

Código:
format PE Console 
entry start  

include "%fasminc%\win32a.inc"
include "%fasminc%\macro\if.inc"



section ".data" data readable writeable  



szPause db "PAUSE",0


section ".code" code readable executable  
start:  
      
    
        cinvoke printf, szStr, szPause
 
        cinvoke system, szPause
    
        invoke  ExitProcess,0



section ".idata" import data readable writeable  

library kernel32, "kernel32.dll",\  
        user32,"user32.dll",\  
        msvcrt, "msvcrt.dll",\
        libmysql, "libmysql.dll"

include "%fasminc%\api\kernel32.inc"
include "%fasminc%\api\user32.inc"
include "%fasminc%\api\msvcrt.inc"


Si quieres usar la winapi en vez de c runtime
http://msdn.microsoft.com/en-us/library/ms682073(v=vs.85).aspx

BOOL WINAPI WriteConsole(
  __in        HANDLE hConsoleOutput,
  __in        const VOID *lpBuffer,
  __in        DWORD nNumberOfCharsToWrite,
  __out       LPDWORD lpNumberOfCharsWritten,
  __reserved  LPVOID lpReserved
);

solo que si usas la winapi, tienes que inicializar antes la consola.