include 'pe.inc' pe CUI start: invoke GetStdHandle,STD_OUTPUT_HANDLE mov [stdout],eax invoke GetCommandLineW call GetParameter mov [filename],eax cmp word [eax],0 je .out invoke CreateFileW,eax,GENERIC_READ,FILE_SHARE_READ+FILE_SHARE_WRITE,NULL,\ OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL cmp eax,-1 je .out mov [hfile],eax invoke GetFileSize,[hfile],filesizeh mov [filesize],eax inc eax invoke VirtualAlloc,NULL,eax,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE mov esi,eax invoke ReadFile,[hfile],eax,[filesize],dummy,NULL invoke CloseHandle,[hfile] invoke WriteFile,[stdout],exp,exp.size,dummy,NULL mov ecx,[esi+28] ;len mov edx,[esi+24] ;sym .loop: sub ecx,32 jz .out cmp dword [esi+edx],$100000 ;low dword jl .continue movzx eax,word [esi+edx+8] ;flags test eax,eax jz .continue and eax,0x100 ;optimized ; jz .continue movzx eax,word [esi+edx+8] ;flags and eax,0x8 ;used jz .continue movzx eax,word [esi+edx+8] ;flags and eax,0x1 ;defined ;jz .continue movzx eax,word [esi+edx+12] ;SIB test eax,eax jnz .continue movzx eax,word [esi+edx+14] ;SIB test eax,eax jnz .continue ;mov ebx,[esi+edx+28] ;offset in preprocessed source ;add ebx,[esi+32] ;preprocessed source ;add ebx,esi ;mov eax,[ebx+4] ;line number ;and eax,$80000000 ;source ;jnz .continue ;macro generated mov eax,[esi+edx+24] ;pascal string and eax,$80000000 jnz .string mov eax,[esi+edx+24] ;anonymous label test eax,eax jz .continue mov ebx,[esi+32] ;preprocessed source add eax,ebx add eax,esi pusha push 0 push dummy movzx ebx,byte [eax] push ebx inc eax push eax cmp [printdelim],0 je .prepfirst pusha invoke WriteFile,[stdout],delimiter,2,dummy,NULL popa .prepfirst: mov [printdelim],1 invoke WriteFile,[stdout] popa jmp .continue .string: mov eax,[esi+edx+24] mov ebx,[esi+16] ;string and eax,$7fffffff lea eax,[eax+ebx] add eax,esi mov ebx,eax push esi mov esi,eax call strlen pop esi pusha cmp [printdelim],0 je .stringfirst pusha invoke WriteFile,[stdout],delimiter,2,dummy,NULL popa .stringfirst: mov [printdelim],1 invoke WriteFile,[stdout],ebx,eax,dummy,NULL popa .continue: add edx,32 jmp .loop ;invoke WriteConsoleA,[stdout],labelbuf,[length],dummy,NULL .out: ;invoke Sleep,-1 ret ;--- strlen: ;>esi, dummy rd 1 stdout rd 1 filename rd 1 hfile rd 1 filesize rd 1 filesizeh rd 1 printdelim rd 1 pe.end: