Autor
|
Tema: ASM + Visual Basic Duda Imprimir Numero (Leído 6,937 veces)
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
Hola, bueno ando estudiado sobre todo esto de ASM inline. y me gustaría saber como hago esta simple rutina d asm en vb. B8 mov eax, 00000080 C3 ret
a lo que me refiero es a imprimir o mostrar en un msgbox un simple numero en este caso 128.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
si ya tenes el metodo para ejecutar el asm inline, entonces podes tomar la direccion de msgbox y pasarla como parametro a tu funcion y pushear los parametros y llamar a esa funcion, acuerdate que si quieres mostrar un numero tendras que convertirlo a ANSI/UNICODE, esto no es: push number y call, tendras que almacenar el numero en un buffer y pasar la direccion del buffer, son cosas basicas
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
a lo que me refiero es a hacer que callwindowproc me retorne un entero en este caso 128. pero realmente no tengo muy claro como asignar los Opcode para coger el puntero.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
a lo que me refiero es a hacer que callwindowproc me retorne un entero en este caso 128. pero realmente no tengo muy claro como asignar los Opcode para coger el puntero.
coger un depurador, escribir las instrucciones ( esas están bien ), copiar los opcodes, hacer un array en VB con esos opcodes y llamar con callwindowproc ( esta funcion declara con un parametro solamente ) asi: variable = callwindowproc(addr array) variable tiene tu valor ahora.
|
|
« Última modificación: 10 Octubre 2012, 22:43 pm por RHL »
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
es que la verdad no estoy muy claro con el vb6 por eso ando pidiendo ayuda. en Autoit lo hago así. #cs B8 mov eax, 00000080 C3 ret #ce Local $Opcode = "0xB880000000C3" Local $Ret = DllCall("user32.dll", "int", "CallWindowProcW", _ "int", 0, _ "int", 0, _ "int", 0, _ "int", 0)
intente colocando los Op-code "B880000000C3" en array pero no me resulta.
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
es que la verdad no estoy muy claro con el vb6 por eso ando pidiendo ayuda. en Autoit lo hago así. #cs B8 mov eax, 00000080 C3 ret #ce Local $Opcode = "0xB880000000C3" Local $Ret = DllCall("user32.dll", "int", "CallWindowProcW", _ "int", 0, _ "int", 0, _ "int", 0, _ "int", 0)
intente colocando los Op-code "B880000000C3" en array pero no me resulta. Option Explicit Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Sub Form_Load() Dim arr(8) As Byte Dim mret As Long arr(0) = &HB8 arr(1) = &H80 arr(2) = &H0 arr(3) = &H0 arr(4) = &H0 arr(5) = &HC2 arr(6) = &H10 mret = CallWindowProc(VarPtr(arr(0)), 0, 0, 0, 0) MsgBox mret End Sub no recuerdo como era para declara una funcion con un parametro pero se puede, tengo años de no usar vb
|
|
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
Option Explicit
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Sub Form_Load() Dim arr(8) As Byte Dim mret As Long
arr(0) = &HB8 arr(1) = &H80 arr(2) = &H0 arr(3) = &H0 arr(4) = &H0 arr(5) = &HC2 arr(6) = &H10
mret = CallWindowProc(VarPtr(arr(0)), 0, 0, 0, 0) MsgBox mret
End Sub
no recuerdo como era para declara una función con un parámetro pero se puede, tengo años de no usar vb
huy que tonto soy :S se me había olvidado & muchas gracias RHL, me siento algo tonto :S ya me iba a funcionar jajaja. algo mas porque esto arr(5) = &HC2 arr(6) = &H10 en vez de C3?
|
|
« Última modificación: 10 Octubre 2012, 23:10 pm por Danyfirex »
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
huy que tonto soy :S se me había olvidado & muchas gracias RHL, me siento algo tonto :S ya me iba a funcionar jajaja. algo mas porque esto arr(5) = &HC2 arr(6) = &H10 en vez de C3? cuando retornas debes de eliminar los parametros que pusheaste en el retorno, aunque con este codigo funcionara con c3 es buen habito siempre eliminarlos, de lo contrario despues estos son dolores de cabeza cuando hay call a otras funciones dentro del asm inline, lo digo por experiencia
|
|
« Última modificación: 10 Octubre 2012, 23:15 pm por RHL »
|
En línea
|
|
|
|
Danyfirex
Desconectado
Mensajes: 493
My Dear Mizuho
|
cuando retornas debes de eliminar los parametros que pusheaste en el retorno, aunque con este codigo funcionara con c3 es buen habito siempre eliminarlos, de lo contrario despues estos son dolores de cabeza cuando hay call a otras funciones dentro del asm inline, lo digo por experiencia
mmm ya veo. lo tomare en cuenta. bueno ahora estudiar mas a fondo ASM. Muchas Gracias por la solución RHL me pase varios días en fracaso por esto. saludos y gracias Compa.
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Visual Code - Programacion En Visual Basic - Numero 1
Programación Visual Basic
|
eM.
|
6
|
3,225
|
8 Mayo 2006, 01:20 am
por Zinc
|
|
|
Visual Code - Programacion en Visual Basic - Numero 2 -
Programación Visual Basic
|
eM.
|
6
|
3,190
|
8 Junio 2006, 01:10 am
por JuszR
|
|
|
COMO IMPRIMIR UNA BASE DE DATOS EN FORMAS DE TIKED DESDE VISUAL BASIC
Programación Visual Basic
|
MUSVID
|
2
|
3,137
|
24 Noviembre 2006, 20:41 pm
por R-Q-X
|
|
|
[DUDA] Imprimir texto X veces - Visual Basic [SOLUCIONADO]
Programación Visual Basic
|
Siquillote
|
2
|
3,815
|
2 Enero 2011, 00:01 am
por Siquillote
|
|
|
DUDA CON VISUAL BASIC NÚMERO DE DÍGITOS MÁXIMOS RANDOM
Programación Visual Basic
|
DeIMachine
|
0
|
1,473
|
18 Abril 2014, 21:00 pm
por DeIMachine
|
|