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!