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
; 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?