Buenas, practicando un poco de ensamblador -para no oxidarme- he hecho este simple annotator en fasm. Básicamente, añade el nombre del ejecutable al fichero "Check.txt". Cada entrada se separa con un salto de línea estlo Windows. Buscando por el foro he visto una herramienta similar -de 3 KB-, pero no he visto el source. Por este motivo he decidido publicarlo.

Para ello escanea la ruta del ejecutable hacia atrás en busca del primer punto. Luego busca la primera \ y calcula la diferencia. Además, añade el salto de línea donde debería estar la extensión del archivo (.EXE). Finalmente, escribe dicha subcadena al final del archivo de texto que abrimos inicialmente, para que quede registrado.
include 'win32ax.inc'

newLine = 0xA0D

.data
  buffer db MAX_PATH dup(?)

.code
 
  start:
    invoke CreateFile,filename,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL
    push eax ;EBP-8
    invoke GetModuleFileName,0,buffer,MAX_PATH
    mov ecx,eax
    mov edi,buffer
    add edi,eax
    mov al,'.'
    std
    repnz scasb
    mov word [edi+1],newLine
    mov edx,ecx
    add edx,3
    mov al,'\'
    repnz scasb
    cld
    add ecx,2
    sub edx,ecx
    add edi,2
    push 0
    push 0
    push edx
    push edi
    push dword [ebp-8]
    invoke SetFilePointer,dword [ebp-8],0,0,FILE_END
    call [WriteFile]
    call [CloseHandle]
    invoke ExitProcess,0
    filename db 'Check.txt',0
 
.end start
Un saludo!
github.com/Slek-Z
Excelente bro.

So ideas mias o te falta un parametro? o.O


usando FILE_APPEND_DATA te ahorras lo de setfilepointer y todo lo demás.


Saludos bro
Imagen
Muchas gracias a todos!

Tienes razón Pink! Falta el último parámetro: hTemplateFile
Y no conocía el acceso FILE_APPEND_DATA, muchas gracias!

Aquí va el code corregido y sin SetFilePointer:
include 'win32ax.inc'

newLine = 0xA0D
FILE_APPEND_DATA = 0x0004

.data
  buffer db MAX_PATH dup(?)

.code
 
  start:
    invoke CreateFile,filename,FILE_APPEND_DATA,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    push eax
    invoke GetModuleFileName,0,buffer,MAX_PATH
    mov ecx,eax
    mov edi,buffer
    add edi,eax
    mov al,'.'
    std
    repnz scasb
    mov word [edi+1],newLine
    mov edx,ecx
    add edx,3
    mov al,'\'
    repnz scasb
    cld
    add ecx,2
    sub edx,ecx
    add edi,2
    mov eax,[esp]
    invoke WriteFile,eax,edi,edx,0,0
    call [CloseHandle]
    invoke ExitProcess,0
    filename db 'Check.txt',0
 
.end start
P.D: fasm tampoco reconoce FILE_APPEND_DATA, por eso lo he tenido que definir a mano :D
github.com/Slek-Z
Cuando dije me retracto por lo del parámetro lo dije porque el ultimo es opcional(En algunos Lenguajes no hace falta colocarlos si no se van a usar).

Saludos bro
Imagen
Gracias brother , perfect
We live in hell it will always have pain. - Uchiha Obito.

@ Indetectables [ Modder - Coder ]
Responder

Volver a “Fuentes”