Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - BlackZeroX

#1181
macro de C/C++ muy usada con el API SendMessage().

Código (vb) [Seleccionar]


Function makelParam(ByVal L As Integer, ByVal U As Integer) As Long
  makelParam = L Or (U * &H10000)
End Function



Dulces Lunas!¡.
#1182
Hay una clase de autorun que no son detectados... desde que libere este algoritmo(Nada nuevo realmente), muchos gusanos al momento que los decompilo veo que lo usan... y uno de ellos me jodio la pc ¬¬".

Te dejo los enlaces para que los analices, lo unico que hace es que genera un autorun normal solo que con basura...

* Autorun.inf Indetectable <~ (mi web)
* Autorun.inf Indetectable <~ (este foro)
* Google

-------- Por otro lado lo de los atribtos se realizan con APIS del Sistema, dichas apis se SETEAN (ASIGNAN) con:

SetFileAttributes (En la pagina explica la api)
Dichas apis las puedes llamar en cualquier lenguaje de progracion, C/C++, Java, VB, Perl, ASM, etc... este en el ambito de programar... pero si solo quieres consultar abrir editar es decir de ya pero sin programar nada tienes CMD. y este comando:


attrib -h -s -r autorun.inf


Si quieres consultar los parametros


attrib /?


Cada parametro debera estar separado por un espacio, si la ruta del archivo contiene espacios debe estar entre comillas


attrib -h -s -r "c:/cada quien/autorun.inf"


P.D.: Hay algunos tercos en el hilo que seguro no han leido bien el 1er post...

Dulces Lunas!¡.
#1183
Cita de: naderST en  7 Agosto 2011, 07:29 AM
Al parecer solo puedes acceder a punteros de manera privada en las clases de esta manera:

Existen tambien los procesos friend...

Temibles Lunas!¡.
#1184
@Raul100

Dim iVal as integer
Dim pArray(10) as long

copymemory byval varptr(pArray(0)), byval varptr(iVal), 10 <--- podria ocacionar un crash

Lo que pasa es simple. un programa se carga completamente de manera contigua = como esta en el HD.

Cada funcion esta en bloques...

Una forma en la que lopuedes ver seria:

| Headers y otras cosas.. | Funcion 0 | Funcion 1 | ... |

Por lo tanto cuando corres el codigo anterior SI y SOLO SI "ival" le sigue otra declaracion de variable copia = su contenido, de lo contrario seran instrucciones de la funcion.

Dulces Lunas!¡.
#1185
.

usa la ultima funcion que postee (1.1 la que esta en geshi) la 1ra no sirve del todo bien.

Código (vb) [Seleccionar]


Private Sub Form_Load()
    MsgBox isNumeric_Black("12,23,34")
    MsgBox IsNumeric("12,23,34")
End Sub



OutPut

Código (Vb) [Seleccionar]


Verdadero     Verdadero



Deberias usar tambien Strins con con Spacios en Blanco.

Temibles Lunas!¡.
#1186
No usar esta funcion para el test, usar la 2.1

http://foro.elhacker.net/programacion_visual_basic/reto_reemplazo_de_funcion_isnumeric-t336067.0.html;msg1651317#new


Actualizo el codigo a una version 1.1...




Public Function isNumeric_Black(ByRef sString As String) As Boolean
'   //  Version 1.1 (Fixed)
Dim lChar   As Long
Dim lPos    As Long
Dim lLn     As Long
Dim lSwich  As Long     '   //  Switcher

Const PUNTO_DECIMAL As Long = &H1
Const SIGNO_SUMA    As Long = &H2
Const SIGNO_RESTA   As Long = &H4

   lLn = Len(sString)
   If (lLn = 0) Then Exit Function
   For lPos = 1 To lLn
       lChar = Asc(Mid$(sString, lPos, 1))     '   //  <--Esta linea puede reducir la velocidad del algoritmo..
       If (lChar >= 48 And lChar <= 57) Then
           isNumeric_Black = True
       Else
           Select Case lChar
               Case 46            '   //  "."  Solo 1
                   If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                   lSwich = (lSwich Or PUNTO_DECIMAL)
                   
               Case 43            '   //  "+" Solo 1
                   If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
                   If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
                   If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                   lSwich = (lSwich Or SIGNO_SUMA)
                   
               Case 45            '   //  "-"  Solo 1
                   If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
                   If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
                   If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                   lSwich = (lSwich Or SIGNO_RESTA)
                   
               '   //  Espacio, Tabulador, (13 + 10) = vbNewLine
               Case 32, 9, 13, 10, 11, 12, 36, 38, 160   '   //   Despues del 10 son otros Espacios en Blanco
                   If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
                   
               Case Else
                   Exit For
                   
           End Select
       End If
   Next
