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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Temas
Páginas: 1 [2]
11  Programación / Programación General / ¿Como programar un depurador avanzado? en: 22 Mayo 2017, 18:18 pm
Buenas, hace un tiempo termine de desarrollar un lenguaje de programación orientado a objetos en español, debido a esto me encontré en la necesidad de escribir un depurador para que los programadores puedan detectar errores en su código de manera mas fácil.

El dilema es que no se como escribirlo de tal manera que se visualice la línea de código que se esta ejecutando en el momento ¿alguien tiene alguna referencia de como hacer este trabajo?
12  Programación / Programación General / Programar depurador en: 16 Diciembre 2016, 21:26 pm
Buenas, estoy programando un depurador para el lenguaje de programación que desarrolle, pero no tengo la menor idea de como sincronizar el código fuente con el archivo ejecutable siendo depurado.

¿alguien tiene alguna idea de como se realiza este trabajo?
13  Foros Generales / Foro Libre / Lenguaje Cramel3 en: 1 Noviembre 2016, 13:58 pm
Hola!

Hace un tiempo cree un post hablando de un nuevo lenguaje de programación que yo mismo diseñe, hoy les traigo la nueva versión de ese lenguaje escrito de cero nuevamente.  ;-)


Este post no es para hacer propaganda, les quiero enseñar lo que seria una útil herramienta para los  programadores nuevos y veteranos.

Un nuevo lenguaje que permita aprender programación de la manera mas fácil y simple posible, con la potencia de increíbles lenguajes como la familia C.

¿Que piensas de esto?

Si te interesa el proyecto, puedes ingresar a la pagina desde aquí.

El código fuente de Cramel2 (versión anterior) esta disponible para su descarga en la sección "Descargas".
14  Programación / ASM / Manipular flotantes en la pila en: 13 Junio 2016, 03:02 am
Buenas, necesito saber como trabajan las funciones/procedimientos con los flotantes, a lo que se refiere pasarlos por la pila.

¿Acaso envian el valor convertido a entero? ¿o simplemente pasan un puntero a la variable QWORD (8 bytes)?

Espero su respuesta, gracias de antemano!
15  Foros Generales / Foro Libre / Nuevo Compilador en: 29 Mayo 2016, 16:20 pm
Bueno, les traigo una muestra de mi compilador, lo he estado programando estos ultimos meses y la verdad es que ha sido todo un desafio, nunca pense que iba a ser tan complejo y exajerado, pero con mucho esfuerzo he podido desarrollarlo hasta el punto de poder compartirlo con ustedes.

Antes de que lo prueben, les informo que los bugs estan GARANTIZADOS, asi que no me insulten demasiado.

Les dejo el enlace de descarga, pido disculpas si esto no se debe hacer en esta sección.

http://www.mediafire.com/download/f5xsd5mmymxf5o9/%5BBinario%5D_Compilado.zip

El comprimido contiene información y un código de ejemplo.

Espero criticas constructivas, sugerencias y recomendaciones.

Saludos!
16  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?
17  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?
18  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.
19  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]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines