fasm consola

Iniciado por .rn3w., 30 Mayo 2014, 06:34 AM

0 Miembros y 1 Visitante están viendo este tema.

Eternal Idol

Depuralo, si estas haciendo un programa para Windows con WinDbg, ya tenes todas las herramientas a mano, te toca trabajar para poder solucionarlo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

.rn3w.

#11
gracias... lo intentare
se que con esto mov ax,@DATA
                        mov ds,ax
guardo el segmento de datos pero me sale error para 32!!!

como lo soluciono?

_Enko

Y para que quieres guardar el segmento de datos en 32bit? Es como irrelevante.

.rn3w.

es que para 16 bits es obligatorio o me equivoco??? en 32 bits no lo es?

_Enko

Nunca programé para DOS así que ni idea. Pero en windows definitivamente nunca me hizo falta.
El problema que veo ademas que estas mezclando codigo 16 bit con 32bit, es que efectivamente hay un copy past alli.
Te diría que deseches el codigo y simplemente. Ya te he pasado una plantilla para crear una consola y inclusive para imprimir una cadena.
CitarMsg1  DB 'Introduzca el nombre:',0
Msg2  DB 'Total:$'
Msg1 es cadena que termina en NULLO como tiene que ser en Windows... pero la segunda en $ para DOS?

Dececha el copy past y escribe unas lineas, no matan, te lo aseguro :)

.rn3w.

#15
gracias por toda la ayuda que me dan, soy novato en asm, en serio gracias por todo.
y bueno borre todo y ahora estoy programando desde 0
asi que tengo mi primera duda... no puedo mostrar el nombre del primer elemento encontrado

este es mi codigo...


format PE console
entry start
include 'win32w.inc'

;======================================
section '.data' data readable writeable
;======================================

ASCIIZ DB '*.*',0
DTASeg DW ?

;=======================================
section '.code' code readable executable
;=======================================

start:
              xor eax,eax     ; limpio EAX
              mov ah,4eh      ; encuentro el primer archivo
              mov ecx,1Eh      ; obtengo el nombre del primer archivo
              mov edx,ASCIIZ
              ccall   [printf],edx




;====================================
section '.idata' import data readable
;====================================


library kernel,'kernel32.dll',\
       msvcrt,'msvcrt.dll' ,\user32,'user32.dll'

import user32,MessageBoxA,'MessageBoxA'

import  kernel,\
       ExitProcess,'ExitProcess'

import  msvcrt,\
       printf,'printf',\
       getchar,'_fgetchar'

Eternal Idol

¿Que hiciste ahora? ¿Copiaste parte del pasaje de parametros a int 21h y no la llamas? No podes mezclar ese codigo ... tenes que llamar a las funciones de la API de Windows que te dije usando stdcall.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

.rn3w.

#17
no te entiendo!!! creo que no has notado que soy novato

pero bueno gracias de todas formas


ejjejjeje se enojjo el de abajo!!!
por lo menos eso logre

Eternal Idol

Mirate los hilos con chincheta entonces, tenes que leer mucho para pasar de hacer copy/paste.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

.rn3w.

#19
gracias a todos por ayudar a este novato... pero estoy entendiendo de a poco

hice este codigo utilizando la api de win


format PE console
entry start

include 'win32ax.inc'

section '.code' code readable executable
 start:



       invoke AllocConsole
       invoke GetStdHandle, STD_OUTPUT_HANDLE
       mov [_outhandle], eax
       invoke  FindFirstFile,buscado,wfd
       invoke WriteConsole, [_outhandle],wfd , 13, _written, 0



section '.data' data readable writeable
 _outhandle    dd   ?
 _written      dd   ?
 buscado DB '*.*',0
 wfd        WIN32_FIND_DATA


section 'idata' import data readable writeable
 library kernel, 'KERNEL32.DLL'

 import kernel,\
        AllocConsole, 'AllocConsole',\
        GetStdHandle, 'GetStdHandle',\
        WriteConsole, 'WriteConsoleA',\
        ReadConsole, 'ReadConsoleA',\
        ExitProcess, 'ExitProcess',\
         WriteFile,'WriteFile',\
         lstrlen,'lstrlen',\
         FindFirstFile,'FindFirstFileA',\
         FindNextFile,'FindNextFileA',\
         FindClose,'FindClose'.\