elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Sobre carga de la CPU, valor incorrecto en EAX?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sobre carga de la CPU, valor incorrecto en EAX?  (Leído 5,203 veces)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Sobre carga de la CPU, valor incorrecto en EAX?
« en: 18 Abril 2012, 01:42 am »

hola gente, bueno hice este codigo y trabaja exactamente como yo quiero que haga, el problema es que
la CPU se sobrecarga, llega al 50% cuando posiciono el cursor sobre un control creado y no encuentro
del PORQUE lo hace : P
por favor ayuda! ya revise la documentacion y devuelvo los valores que pide : P
depurara el programa si supiera que hay un error pero el programa no se cuelga ni nada, al parece esta mal estructurado , gracias!



Código
  1. .386
  2. .model flat,stdcall
  3. option casemap:none
  4.  
  5. include    \masm32\include\masm32rt.inc
  6.  
  7. myWNDPROC proto :HWND,:UINT,:WPARAM,:LPARAM
  8. WndProc proto :HWND,:UINT,:WPARAM,:LPARAM
  9. WinMain proto :DWORD,:DWORD
  10.  
  11. .data
  12.   ClassName db "mypaint",0
  13.   AppName   db "paint program",0
  14.  
  15. myclass db "Static",0
  16. sname db "statictohide",0
  17. sname2 db "statictohide2",0
  18.  
  19. hstatic dd 0
  20. hstatic2 dd 0
  21.  
  22. mysubclass dd 0
  23. returnclass dd 0
  24. .data?
  25.   hInstance HINSTANCE ?
  26.  
  27. .code
  28.  
  29. start:
  30. invoke GetModuleHandle, NULL
  31. mov    hInstance,eax
  32.  
  33. invoke WinMain, hInstance,NULL
  34. invoke ExitProcess,eax
  35.  
  36. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE
  37. LOCAL wc:WNDCLASSEX
  38. LOCAL msg:MSG
  39. LOCAL hwnd:HWND
  40.  
  41. mov   wc.cbSize,SIZEOF WNDCLASSEX
  42. mov   wc.style, CS_HREDRAW or CS_VREDRAW
  43. mov   wc.lpfnWndProc, OFFSET WndProc
  44. mov   wc.cbClsExtra,NULL
  45. mov   wc.cbWndExtra,NULL
  46. push  hInstance
  47. pop   wc.hInstance
  48. mov   wc.hbrBackground,COLOR_BTNFACE+1
  49. mov   wc.lpszMenuName,NULL
  50. mov   wc.lpszClassName,OFFSET ClassName
  51.  
  52. invoke LoadIcon,NULL,IDI_APPLICATION
  53. mov   wc.hIcon,eax
  54. mov   wc.hIconSm,eax
  55.  
  56. invoke LoadCursor,NULL,IDC_ARROW
  57. mov   wc.hCursor,eax
  58.  
  59. invoke RegisterClassEx, addr wc
  60. INVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
  61.           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
  62.           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
  63.           hInst,NULL
  64. mov   hwnd,eax
  65.  
  66. invoke ShowWindow, hwnd,SW_SHOWNORMAL
  67. invoke UpdateWindow, hwnd
  68.  
  69. .WHILE TRUE
  70. invoke GetMessage, ADDR msg,NULL,0,0
  71. .BREAK .IF (!eax)
  72. invoke TranslateMessage, ADDR msg
  73. invoke DispatchMessage, ADDR msg
  74. .ENDW
  75.  
  76. mov     eax,msg.wParam
  77. ret
  78. WinMain endp
  79.  
  80. myWNDPROC proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  81. LOCAL LEAVEAREA:TRACKMOUSEEVENT
  82.  
  83. .if uMsg==WM_MOUSEMOVE
  84. invoke ShowWindow,hWnd,SW_HIDE
  85.  
  86. mov edx,hWnd
  87. mov LEAVEAREA.cbSize,sizeof(TRACKMOUSEEVENT)
  88. mov LEAVEAREA.dwFlags,TME_HOVER or TME_LEAVE
  89. mov LEAVEAREA.dwHoverTime,1000
  90. mov LEAVEAREA.hwndTrack,edx
  91. invoke TrackMouseEvent,addr LEAVEAREA
  92.  
  93. .elseif uMsg==WM_MOUSELEAVE
  94. invoke ShowWindow,hWnd,SW_SHOW
  95. .else
  96. invoke CallWindowProc,mysubclass,hWnd,uMsg,wParam,lParam
  97. ret
  98. .endif
  99. xor eax,eax
  100. ret
  101. myWNDPROC endp
  102.  
  103. WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
  104. LOCAL LEAVEAREA:TRACKMOUSEEVENT
  105.  
  106. .IF uMsg==WM_DESTROY
  107. invoke SetWindowLong,mysubclass,GWL_WNDPROC,myWNDPROC
  108. invoke PostQuitMessage,NULL
  109.  
  110. .ELSEIF uMsg==WM_CREATE
  111.  
  112. invoke CreateWindowEx,NULL,addr myclass,addr sname,WS_VISIBLE or WS_CHILD or SS_NOTIFY, \
  113. 0h,0h,50h,50h,hWnd,NULL,hInstance,NULL
  114.  
  115. mov hstatic,eax ; save hanlde static control
  116.  
  117. invoke CreateWindowEx,NULL,addr myclass,addr sname2,WS_VISIBLE or WS_CHILD or SS_NOTIFY, \
  118. 60h,0h,50h,50h,hWnd,NULL,hInstance,NULL
  119.  
  120. mov hstatic2,eax
  121.  
  122. invoke SetWindowLong,hstatic,GWL_WNDPROC,myWNDPROC
  123. invoke SetWindowLong,hstatic2,GWL_WNDPROC,myWNDPROC
  124. mov mysubclass,eax
  125.  
  126.  
  127. .ELSE
  128. invoke DefWindowProc,hWnd,uMsg,wParam,lParam
  129. ret
  130. .ENDIF
  131.  
  132. xor eax,eax
  133. ret
  134. WndProc endp
  135. end start
  136.  


En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #1 en: 21 Abril 2012, 15:51 pm »

Citar
.else
      invoke CallWindowProc,mysubclass,hWnd,uMsg,wParam,lParam
      ret   
   .endif
      xor eax,eax
      ret
myWNDPROC   endp
No estoy seguro, pero ahi  por lo visto llamas al WndProc de mysubclass, cuando ya estas dentro del wndProc de mysubclass.
Es decir, RECURSIVIDAD.

Luego creas una Ventana de la clase mysubclass que jamas registras antes.

Creo que estas confundiendo dos conceptos, SUPERCLASING  y SUBCLASING aunque en realidad no necesitas de ninguno de los dos.
Código:
invoke	SetWindowLong,hstatic,GWL_WNDPROC,myWNDPROC
Lo digo mas que nada por esa linea.

Si estas tratando de crear  "componentes" personalizados como por ejemplo un selector de colores, te conviene empezar con una clase desde cero.


« Última modificación: 21 Abril 2012, 15:57 pm por _Enko » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #2 en: 21 Abril 2012, 18:14 pm »

bueno laverdad e probado de todo :P
usando DefWindowProc, CallwindowProc, diferentes resultados en EAX, y nada lo curioso en que solo cuando llamo a ShoWindow
sucede eso, si te fijas Enko si borras la linea de ShowWindow el programa corre normal : P estuve como 2 dias enteros probando de todo :S
En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #3 en: 21 Abril 2012, 18:29 pm »

http://win32assembly.online.fr/tut20.html

Fijate como se hace el subclassing, lo estas haciendo mal.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #4 en: 21 Abril 2012, 19:09 pm »

me parece que ya lo habia hecho, y no funciono, y lo e vuelto a hacer y no funciona :@
siempre se sobre carga la CPU
En línea

$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #5 en: 21 Abril 2012, 23:40 pm »

Hablo casi sin saber, pero.. porque no debuggeas para ver si no se convierte en Recursividad como dice _Enko? ahi le encontraras el fallo, tal vez no donde dice _Enko, pero tal vez en otro lado. Debuggeando le encontras la solucion facil, no es mucho codigo.
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #6 en: 21 Abril 2012, 23:48 pm »

Hablo casi sin saber, pero.. porque no debuggeas para ver si no se convierte en Recursividad como dice _Enko? ahi le encontraras el fallo, tal vez no donde dice _Enko, pero tal vez en otro lado. Debuggeando le encontras la solucion facil, no es mucho codigo.

no puede ser porque si elimino la linea de ShowWindow como e dicho el código funciona correctamente, seguramente hay algo malo
con los dos ShowWindow :P
En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #7 en: 21 Abril 2012, 23:51 pm »

Tambien esta mal que no llames los WindowProc originales de las ventanas si haces subclassing.

Lee el ejemplo de subclasing de iczelion, intenta reproducirlo, luego aplicalo a tu problema.


Si haces un componente nuevo, tienes que registrar la clase.
« Última modificación: 21 Abril 2012, 23:58 pm por _Enko » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #8 en: 22 Abril 2012, 00:17 am »

Enko me e leido todos los tutos de iczelion : P
de hecho hasta los codigos de la MSDN esta así muestra como un subclassing

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633570(v=vs.85).aspx

Un amigo logro resolver en problema pero usaba una y mil APIs : P
bueno no es eso en si, a mi lo que no llego a aceptar es porque no funciona como los demas, de hecho si quiero capturar
botones, estatico, listview, etc me funciona correctamente
En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Sobre carga de la CPU, valor incorrecto en EAX?
« Respuesta #9 en: 23 Abril 2012, 05:45 am »

citas MSDN, pero lo que estas citando es registro de clases nuevas con su windproc propio.
En tu ejemplo solo registras un componente, la ventana principal.
Insisto, no confundas clase de ventana nueva, con un subclassing.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Contadores de Visitas, sobre carga :p
Nivel Web
Castg! 1 2,586 Último mensaje 28 Enero 2010, 08:39 am
por jdc
sobre carga de metodos parte2
Java
Rijhording 1 2,303 Último mensaje 27 Abril 2010, 07:26 am
por monsefoster
Posicionamiento incorrecto en IE y Chrome « 1 2 »
Desarrollo Web
Riki_89D 13 6,656 Último mensaje 13 Noviembre 2010, 02:08 am
por Nakp
Sobre carga de operador [Visual Studio 2010]
Programación C/C++
Namida 6 5,006 Último mensaje 17 Diciembre 2010, 09:40 am
por Namida
Duda sobre mysql; ¿Se puede conocer el valor de un campo luego de insertarlo?
Bases de Datos
astinx 2 2,794 Último mensaje 10 Marzo 2012, 15:53 pm
por astinx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines