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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 [10]
91  Programación / ASM / Cadenas en FASM en: 1 Mayo 2016, 18:37 pm
Hola, estoy desarrollando un compilador en Basic 6.0 y hasta ahora he logrado superar muchos obstaculos (procesamiento y traducción de ecuaciones matematicas + funciones a ensamblador, adición de APIS y otras cosas) pero tengo un problema con las cadenas.

Para que se hagan una idea con lo que estoy tratando les doy el siguiente código de ejemplo de mi compilador.

Código:
API MessageBox(Opcional hWnd:Entero,Texto:Cadena = "Hola soy una cadenita",Título:Cadena = "Soy un sexual título",Opcional Bandera:Entero = 48):Entero, "User32.dll" "MessageBoxA"

Var Cadenita:Cadena
Var OtroParametro:Entero
Var Título:Cadena
Var Cuarto:Entero

Cadenita = "Soy una vulgar cadena"
Título = "mnmnqmnqmnqm"
Cuarto = 48

MessageBox(0,Cadenita,Título,Cuarto)

El problema esta al tratar de rellenar la variable "Cadenita" con "Soy una vulgar cadena".
Ya que al visualizar el MessageBox amarece "Soy un0" como texto.

El código ensamblador generado es el siguiente.

Código:
; Código generado en Fractor!
include 'C:\Users\DarkBlue\Desktop\Fractor\Macros.inc'
format PE GUI 4.0
.datos
TmpStr0 db "Hola soy una cadenita",0
TmpStr1 db "Soy un sexual título",0
cadenita db ?
otroparametro dd ?
título db ?
cuarto dd ?
TmpStr2 db "Soy una vulgar cadena",0
TmpStr3 db "mnmnqmnqmnqm",0
.código
inicio:
push eax ; Preservamos EAX.
push TmpStr2
push cadenita
ccall [strcat]
add esp,8
pop eax ; Restauramos EAX
push eax ; Preservamos EAX.
push TmpStr3
push título
ccall [strcat] ; POSIBLE ERROR.
add esp,8
pop eax ; Restauramos EAX
push eax ; Preservamos EAX.
push TmpStr2 ; Empujamos el valor de TmpStr2.
push TmpStr3 ; Empujamos el valor de TmpStr3.
mov eax,48 ; Fin del calculo.
mov [cuarto],eax ; Movemos a la variable el valor de EAX.
pop eax ; Restauramos EAX.
push eax ; Preservamos EAX.
push [cuarto] ; Empujamos el valor de cuarto.
push título ; Empujamos el valor de título.
push cadenita ; Empujamos el valor de cadenita.
push 0
call [MessageBox]
pop eax ; Restauramos EAX.
push 0
call [ExitProcess]
entry inicio
; Procedimientos declarados.
; Fin de los procedimientos declarados.

.importar
; APIS declaradas.
library \
Kernel32,'Kernel32.dll',\
msvcrt,'msvcrt.dll',\
User32,'User32.dll'
import \
Kernel32,ExitProcess,'ExitProcess'
import \
msvcrt,strcat,'strcat'
import \
User32,MessageBox,'MessageBoxA'
; Fin APIS.

Como se puede notar, para asignarle a Cadenita el texto "Soy una vulgar cadena" utilizo strcat ya que yo asumí que strcat copia el segundo parametro en el primero, ¿que estoy haciendo mal?
92  Programación / ASM / Re: [FASM] Problema con matrices en: 14 Abril 2016, 06:55 am
Lo único que tienes que hacer es reservar memoria con LocalAlloc ó malloc y guardar el puntero en tu estructura de punteros.

 

Suponia que era algo así, pero no queria tener que usar estas apis, pero bueno, gracias! tema resuelto.
93  Programación / ASM / Re: [FASM] Problema con matrices en: 11 Abril 2016, 00:24 am
Tienes que crear la siguiente estructura:

Array -> Dirección donde se encuentran los punteros de los datos

[Array] -> apunta al primer elemento del array
[Array+4] -> Apunta al siguiente elemento
[Array+8] -> Apunta al siguiente elemento

Y así sucesivamente...

No sé si me he explicado bién  :-\

saludos.
Te explicaste bién, pero el problema es que cada elemento del array contiene el mismo valor (dirección de la cadena "Libreria.dll"), la pregunta es como hacer para copiar la cadena obtenida por WFD.cFileName, crear nuevos punteros y aplicarlos a los elementos.
94  Programación / ASM / Re: [FASM] Problema con matrices en: 10 Abril 2016, 02:22 am
Disculpen la auto-respuesta, se cual es el problema, la Matriz "MatrizArchivos" apunta, en ambas matrices al mismo puntero de cadena.

MatrizArchivos[0] = &401FD5 ' Libreria.dll
MatrizArchivos[1] = &401FD5 ' Libreria.dll

La pregunta ahora es la siguiente ¿como puedo hacer para copiar en la matriz diferentes cadenas?
95  Programación / ASM / [FASM] Problema con matrices en: 8 Abril 2016, 22:29 pm
Buenas, estoy creando un proyecto en ensamblador bastante interesante, pero debido a algo no puedo avanzar.

Estoy tratando de buscar las DLLs del la ruta actual del programa en ejecución y almacenarlos en una Matriz, pero cuando quiero utilizarlos, solo aparece el nombre de una sola DLL en la matriz de longitud 2.

Código:
start:
        ; Obtenemos la dirección actual del programa.
        invoke GetModuleFileNameA,0,ProgramaRuta,255 ; Obtenemos la ruta actual del programa.
        cmp eax,0
        jbe ErrorRutaInvalida

        ; El siguiente código agarra la dirección actual del programa y la modifica para FindFirstFile.
        ; Ejemplo: "C:\Users\DarkBlue\FASM\Programa.exe" a "C:\Users\DarkBlue\FASM\*.dll"
        ; Sin apis extras :v
        mov ebx,ProgramaRuta
        mov ecx,256
BuscarCaracter:
        dec ecx
        cmp ecx,0
        je ErrorEcxEsCero
        cmp byte[ebx+ecx],"\"
        je FinDeTruncado
        mov byte[ebx+ecx],0
        jne BuscarCaracter
FinDeTruncado:
        mov dword [ebx+ecx+1],"*.dl"
        mov byte [ebx+ecx+5],"l"

        ; Aca vamos a buscar las DLLS.
        invoke FindFirstFile,ProgramaRuta,WFD
        cmp eax,-1
        je ErrorFindFirstFile
        mov [PtrFindFirstFile],eax
        mov ebx,-4
BuscarDlls: ; ZONA DE ERROR.
        add ebx,4
        mov dword[MatrizArchivos+ebx],WFD.cFileName
        invoke FindNextFile,[PtrFindFirstFile],WFD
        cmp eax,0
        jne BuscarDlls

        invoke FindClose,[PtrFindFirstFile]
        cmp eax,0
        je ErrorFindClose

        invoke MessageBox,0,dword[MatrizArchivos],0,0
        invoke MessageBox,0,dword[MatrizArchivos+4],0,0

        xor ebx,ebx
        jmp Salir

En la ruta del programa hay 2 DLLs, "Biblioteca.dll y Libreria.dll", a travez de FindFirstFile obtengo Biblioteca.dll y la almacena en MatrizArchivos+EBX (en el primer sondeo es 0) y en la segunda DLL "Libreria.dll" se obtiene a travez de FindNextFile, si este no produjo error retorna a BuscarDlls, EBX se establece en 4 y se añade el puntero al nombre de la DLL en MatrizArchivos+EBX (EBX = 4).

Pero cuando trato de visualizar mediante un MessageBox, solo aparece "Libreria.dll" en ambas matrices.

¿Que estoy haciendo mal?
96  Programación / ASM / Re: Excepciones en FASM en: 11 Febrero 2016, 04:06 am
Gracias Eternal Idol, mas claro imposible, y tan como dijiste, tenia mis dudas sobre los push conforme al marco SEH.

Yo tenia entendido que FS era TIB gracias a Wikipedia y desconocia la estructura TEB (CSLS).

Ahora voy a estudiar como cerrar este controlador de excepciones.

¿Puedo suponer que se extraen los elementos de la pila?

Según tengo entendido, es algo como:
Citar
pop dword [fs:0] ; Returnamos al ultimo controlador.
add esp,4 ; Volvemos al stack pointer inicial.
97  Programación / ASM / Re: Excepciones en FASM en: 10 Febrero 2016, 04:35 am
Gracias por sus respuestas, veamos si entendí

Código:
push Expresión ; Sección de código que se ejecutará al ocurrir una excepción.
push DWORD [FS:0]   ; Puntero al ultimo marco (SEH) que manejará la excepción si nuestro controlador no funcionó.
mov [FS:0],ESP ; Mueve la punta del stack a [FS:0] (Mueve la "estructura" o los "2 miembros" al marco SEH) para el controlador actual.

FS de llano es la estructura TIB (Thread Information Block).
[FS:0] es un puntero a la estructura SEH (EXCEPTION_REGISTRATION_RECORD).
Los 2 primeros push son los miembros de la estructura SEH.
Al generarse una excepción, el ultimo item de la pila es un puntero a EXCEPTION_RECORD.

Espero no haber pifiado ninguna, por favor corríjanme si me equivoque o tengo una idea erronea de algúna parte de este código.

Gracias!
98  Programación / ASM / Re: Excepciones en FASM en: 10 Febrero 2016, 02:19 am
Aunque no lo creas, me confundiste un poco más, despue de leér tu comentario muchas veces y buscar información extra en internet como es debido creo entender un poco tu respuesta.

Citar
Handler tiene como valor en este caso Excepción y Next toma el valor que habia en FS:[0], es decir el marco SEH anterior.

Handler vendria a ser [FS] despues de haberle movido ESP (osae la estructura) ¿no? ese termino me mato, en todo caso si es así puedo suponer que tiene 2 "miembros".

1_ Next: Puntero a la dirección que se ejecutará al ocurrir una excepción.
2_ Handler: Puntero al marco SEH anterior.

La línea 7 de llano no te entendí, no se que es "ExceptionList" (Lista de excepciones).

¿Vos interpretas como SEH a los 2 valores en la pila y [FS:0] como la lista de excepciones?

Gracias por responder, te agradeceria si me sacaras estas dudas  :)
99  Programación / ASM / Excepciones en FASM en: 10 Febrero 2016, 00:38 am
Averigue como manejar una excepción en FASM, pero no se como lo hago ¿alguien me lo podria explicar?

Mas que nada tengo la duda de las líneas 6 y 7.

Según tengo entendido, FS es como una "estructura" ¿alguien me lo podria confirmar?
Otra cosa que quiero saber es de que valor de FS ([FS+hVALOR]) puedo obtener el código de la excepción sin recurrir a una api (GetExceptionCode).

Código:
format pe gui 4.0
include 'win32ax.inc'
.code
start:
    push Excepción      ; Empujamos la dirección del control de excepción.
    push dword [FS:0]   ; ¿?
    mov  [FS:0], esp    ; ¿?
    int3                ; Generamos una excepción.
Excepción:
    invoke MessageBox,0,'Intercepte una excepción!','Excepción',48
    invoke ExitProcess, 0
    ret
.end start

Gracias de antemano.
100  Programación / Programación General / [Pauscal] Funciones indocumentada de MSVBVM60 en: 1 Diciembre 2015, 20:36 pm
Buenas, les traigo una serie de funciones indocumentadas de MSVBVM60 que logre reversear (creo que así se dice, o crackear, no se...) con OllyDbg, PeExplorer, programación y muchisima depuración.

El código esta escrito en Pauscal.

Hasta ahora logre obtener 51 funciones, algunas ya son conocidas... otras son nuevas.
Obviamente las documente lo mejor que pude, espero que las disfruten.

