Autor Tema: [VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]  (Leído 3321 veces)

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

RHL

  • Bytes
  • *
  • Mensajes: 26
  • Reputación: +3/-15
    • Ver Perfil
[VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]
« en: Diciembre 08, 2011, 09:35:40 pm »
Agradecimientos a:
   Karcrack
   Cobein

Si no hubiera sido por ayudarme a entender como funciona no hubiera podido lograrlo :)
la funcion es un putmem x bytes, lo que hace es insertar X bytes a una posicion de memoria indicada, esta funcion que hice
es identica a las funciones:

Declare Sub PutMem1 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Byte)
Declare Sub PutMem2 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Integer)
Declare Sub PutMem4 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Long)
Declare Sub PutMem8 Lib "msvbvm60" (Ptr As Any, ByVal NewVal As Currency)

salvo que esta se pueden insertar cualquier cantidad de bytes, que es el tercer parametro el numero de bytes que uno debe
de indicar a insertar, tambien hay que tomar en cuenta como estan almacenados los bytes en la memoria eso es si es microprocesador de uno es little o big...


Código: (VB) [Seleccionar]
Option Explicit
Private Declare Function CallWindowProc Lib "USER32" Alias "CallWindowProcW" (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()
    ' By RHL no quitar texto
    Dim test As String: test = "Test de XXXXXX en inline asm!"
    Dim newp As String:         newp = "PUTMEM"
    
    Dim A As Long:A = &H101010
    Dim B As Byte:B = &H20
    
    Call vASM_PUTMEMx(VarPtr(A), VarPtr(B), 1)
    MsgBox A

    Call vASM_PUTMEMx(StrPtr(test) + 16, StrPtr(newp), 12)
    MsgBox test
    
End Sub

'Declare Sub PutMemx Lib "msvbvm60" (ptr As Any, ByVal newval As Byte)
Private Sub vASM_PUTMEMx(ByVal ptr As Long, ByVal newval As Long, ByVal nB As Long)
    Dim Acode(25)   As Byte: Acode(25) = &HC3
    
    Acode(17) = &H8A: Acode(18) = &H10: Acode(19) = &H88: Acode(20) = &H17
    Acode(21) = &H40: Acode(22) = &H47: Acode(23) = &HE2: Acode(24) = &HF8

    Dim i           As Long
    
    '       MOV EAX,OFFSET newval
    '       MOV EDI,OFFSET ptr
    '       XOR ECX,ECX
    '       MOV ECX,nB
    'INI:
    '       MOV DL,[EAX]
    '       MOV [EDI], DL
    '       INC EAX
    '       INC EDI
    '       LOOP INI
    

    Acode(0) = &HB8
    i = LongToByte(newval, Acode(), i + 1)
  
    Acode(5) = &HBF
      
    i = LongToByte(ptr, Acode(), i + 1)
    Acode(10) = &H33: Acode(11) = &HC9
    
    Acode(12) = &HB9
    i = LongToByte(nB, Acode(), i + 3)

    Call CallWindowProc(ByVal VarPtr(Acode(0)), 0&, 0&, 0&, 0&)
End Sub

'by BlackZeroX
Private Function LongToByte(ByVal lLong As Long, ByRef bReturn() As Byte, Optional i As Integer = 0) As Long
    bReturn(i) = lLong And &HFF
    bReturn(i + 1) = (lLong And &HFF00&) \ &H100
    bReturn(i + 2) = (lLong And &HFF0000) \ &H10000
    bReturn(i + 3) = (lLong And &HFF000000) \ &H1000000
    LongToByte = i + 4
End Function
' By RHL no quitar texto

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:[VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]
« Respuesta #1 en: Diciembre 08, 2011, 09:38:18 pm »
Hola amigo perdon mi ignorancia pero que esto? Soy curioso y me gusta aprender....

Gracias
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

RHL

  • Bytes
  • *
  • Mensajes: 26
  • Reputación: +3/-15
    • Ver Perfil
Re:[VB+ASM][SRC] PUTMEMx - PUTMEM1,2,4,8,... [ASM inline]
« Respuesta #2 en: Diciembre 08, 2011, 09:47:34 pm »
esta es una funcion usa la tecnica asm inline osea que ejecuta codigo de asm en vb , esto puede insertar Bytes en memoria
osea mas que todo sobre variables en cualquier tipo de variable ya que en la memoria viene siendo lo mismo pero tambien
hay que tomar encuenta digamos en las variable de cadenas ya que internamente las cadenas de vb son de unicode...
como escribi, funciona como las apis que mencione, excepto que uno debe de saber adonde insertar los bytes ya que
como escribe directamente a la memoria