Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Yuki en 8 Abril 2016, 22:29 pm



Título: [FASM] Problema con matrices
Publicado por: Yuki 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?


Título: Re: [FASM] Problema con matrices
Publicado por: Yuki 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?


Título: Re: [FASM] Problema con matrices
Publicado por: fary en 10 Abril 2016, 21:46 pm
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.


Título: Re: [FASM] Problema con matrices
Publicado por: Yuki 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.


Título: Re: [FASM] Problema con matrices
Publicado por: fary en 11 Abril 2016, 16:42 pm
Lo único que tienes que hacer es reservar memoria con LocalAlloc ó malloc y guardar el puntero en tu estructura de punteros.

 


Título: Re: [FASM] Problema con matrices
Publicado por: Yuki 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.