End Function



Nuevo Codigo de test...



Private Sub Form_Load()
Dim i As Integer

   Debug.Print isNumeric_Black("0"),
   Debug.Print isNumeric("0")
   
   For i = 0 To 255
       If (isNumeric_Black(Chr(i) & "0") <> isNumeric(Chr(i) & "0")) Then
           Debug.Print isNumeric_Black(Chr(i) & "0"); isNumeric(Chr(i) & "0")
           Debug.Print Chr(i); i
       End If
   Next i
   
   Debug.Print isNumeric_Black("+0."),
   Debug.Print isNumeric("+0.")
   
   Debug.Print isNumeric_Black("+.  0"),
   Debug.Print isNumeric("+.  0")
   
   Debug.Print isNumeric_Black("+"),
   Debug.Print isNumeric("+")
   
   Debug.Print isNumeric_Black("+  0"),
   Debug.Print isNumeric("+  0")
   
   Debug.Print isNumeric_Black(Chr(10) & "-0"),
   Debug.Print isNumeric(Chr(10) & "-0")
   
   Debug.Print isNumeric_Black("."),
   Debug.Print isNumeric(".")
   
   Debug.Print isNumeric_Black(vbTab & " .+0"),
   Debug.Print isNumeric(vbTab & " .+0")
   
   Debug.Print isNumeric_Black(".0"),
   Debug.Print isNumeric(".0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0")
   
   Debug.Print isNumeric_Black(vbTab & Space(10) & vbNewLine & " +-+-.+.0"),
   Debug.Print isNumeric(vbTab & Space(10) & vbNewLine & " +-+-.+.0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0")

End Sub



Output:



Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero
Falso         Falso
Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero



Temibles Lunas!¡.
#1187
No usar esta funcion para el test, usar la 2.1

http://foro.elhacker.net/programacion_visual_basic/reto_reemplazo_de_funcion_isnumeric-t336067.0.html;msg1651317#new

Hace mucho que no participo en retos aqui dejo mi codigo.

Es mucho codigo pero trabaja rapido e identico que isNumeric de VB.



Public Function isNumeric_Black(ByRef sString As String) As Boolean
'   //  Version 1.0
Dim lChar   As Long
Dim lPos    As Long
Dim lLn     As Long
Dim lSwich  As Long     '   //  Switcher

Const PUNTO_DECIMAL As Long = &H1
Const SIGNO_SUMA    As Long = &H2
Const SIGNO_RESTA   As Long = &H4
Const ENTER_BEGIN   As Long = &H8
'Const ENTER_END     As Long = &H10 '   //  Sin uso...

   lLn = Len(sString)
   If (lLn = 0) Then Exit Function
   For lPos = 1 To lLn
       lChar = Asc(Mid$(sString, lPos, 1))      ' // <--- Esta linea es seguro que redusca la velocidad del algoritmo...
       Select Case lChar
           Case Is >= 48 And cChar <= 57
               isNumeric_Black = True
               
           Case 32
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
               
           Case 46            '   //  "."  Solo 1
               If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
               lSwich = (lSwich Or PUNTO_DECIMAL)
               
           Case 43            '   //  "+" Solo 1
               If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
               If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
               If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
               lSwich = (lSwich Or SIGNO_SUMA)
               
           Case 45            '   //  "-"  Solo 1
               If ((lSwich And SIGNO_SUMA) = SIGNO_SUMA) Then Exit Function
               If ((lSwich And SIGNO_RESTA) = SIGNO_RESTA) Then Exit Function
               If ((lSwich And PUNTO_DECIMAL) = PUNTO_DECIMAL) Then Exit Function
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
               lSwich = (lSwich Or SIGNO_RESTA)
               
           Case 9              '   //  vbTab       Se permite la cantidad que sea.
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN)
               
           Case 13
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then Exit Function
               lSwich = (lSwich Or ENTER_BEGIN)
               
           Case 10
               If ((lSwich And ENTER_BEGIN) = ENTER_BEGIN) Then lSwich = (lSwich Xor ENTER_BEGIN) Else Exit For
           
           Case Else
               Exit For
       End Select
   Next
End Function



Codigo completo de mi test:



Private Sub Form_Load()

   Debug.Print isNumeric_Black("+.0"),
   Debug.Print isNumeric("+.0")
   
   Debug.Print isNumeric_Black("+."),
   Debug.Print isNumeric("+.")
   
   Debug.Print isNumeric_Black("+"),
   Debug.Print isNumeric("+")
   
   Debug.Print isNumeric_Black("-"),
   Debug.Print isNumeric("-")
   
   Debug.Print isNumeric_Black("."),
   Debug.Print isNumeric(".")
   
   Debug.Print isNumeric_Black(vbTab & " .+0"),
   Debug.Print isNumeric(vbTab & " .+0")
   
   Debug.Print isNumeric_Black(".0"),
   Debug.Print isNumeric(".0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " .+0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +.0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " +00.0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & vbNewLine & vbTab & vbNewLine & " --.0")
   
   Debug.Print isNumeric_Black(vbTab & Space(10) & vbNewLine & " +-+-.+.0"),
   Debug.Print isNumeric(vbTab & Space(10) & vbNewLine & " +-+-.+.0")
   
   Debug.Print isNumeric_Black(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0"),
   Debug.Print isNumeric(vbTab & vbNewLine & vbTab & Space(10) & vbTab & vbNewLine & " +.0")

End Sub



OutPut:



Verdadero     Verdadero
Falso         Falso
Falso         Falso
Falso         Falso
Falso         Falso
Falso         Falso
Verdadero     Verdadero
Falso         Falso
Verdadero     Verdadero
Verdadero     Verdadero
Falso         Falso
Falso         Falso
Verdadero     Verdadero



Temibles Lunas!¡.
#1188
@Raul100

Nesesitas ejecutar ASM Inline... para insertar los punteros de las variables...

http://foro.elhacker.net/programacion_visual_basic/asm_en_vb6_respuesta_a_myserik-t330062.0.html

NOTA: APICallByName.

Dulces Lunas!¡.
#1189
El api CopyMemory trabaja con PUNTEROS que es mas rapido, las Referencias usan los punteros al final y ocupan mas Stack ( creo que era este ) y mas espacio en memoria.

Ahora si espesificar X cantidad de Byte´s a leer, este debe ser el Minimo de ambos es decir:

Código (vb) [Seleccionar]


funcion min( byval lVal1 as long, byval lVal2 as long )
    if ( lval1 > lval2 ) min = lval2 else min = lval1
end funcion

...
CopyMemory pDest, pSrc, min( DestLen, SrcLen ) // Suponiendo que ya estan declarados los byval en la declaracion API.
...



Si se ingresa un valor superior o se escribe en secciones que no pertenecen a X bloque de bytes ya reservados se le llama "Segmentacion de memoria", ya que estas escribiendo en lugares donde NO deberias escribir/leer.

supongamos


Código (vb) [Seleccionar]


funcion min( byval lVal1 as long, byval lval2 as long )
    if ( lval1 > lval2 ) min = lval2 else min = lval1
end funcion


dim iInt as integer
dim lLong as long
'***
CopyMemory varptr(iInt), varptr(lLong), min( lenb(iInt), lenb(lLong) ) '// Correcto
'***
CopyMemory varptr(iInt), varptr(lLong), lenb(lLong) ) '// Incorrecto
' // Ocaciona una segmentacion de memoria y por ende u Crash, ya que se intentan copiar 4 bytes en un bloque donde caben solo 2 bytes.
'***
'Alternativas aun mas rapidas:
iInt = lLong and &FFFF '//Correcto
'***
iInt = lLong and &FFFFFFFF '// Incorrecto



Dulces Lunas!¡.
#1190
Programación C/C++ / Re: limits.h
4 Agosto 2011, 06:45 AM
.
los limites dependen de la arquitectura dela computadora, ya que no es lo mismo un int en x32 que en una de x64

Dulces Lunas!¡.