Autor
|
Tema: problema con Interfaz (Leído 8,336 veces)
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
hice este codigo y pretendo mostrar una cadena pero me sale error alguien me ayuda? format PE GUI 4.0 entry start
include 'c:\FASM\INCLUDE\win32a.inc'
ID_CAPTION = 101 ID_MESSAGE = 102
section '.code' code readable executable
start: invoke GetModuleHandle,0 invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
proc DialogProc hwnddlg,msg,wparam,lparam cmp [msg],WM_INITDIALOG je .proceso cmp [msg],WM_COMMAND je .funcion cmp [msg],WM_CLOSE je .cerrar xor eax,eax jmp .finish
.funcion: cmp [wparam],BN_CLICKED shl 16 + IDCANCEL je .cerrar cmp [wparam],BN_CLICKED shl 16 + IDOK jne .proceso
.cerrar: invoke EndDialog,[hwnddlg],0 .proceso:
invoke SetDlgItemText,[hwnddlg],ID_MESSAGE,'hola'
.finish: ret endp
section '.data' readable writeable
flags dd ? caption rb 40h message rb 100h _outhandle dd ? _written dd ? buscado dd ? wfd WIN32_FIND_DATA handle dd ? encontrado dd ?
;====================IMPORTS=============================================== section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\ user,'USER32.DLL'
import kernel,\ AllocConsole, 'AllocConsole',\ GetStdHandle, 'GetStdHandle',\ WriteConsole, 'WriteConsoleA',\ ReadConsole, 'ReadConsoleA',\ ExitProcess, 'ExitProcess',\ WriteFile,'WriteFile',\ lstrlen,'lstrlen',\ FindFirstFile,'FindFirstFileA',\ FindNextFile,'FindNextFileA',\ FindClose,'FindClose',\ GetModuleHandle,'GetModuleHandleA',\ lstrcat, 'lstrcat'.\
import user,\ DialogBoxParam,'DialogBoxParamA',\ SetDlgItemText,'SetDlgItemTextA',\ GetDlgItemText,'GetDlgItemTextA',\ SendDlgItemMessage ,'SendDlgItemMessageW',\ LoadIcon , 'LoadIconA',\ SendMessage , 'SendMessageA',\ AnimateWindow, 'AnimateWindow',\ SetFocus , 'SetFocus',\ GetDlgItemInt, 'GetDlgItemInt',\ SetDlgItemInt, 'SetDlgItemInt',\ wsprintf, 'wsprintfA',\ MessageBox, 'MessageBoxA',\ EndDialog,'EndDialog'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,\ 37,LANG_ENGLISH+SUBLANG_DEFAULT,creacion
dialog creacion,'LISTADOR DE ARCHIVOS',70,70,190,175,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME dialogitem 'STATIC','&DIRECTORIO:',-1,10,10,70,8,WS_VISIBLE dialogitem 'EDIT','',ID_CAPTION,10,20,170,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP dialogitem 'STATIC','&CONTENIDO:',-1,10,40,70,8,WS_VISIBLE dialogitem 'EDIT','',ID_MESSAGE,10,50,170,100,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL dialogitem 'BUTTON','OK',IDOK,85,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON dialogitem 'BUTTON','C&ancel',IDCANCEL,135,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON enddialog
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Cuando tengas excepciones no controladas como es el caso usa el WinDbg para investigar. Aca podes ver rapidamente, extracto de comando kb: 000cfc04 00401060 007c05d4 00000066 616c6f68 USER32!SetDlgItemTextA+0x21 000cfc18 74dd62fa 007c05d4 00000110 002a22ac image00400000+0x1060 0:000> db 000cfc04 000cfc04 18 fc 0c 00 60 10 40 00-d4 05 7c 00 66 00 00 00 ....`.@...|.f... 000cfc14 68 6f 6c 61 44 fc 0c 00-fa 62 dd 74 d4 05 7c 00 holaD....b.t..|. 000cfc24 10 01 00 00 ac 22 2a 00-00 00 00 00 1a 10 40 00 ....."*.......@. 000cfc34 cd ab ba dc 01 00 00 00-01 00 00 00 1a 10 40 00 ..............@. 000cfc44 c0 fc 0c 00 df f9 df 74-1a 10 40 00 d4 05 7c 00 .......t..@...|. 000cfc54 10 01 00 00 ac 22 2a 00-00 00 00 00 b7 a9 a8 04 ....."*......... 000cfc64 00 00 00 00 10 01 00 00-80 30 b1 00 24 00 00 00 .........0..$... 000cfc74 01 00 00 00 00 00 00 00-00 00 00 00 30 00 00 00 ............0... 'hola' esta en la pila como tercer parametro, empujaste esos 4 caracteres cuando lo que necesitas empujar es un PUNTERO a una CADENA (serie de caracteres con su 0 terminador). Despues tenes un stack overflow, procesas WM_INITDIALOG y al llamar a SetDlgItemText generas un WM_COMMAND, este lo procesas saltando de nuevo a .proceso ... y asi hasta que se agota la pila, no saltes a proceso desde .funcion y pensa de nuevo la logica del programa. Aca algo al respecto: https://groups.google.com/forum/#!topic/comp.lang.asm.x86/t3MPZkJ8kCcInsisto: no se puede correr cuando no se sabe gatear ... tenes que empezar desde cero.
|
|
|
En línea
|
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
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
este es mi avance lei la documentacion pero no logre que funciones pero bueno seguire tu consejo y probare con WinDbg format PE GUI 4.0 entry start
include 'c:\FASM\INCLUDE\win32a.inc'
ID_CAPTION = 100 ID_MESSAGE = 102
section '.code' code readable executable
start: invoke GetModuleHandle,0 invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
proc DialogProc hwnddlg,msg,wparam,lparam cmp [msg],WM_INITDIALOG je .funcion cmp [msg],WM_COMMAND je .funcion cmp [msg],WM_CLOSE je .finish xor eax,eax jmp .cerrar
.funcion: cmp [wparam],BN_CLICKED shl 16 + IDOK jne .proceso cmp [wparam],BN_CLICKED shl 16 + IDCANCEL je .finish
.proceso:
invoke SetDlgItemText,[hwnddlg],ID_MESSAGE,[prueba]
jmp .cerrar .finish: invoke EndDialog,[hwnddlg],0 .cerrar: ret endp
section '.data' readable writeable
flags dd ? caption rb 40h message rb 100h _outhandle dd ? _written dd ? buscado dd ? wfd WIN32_FIND_DATA handle dd ? encontrado dd ? prueba dd 'hola',0
;====================IMPORTS=============================================== section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\ user,'USER32.DLL'
import kernel,\ AllocConsole, 'AllocConsole',\ GetStdHandle, 'GetStdHandle',\ WriteConsole, 'WriteConsoleA',\ ReadConsole, 'ReadConsoleA',\ ExitProcess, 'ExitProcess',\ WriteFile,'WriteFile',\ lstrlen,'lstrlen',\ FindFirstFile,'FindFirstFileA',\ FindNextFile,'FindNextFileA',\ FindClose,'FindClose',\ GetModuleHandle,'GetModuleHandleA',\ lstrcat, 'lstrcat'.\
import user,\ DialogBoxParam,'DialogBoxParamA',\ SetDlgItemText,'SetDlgItemTextA',\ GetDlgItemText,'GetDlgItemTextA',\ SendDlgItemMessage ,'SendDlgItemMessageW',\ SendMessage , 'SendMessageA',\ AnimateWindow, 'AnimateWindow',\ wsprintf, 'wsprintfA',\ MessageBox, 'MessageBoxA',\ EndDialog,'EndDialog'
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,\ 37,LANG_ENGLISH+SUBLANG_DEFAULT,creacion
dialog creacion,'LISTADOR DE ARCHIVOS',70,70,190,175,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME dialogitem 'STATIC','&DIRECTORIO:',-1,10,10,70,8,WS_VISIBLE dialogitem 'EDIT','',ID_CAPTION,10,20,170,13,WS_VISIBLE+WS_BORDER+WS_TABSTOP dialogitem 'STATIC','&CONTENIDO:',-1,10,40,70,8,WS_VISIBLE dialogitem 'EDIT','',ID_MESSAGE,10,50,170,100,WS_VISIBLE+WS_BORDER+WS_TABSTOP+ES_AUTOHSCROLL dialogitem 'BUTTON','OK',IDOK,85,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON dialogitem 'BUTTON','C&ancel',IDCANCEL,135,150,45,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON enddialog
COMO MOSTRAR VARIAS LINEAS EN DIALOG BOX CUANDO INTENTO MOSTRAR VARIAS LINEAS SE SOBRE ESCRIBE UNO SOBRE OTRO AYUDA !!! o tendria que concatenar para que sea una sola cadena?
|
|
« Última modificación: 7 Junio 2014, 11:08 am por Eternal Idol »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
No solucionaste ninguno de los problemas anteriores, el programa sigue generando dos excepciones no controladas. Deberias hacerte cargo de eso antes de intentar mostrar mas de una linea en un EDIT, ese control muestra texto, asi que si, tenes que concatenar y usar saltos de linea.
|
|
|
En línea
|
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
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
no existe alguna posibilidad de mostrar en dialog box sin concatenar todas las lineas?
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Podrias usar otro control en lugar de EDIT, un LISTBOX por ejemplo. Esto no tiene nada que ver con assembly sino que es un uso elemental de la API de Windows. Antes de volver a consultar repasa todos estos tutoriales: http://win32assembly.programminghorizon.com/tutorials.html
|
|
|
En línea
|
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
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
Yo te pase el mismo enlace DeviiAC, ahí tenes si o si la solución, y en español si así lo prefieres... Saludos!
|
|
|
En línea
|
|
|
|
bengy
Desconectado
Mensajes: 501
mis virtudes y defectos son inseparables
|
gracias Vaagish y Eternal Idol por toda la ayuda!!!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
De nadas
|
|
|
En línea
|
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
|
|
|
Vaagish
Desconectado
Mensajes: 875
|
De nada! Suerte!! Saludos!
|
|
|
En línea
|
|
|
|
|
|