• [FASM] Annotator (1.5 KB)

 #472082  por Slek
 31 May 2015, 19:17
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!
 #472095  por Pink
 31 May 2015, 20:39
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
 #472098  por Blau
 31 May 2015, 20:45
Me guardo el source por si algún día me da por aprender (F)ASM, ¡gracias!
 #472103  por Pink
 31 May 2015, 21:07
Me retracto en lo del parametro.
Saludos.
 #472104  por Slek
 31 May 2015, 21:21
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
 #472171  por Pink
 01 Jun 2015, 13:19
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
 #472196  por Kaway
 01 Jun 2015, 19:45
Gracias brother , perfect