Código
  1. ' Programador: Yuki
  2. ' Formato de cadenas: Unicode
  3. ' Estado de funciones: Indocumentadas
  4. ' Cantidad de funciones declaradas: 51
  5. ' MSBVM60 esta disponible en las versiones mas actuales de Windows.
  6.  
  7. Prototipo pDllFunctionCall(Referencia CallData:DllCallData):Entero
  8.  
  9. Privado:
  10.        Proc LoadLibrary(Referencia lpLibFileName:Cadena):Entero,"Kernel32" "LoadLibraryA"
  11.        Proc GetProcAddress(hModule:Entero,Referencia lpProcName:Cadena):Entero,"Kernel32" "GetProcAddress"
  12. Público:
  13.  
  14. Estruc DllCallData,_
  15.       Libreria,_                    ' El nombre de la Dll.
  16.       Función:Cadena,_       ' El nombre del procedimiento.
  17.       Unknown1:Entero,_        ' Desconocido.
  18.       Unknown2:Entero          ' Dirección de una variable de almacenamiento.
  19.  
  20. ' #======================= Misceláneos ========================
  21. ' ======================== INFORMACIÓN ========================
  22. ' Descripción: Verifica si una cadena esta vacia.
  23. ' Parametros:   #1 - Cadena a verificar (EN FORMATO UNICODE).
  24. ' Devuelve: Verdad si la cadena esta vacia, falso si no es así.
  25. ' ====================== FIN INFORMACIÓN ======================
  26. Proc IsEmpty(Referencia Parametro1:Cadena):Booleano, "MSVBVM60" "rtcIsEmpty"
  27.  
  28. ' ======================== INFORMACIÓN ========================
  29. ' Descripción: Verifica si una cadena es nulo.
  30. ' Parametros:   #1 - Cadena a verificar (EN FORMATO UNICODE).
  31. ' Devuelve: Verdad si la cadenas contiene valor nulo, falso si no es así.
  32. ' ====================== FIN INFORMACIÓN ======================
  33. Proc IsNull(Referencia Parametro1:Cadena):Booleano, "MSVBVM60" "rtcIsNull"
  34.  
  35. ' ======================== INFORMACIÓN ========================
  36. ' Descripción: Verifica si el parametro establecido es un arreglo.
  37. ' Parametros:   #1 - Puntero al dato a verificar.
  38. ' Devuelve: Verdad si es un puntero a un arreglo, falso si no es así.
  39. ' ====================== FIN INFORMACIÓN ======================
  40. Proc IsArray(Parametro1:Entero):Booleano, "MSVBVM60" "rtcIsArray"
  41.  
  42. ' ======================== INFORMACIÓN ========================
  43. ' Descripción: Verifica si una cadena es de tipo numerica.
  44. ' Parametros:   #1 - Cadena a verificar (EN FORMATO UNICODE).
  45. ' Devuelve: Verdad si la cadena es numerica, falso si no es así.
  46. ' ====================== FIN INFORMACIÓN ======================
  47. Proc IsNumeric(Referencia Parametro1:Cadena):Booleano, "MSVBVM60" "rtcIsNumeric"
  48.  
  49. ' ======================== INFORMACIÓN ========================
  50. ' Descripción: Obtiene el tipo del parametro establecido.
  51. ' Parametros:   #1 - Puntero al dato a obtener tipo.
  52. ' Devuelve: Tipo de dato que establecimos.
  53. ' ====================== FIN INFORMACIÓN ======================
  54. Proc VarType(Parametro1:Entero):Entero, "MSVBVM60" "rtcVarType"
  55.  
  56. ' ======================== INFORMACIÓN ========================
  57. ' Descripción: Verifica si el primer parametro es un objeto.
  58. ' Parametros:   #1 - Puntero a analizar.
  59. ' Devuelve: Verdad si el parametro es un objeto, falso si no es así.
  60. ' ====================== FIN INFORMACIÓN ======================
  61. Proc IsObject(Parametro1:Entero):Booleano, "MSVBVM60" "rtcIsObject"
  62.  
  63. ' ======================== INFORMACIÓN ========================
  64. ' Descripción: Procesa los eventos pendientes.
  65. ' Parametros: Ninguno.
  66. ' Devuelve: La cantidad de formularios disponibles.
  67. ' ====================== FIN INFORMACIÓN ======================
  68. Proc DoEvents:Entero, "MSVBVM60" "rtcDoEvents"
  69.  
  70. ' ======================== INFORMACIÓN ========================
  71. ' Descripción: Emite un sonido por el altavoz del equipo.
  72. ' Parametros: Ninguno.
  73. ' Devuelve: Nada.
  74. ' ====================== FIN INFORMACIÓN ======================
  75. Proc vbBeep, "MSVBVM60" "rtcBeep"
  76.  
  77. ' ======================== INFORMACIÓN ========================
  78. ' Descripción: Crea una carpeta.
  79. ' Parametros:   #1 - Ruta de la carpeta a crear (EN FORMATO UNICODE).
  80. ' Devuelve: Nada.
  81. ' ====================== FIN INFORMACIÓN ======================
  82. Proc MkDir(Referencia Parametro1:Cadena), "MSVBVM60" "rtcMakeDir"
  83.  
  84. ' ======================== INFORMACIÓN ========================
  85. ' Descripción: Elimina una carpeta.
  86. ' Parametros:   #1 - Ruta de la carpeta a eliminar (EN FORMATO UNICODE).
  87. ' Devuelve: Nada.
  88. ' ====================== FIN INFORMACIÓN ======================
  89. Proc RmDir(Referencia Parametro1:Cadena), "MSVBVM60" "rtcRemoveDir"
  90.  
  91. ' ======================== INFORMACIÓN ========================
  92. ' Descripción: ???
  93. ' Parametros: Ninguno.
  94. ' Devuelve: ???
  95. ' ====================== FIN INFORMACIÓN ======================
  96. Proc LocaleID:Entero, "MSVBVM60" "rtcGetHostLCID"
  97.  
  98. ' ======================== Memoria ========================
  99. ' ======================== INFORMACIÓN ========================
  100. ' Descripción: Lee/Obtiene un Byte (1 bytes) de una dirección en memoria.
  101. ' Parametros:   #1 - Dirección en memoria del dato a obtener 1 byte.
  102. '               #2 - Variable de tipo Byte que recibirá el byte copiado.
  103. ' Devuelve: Nada.
  104. ' ====================== FIN INFORMACIÓN ======================
  105. Proc GetByte(Dirección:Entero,Referencia Retorno:Byte), "MSVBVM60" "GetMem1"
  106.  
  107. ' ======================== INFORMACIÓN ========================
  108. ' Descripción: Lee/Obtiene un WordSig (2 bytes) de una dirección en memoria.
  109. ' Parametros:   #1 - Dirección en memoria del dato a obtener 1 WordSig (2 bytes).
  110. '               #2 - Variable de tipo WordSig que recibirá los 2 bytes copiados.
  111. ' Devuelve: Nada.
  112. ' ====================== FIN INFORMACIÓN ======================
  113. Proc GetWord(Dirección:Entero,Referencia Retorno:WordSig), "MSVBVM60" "GetMem2"
  114.  
  115. ' ======================== INFORMACIÓN ========================
  116. ' Descripción: Lee/Obtiene un EnteroSig (4 bytes) de una dirección en memoria.
  117. ' Parametros:   #1 - Dirección en memoria del dato a obtener 1 Entero (4 bytes).
  118. '               #2 - Variable de tipo Entero que recibirá los 4 bytes copiados.
  119. ' Devuelve: Nada.
  120. ' ====================== FIN INFORMACIÓN ======================
  121. Proc GetDWord(Dirección:Entero,Referencia Retorno:EnteroSig), "MSVBVM60" "GetMem3"
  122.  
  123. ' ======================== INFORMACIÓN ========================
  124. ' Descripción: Lee/Obtiene un Decimal (8 bytes) de una dirección en memoria.
  125. ' Parametros:   #1 - Dirección en memoria del dato a obtener 1 Decimal (8 bytes).
  126. '               #2 - Variable de tipo Decimal que recibirá los 8 bytes copiados.
  127. ' Devuelve: Nada.
  128. ' ====================== FIN INFORMACIÓN ======================
  129. Proc GetQWord(Dirección:Entero,Referencia Retorno:Decimal), "MSVBVM60" "GetMem4"
  130.  
  131. ' ======================== INFORMACIÓN ========================
  132. ' Descripción: Escribe un Byte (1 bytes) en un dato.
  133. ' Parametros:   #1 - Dirección en memoria del dato a escribir 1 Byte (1 bytes).
  134. '               #2 - Valor de tipo Byte a escribir.
  135. ' Devuelve: Nada.
  136. ' ====================== FIN INFORMACIÓN ======================
  137. Proc PutByte(Destino:Entero,Valor:Byte), "MSVBVM60" "PutMem1"
  138.  
  139. ' ======================== INFORMACIÓN ========================
  140. ' Descripción: Escribe un WordSig (2 bytes) en un dato.
  141. ' Parametros:   #1 - Dirección en memoria del dato a escribir 1 WordSig (2 bytes).
  142. '               #2 - Valor de tipo WordSig a escribir.
  143. ' Devuelve: Nada.
  144. ' ====================== FIN INFORMACIÓN ======================
  145. Proc PutWord(Destino:Entero,Valor:WordSig), "MSVBVM60" "PutMem2"
  146.  
  147. ' ======================== INFORMACIÓN ========================
  148. ' Descripción: Escribe un EnteroSig (4 bytes) en un dato.
  149. ' Parametros:   #1 - Dirección en memoria del dato a escribir 1 EnteroSig (4 bytes).
  150. '               #2 - Valor de tipo EnteroSig a escribir.
  151. ' Devuelve: Nada.
  152. ' ====================== FIN INFORMACIÓN ======================
  153. Proc PutDWord(Destino:Entero,Valor:EnteroSig), "MSVBVM60" "PutMem3"
  154.  
  155. ' ======================== INFORMACIÓN ========================
  156. ' Descripción: Escribe un Decimal (8 bytes) en un dato.
  157. ' Parametros:   #1 - Dirección en memoria del dato a escribir 1 Decimal (8 bytes).
  158. '               #2 - Valor de tipo Decimal a escribir.
  159. ' Devuelve: Nada.
  160. ' ====================== FIN INFORMACIÓN ======================
  161. Proc PutQWord(Destino:Entero,Valor:Decimal), "MSVBVM60" "PutMem4"
  162.  
  163. ' ======================== INFORMACIÓN ========================
  164. ' Descripción: Copia los datos de una dirección en memoria a otra.
  165. ' Parametros:   #1 - Longitud de bytes a copiar.
  166. '               #2 - Dirección del destino de los datos a copiar.
  167. '               #3 - Dirección de la fuente de los datos a copiar.
  168. ' Devuelve: Nada.
  169. ' Detelles: Vease API CopyMemory.
  170. ' ====================== FIN INFORMACIÓN ======================
  171. Proc CopyBytes(Tamaño,Destino,Fuente:Entero), "MSVBVM60" "__vbaCopyBytes"
  172.  
  173. ' ======================== INFORMACIÓN ========================
  174. ' Descripción: Carga en memoria una libreria.
  175. ' Parametros:   #1 - Nombre o dirección de la DLL a cargar en memoria (EN FORMATO ANSI).
  176. ' Devuelve: Modulo de la DLL cargada.
  177. ' Detelles: Vease API LoadLibrary.
  178. ' ====================== FIN INFORMACIÓN ======================
  179. Proc LibraryLoad(Referencia Libreria:Cadena):Entero, "MSVBVM60" "EbLibraryLoad"
  180.  
  181. ' ======================== INFORMACIÓN ========================
  182. ' Descripción: Descarga en memoria una libreria.
  183. ' Parametros:   #1 - Puntero al modulo devuelto por LibraryLoad/LoadLibrary.
  184. ' Devuelve: Nada
  185. ' Detelles: Vease API FreeLibrary.
  186. ' ====================== FIN INFORMACIÓN ======================
  187. Proc LibraryUnload(vbLibLoadPtr:Entero), "MSVBVM60" "EbLibraryUnload"
  188.  
  189. ' ======================== INFORMACIÓN ========================
  190. ' Descripción: Obtiene la dirección en memoria de una cadena.
  191. ' Parametros:   #1 - Cadena a obtener puntero (ASCII o UNICODE).
  192. ' Devuelve: Dirección en memoria de la cadena establecida.
  193. ' Detelles: Esta API crea una copia del parametro que es establecido.
  194. ' ====================== FIN INFORMACIÓN ======================
  195. Proc StrPtr(Str:Cadena):Entero, "MSVBVM60" "VarPtr"
  196.  
  197. ' ======================== Colores ========================
  198. ' ======================== INFORMACIÓN ========================
  199. ' Descripción: Obtiene el valor entero de una combinación RGB/RVA.
  200. ' Parametros:   #1 - Valor del color Rojo (0 - 255).
  201. '               #2 - Valor del color Verde (0 - 255).
  202. '               #3 - Valor del color Azul (0 - 255).
  203. ' Devuelve: Valor entero que representa el color RGB.
  204. ' ====================== FIN INFORMACIÓN ======================
  205. Proc vbRGB(R,G,B:Byte):Entero, "MSVBVM60" "rtcRgb"
  206.  
  207. ' ======================== Conversión de datos. ========================
  208. ' ======================== INFORMACIÓN ========================
  209. ' Descripción: Convierte un valor de tipo WordSig (2 bytes) a cadena.
  210. ' Parametros:   #1 - Valor de tipo WordSig a convertir.
  211. ' Devuelve: Cadena del parametro establecido (EN FORMATO UNICODE).
  212. ' ====================== FIN INFORMACIÓN ======================
  213. Proc vbaStrI2(Number:WordSig):Cadena,"MSVBVM60" "__vbaStrI2"
  214.  
  215. ' ======================== INFORMACIÓN ========================
  216. ' Descripción: Convierte un valor de tipo EnteroSig (4 bytes) a cadena.
  217. ' Parametros:   #1 - Valor de tipo Entero a convertir.
  218. ' Devuelve: Cadena del parametro establecido (EN FORMATO UNICODE).
  219. ' ====================== FIN INFORMACIÓN ======================
  220. Proc vbaStrI4(Number:EnteroSig):Cadena,"MSVBVM60" "__vbaStrI4"
  221.  
  222. ' ======================== INFORMACIÓN ========================
  223. ' Descripción: Convierte un valor de tipo Decimal (8 bytes) a cadena.
  224. ' Parametros:   #1 - Valor de tipo Decimal a convertir.
  225. ' Devuelve: Cadena del parametro establecido (EN FORMATO UNICODE).
  226. ' ====================== FIN INFORMACIÓN ======================
  227. Proc vbaStrCy(Number:Decimal):Cadena,"MSVBVM60" "__vbaStrCy"
  228.  
  229. ' ======================== INFORMACIÓN ========================
  230. ' Descripción: Convierte un valor de tipo Real (8 bytes) a cadena.
  231. ' Parametros:   #1 - Valor de tipo Real a convertir.
  232. ' Devuelve: Cadena del parametro establecido (EN FORMATO UNICODE).
  233. ' ====================== FIN INFORMACIÓN ======================
  234. Proc vbaStrR8(Number:Real):Cadena,"MSVBVM60" "__vbaStrR8"
  235.  
  236. ' ======================== INFORMACIÓN ========================
  237. ' Descripción: Convierte un valor de tipo Byte (1 bytes) a cadena.
  238. ' Parametros:   #1 - Valor de tipo Byte a convertir.
  239. ' Devuelve: Cadena del parametro establecido (EN FORMATO UNICODE).
  240. ' ====================== FIN INFORMACIÓN ======================
  241. Proc vbaStrUI1(Number:Byte):Cadena,"MSVBVM60" "__vbaStrUI1"
  242.  
  243. ' ======================== INFORMACIÓN ========================
  244. ' Descripción: Convierte una cadena a WordSig (2 bytes).
  245. ' Parametros:   #1 - Cadena de numerica que se procesará (EN FORMATO UNICODE).
  246. ' Devuelve: Parametro de cadena convertido a WordSig.
  247. ' ====================== FIN INFORMACIÓN ======================
  248. Proc vbaI2Str(Referencia Number:Cadena):WordSig,"MSVBVM60" "__vbaI2Str"
  249.  
  250. ' ======================== INFORMACIÓN ========================
  251. ' Descripción: Convierte una cadena a EnteroSig (4 bytes).
  252. ' Parametros:   #1 - Cadena de numerica que se procesará (EN FORMATO UNICODE).
  253. ' Devuelve: Parametro de cadena convertido a EnteroSig.
  254. ' ====================== FIN INFORMACIÓN ======================
  255. Proc vbaI4Str(Referencia Number:Cadena):EnteroSig,"MSVBVM60" "__vbaI4Str"
  256.  
  257. ' ======================== INFORMACIÓN ========================
  258. ' Descripción: Convierte una cadena a Decimal (8 bytes).
  259. ' Parametros:   #1 - Cadena de numerica que se procesará (EN FORMATO UNICODE).
  260. ' Devuelve: Parametro de cadena convertido a Decimal.
  261. ' ====================== FIN INFORMACIÓN ======================
  262. Proc vbaCyStr(Referencia Number:Cadena):Decimal,"MSVBVM60" "__vbaCyStr"
  263.  
  264. ' ======================== INFORMACIÓN ========================
  265. ' Descripción: Convierte una cadena a Real (8 bytes).
  266. ' Parametros:   #1 - Cadena de numerica que se procesará (EN FORMATO UNICODE).
  267. ' Devuelve: Parametro de cadena convertido a Real.
  268. ' ====================== FIN INFORMACIÓN ======================
  269. Proc vbaR8Str(Referencia Number:Cadena):Real,"MSVBVM60" "__vbaR8Str"
  270.  
  271. ' ======================== INFORMACIÓN ========================
  272. ' Descripción: Convierte una cadena a Byte (1 bytes).
  273. ' Parametros:   #1 - Cadena de numerica que se procesará (EN FORMATO UNICODE).
  274. ' Devuelve: Parametro de cadena convertido a Byte.
  275. ' ====================== FIN INFORMACIÓN ======================
  276. Proc vbaUI1Str(Referencia Number:Cadena):Byte,"MSVBVM60" "__vbaUI1Str"
  277.  
  278. ' ======================== INFORMACIÓN ========================
  279. ' Descripción: Convierte una cadena UNICODE a ANSI.
  280. ' Parametros:   #1 - Puntero a variable de tipo entero que recibira el puntero a la cadena convertida.
  281. '               #2 - Cadena de caracteres que se a de convertir a ANSI (EN FORMATO UNICODE).
  282. ' Devuelve: Nada.
  283. ' ====================== FIN INFORMACIÓN ======================
  284. Proc StrToAnsi(Retorno:Entero,Referencia Palabra:Cadena), "MSVBVM60" "__vbaStrToAnsi"
  285.  
  286. ' ======================== INFORMACIÓN ========================
  287. ' Descripción: Convierte una cadena ANSI a UNICODE.
  288. ' Parametros:   #1 - Puntero a variable de tipo entero que recibira el puntero a la cadena convertida.
  289. '               #2 - Cadena de caracteres que se a de convertir a UNICODE (EN FORMATO ANSI).
  290. ' Devuelve: Nada.
  291. ' ====================== FIN INFORMACIÓN ======================
  292. Proc StrToUnicode(Retorno:Entero,Referencia Palabra:Cadena), "MSVBVM60" "__vbaStrToUnicode"
  293.  
  294. ' ======================== Cadenas ========================
  295. ' ======================== INFORMACIÓN ========================
  296. ' Descripción: Crea una cadena de Nulos con el tamaño establecido.
  297. ' Parametros:   #1 - Longitud de la cadena que devolvera la función.
  298. ' Devuelve: Cadena de longitud establecida (EN FORMATO UNICODE).
  299. ' ====================== FIN INFORMACIÓN ======================
  300. Proc Space(Longeur:Entero):Cadena,"MSVBVM60" "rtcSpaceBstr"
  301.  
  302. ' ======================== INFORMACIÓN ========================
  303. ' Descripción: Invierte una cadena.
  304. ' Parametros:   #1 - Cadena que se invertira (EN FORMATO UNICODE).
  305. ' Devuelve: Cadena invertida (EN FORMATO UNICODE).
  306. ' ====================== FIN INFORMACIÓN ======================
  307. Proc StrReverse(sStr:Cadena):Cadena,"MSVBVM60" "rtcStrReverse"
  308.  
  309. ' ======================== INFORMACIÓN ========================
  310. ' Descripción: Obtiene el caracter ANSI de un valor.
  311. ' Parametros:   #1 - Valor a obtener caracter.
  312. ' Devuelve: Caracter del valor establecido (EN FORMATO UNICODE).
  313. ' ====================== FIN INFORMACIÓN ======================
  314. Proc Chr(bChr:Byte):Cadena,"MSVBVM60" "rtcBstrFromAnsi"
  315.  
  316. ' ======================== INFORMACIÓN ========================
  317. ' Descripción: Obtiene caracteres del lado izquierdo de una cadena.
  318. ' Parametros:   #1 - Cadena a extraer caracteres (EN FORMATO UNICODE).
  319. '               #2 - Longitud a obtener.
  320. ' Devuelve: Cadena de caracteres extaida (EN FORMATO UNICODE).
  321. ' ====================== FIN INFORMACIÓN ======================
  322. Proc Left(Referencia sStr:Cadena,iLen:Entero):Cadena,"MSVBVM60" "rtcLeftCharBstr"
  323.  
  324. ' ======================== INFORMACIÓN ========================
  325. ' Descripción: Obtiene caracteres del lado derecho de una cadena.
  326. ' Parametros:   #1 - Cadena a extraer caracteres (EN FORMATO UNICODE).
  327. '               #2 - Longitud a obtener.
  328. ' Devuelve: Cadena de caracteres extaida (EN FORMATO UNICODE).
  329. ' ====================== FIN INFORMACIÓN ======================
  330. Proc Right(Referencia sStr:Cadena,iLen:Entero):Cadena,"MSVBVM60" "rtcRightCharBstr"
  331.  
  332. ' ======================== INFORMACIÓN ========================
  333. ' Descripción: Elimina todos los espaciós del lado izquierdo y derecho de la cadena establecida.
  334. ' Parametros:   #1 - Cadena a eliminar espacios.
  335. ' Devuelve: Cadena establecida sin espacios (EN FORMATO UNICODE).
  336. ' ====================== FIN INFORMACIÓN ======================
  337. Proc Trim(Referencia ItemPtr:Cadena):Cadena,"MSVBVM60" "rtcTrimBstr"
  338.  
  339. ' ======================== INFORMACIÓN ========================
  340. ' Descripción: Elimina todos los espaciós del lado izquierdo de la cadena establecida.
  341. ' Parametros:   #1 - Cadena a eliminar espacios.
  342. ' Devuelve: Cadena establecida sin espacios (EN FORMATO UNICODE).
  343. ' ====================== FIN INFORMACIÓN ======================
  344. Proc LTrim(Referencia ItemPtr:Cadena):Cadena,"MSVBVM60" "rtcLeftTrimBstr"
  345.  
  346. ' ======================== INFORMACIÓN ========================
  347. ' Descripción: Elimina todos los espaciós del lado derechi de la cadena establecida.
  348. ' Parametros:   #1 - Cadena a eliminar espacios.
  349. ' Devuelve: Cadena establecida sin espacios (EN FORMATO UNICODE).
  350. ' ====================== FIN INFORMACIÓN ======================
  351. Proc RTrim(Referencia ItemPtr:Cadena):Cadena,"MSVBVM60" "rtcRightTrimBstr"
  352.  
  353. ' ======================== INFORMACIÓN ========================
  354. ' Descripción: Obtiene la longitud de una cadena.
  355. ' Parametros:   #1 - Texto a obtener longitud (EN FORMATO UNICODE).
  356. ' Devuelve: Longitud de la cadena establecido.
  357. ' ====================== FIN INFORMACIÓN ======================
  358. Proc Len(Referencia Expresion:Cadena):Entero, "MSVBVM60" "__vbaLenBstr"
  359.  
  360. ' ======================== Archivos ========================
  361. ' Descripción: Obtiene el tamaño de un archivo.
  362. ' Parametros:   #1 - Ruta del archivo a obtener tamaño (en formato UNICODE).
  363. ' Devuelve: Tamaño del archivo.
  364. ' ====================== FIN INFORMACIÓN ======================
  365. Proc FileLen(Referencia Parametro1:Cadena):Entero, "MSVBVM60" "rtcFileLen"
  366.  
  367. ' ======================== Matematicas ========================
  368. ' ======================== INFORMACIÓN ========================
  369. ' Descripción: Obtiene la tangente de un valor real.
  370. ' Parametros:   #1 - Valor de tipo real a obtener tangente.
  371. ' Devuelve: Tangente del valor establecido.
  372. ' ====================== FIN INFORMACIÓN ======================
  373. Proc vbTan(Parametro1:Real):Real, "MSVBVM60" "rtcTan"
  374.  
  375. ' ======================== INFORMACIÓN ========================
  376. ' Descripción: Obtiene el exponente de un valor real.
  377. ' Parametros:   #1 - Valor de tipo real a obtener exponente.
  378. ' Devuelve: Exponente del valor establecido.
  379. ' ====================== FIN INFORMACIÓN ======================
  380. Proc vbExp(Parametro1:Real):Real, "MSVBVM60" "rtcExp"
  381.  
  382. ' ======================== Otros ========================
  383. ' ======================== INFORMACIÓN ========================
  384. ' Descripción: Destruye una matriz.
  385. ' Parametros:   #1 - Reservado, debe ser cero.
  386. '               #2 - Puntero a la matriz a borrar.
  387. ' Detalles: Esta función no redimenciona la matriz, pero vuelve esta in-utilizable.
  388. ' Devuelve: Nada.
  389. ' ====================== FIN INFORMACIÓN ======================
  390. Proc ArrayDestruct(Reservado,PtrMatriz:Entero), "MSVBVM60" "__vbaAryDestruct"
  391.  
  392. ' ======================== INFORMACIÓN ========================
  393. ' Descripción: Destruye una matriz.
  394. ' Parametros:   #1 - Reservado, debe ser cero.
  395. '               #2 - Puntero a la matriz a borrar.
  396. ' Devuelve: Nada.
  397. ' Detalles: Esta función no redimenciona la matriz, pero vuelve esta in-utilizable.
  398. ' ====================== FIN INFORMACIÓN ======================
  399. Proc Erase(Reservado,PtrMatriz:Entero), "MSVBVM60" "__vbaErase"
  400.  
  401. ' ======================== INFORMACIÓN ========================
  402. ' Descripción: Carga dinamicamente un procedimiento de una libreria en memoria.
  403. ' Parametros:   #1 - Estructura DllCallData con los datos requeridos.
  404. ' Devuelve: Si la función tiene exito, el procedimiento devuelve la dirección del procedimiento
  405. ' establecido en "Parametro1.Procedure" miembro.
  406. ' Si la función falla, retorna 0.
  407. ' Detalles: Utilize AdmErr para controlar el error de acceso a memoria.
  408. ' ====================== FIN INFORMACIÓN ======================
  409. Proc DllFunctionCall(Referencia CallData:DllCallData):Entero
  410.        Var Ptr,PtrProc:Entero,Call:pDllFunctionCall
  411.        Ptr = LoadLibrary("MSVBVM60")
  412.        Si Ptr = 0 Entonces GenerarError &C4855647
  413.        PtrProc = GetProcAddress(Ptr,"DllFunctionCall")
  414.        Si PtrProc = 0 Entonces GenerarError &C0D2DECF
  415.        Call@ = PtrProc
  416.        AdmErr
  417.                Resultado = Call(CallData)
  418.        Controlar
  419.                ' Si se produce un error, no hacer nada.
  420.        FinAdmErr
  421. FinProc
También me gustaria, si conocen alguna función indocumentada de MSVBVM60 la comenten en este post.

Si tienen alguna duda sobre (casi) cualquiera de estas funciones, por favor no duden en preguntar.

Saludos!
Páginas: 1 2 3 4 5 6 7 8 9 [10]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines