;============================================================================================================================================= ; cgi_1.asm ;The first step on a hard way to the heights of knowledge ;This time - CGI in ASM ; Algorithm ;C1: Get the handle to have the ability to write to the browser window ;C2: Write the data to the standard output ;C3: Get system time ;C4: Show it ;(C)I don't take any responsibility for the use of this program ; Zedr0n -- connection closed ;============================================================================================================================================= ;============================================================================================================================================= ; Options/Declarations ;============================================================================================================================================= .386 .model flat, stdcall option casemap:none include windows.inc include kernel32.inc include user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib CR equ 0Dh LF equ 0Ah ;============================================================================================================================================= ; Data segment ;============================================================================================================================================= .data HTML db "Content-type: text/html",CR,LF,CR,LF db "" db "" db "
" db "" db "" db "" db "",0 small_size equ $-small end_small db "
",0 end_size equ $-end_small ;============================================================================================================================================ ; Variables segment ;============================================================================================================================================ .data? OutHandle HANDLE ? Written dd ? syear db 4 dup(?) smonth db 2 dup(?) sDayOfWeek db ? sHour db 2 dup(?) sMinute db 2 dup(?) sSecond db 2 dup(?) ;============================================================================================================================================= ; Code segment ;============================================================================================================================================= .code start: pusha C1: invoke GetStdHandle,STD_OUTPUT_HANDLE mov OutHandle,eax cmp eax,INVALID_HANDLE_VALUE jz Exit C2: invoke WriteFile,OutHandle,offset HTML,HTML_size,offset Written,NULL C3: invoke GetSystemTime,offset Time invoke wsprintf,offset syear,offset fmt,Time.wYear invoke wsprintf,offset smonth,offset fmt,Time.wMonth invoke wsprintf,offset sDayOfWeek,offset fmt,Time.wDayOfWeek invoke wsprintf,offset sHour,offset fmt,Time.wHour add sHour[1],3 invoke wsprintf,offset sMinute,offset fmt,Time.wMinute invoke wsprintf,offset sSecond,offset fmt,Time.wSecond C4: invoke WriteFile,OutHandle,offset small,small_size,offset Written,NULL invoke WriteFile,OutHandle,offset year,year_size,offset Written,NULL invoke WriteFile,OutHandle,offset syear,4,offset Written,NULL invoke WriteFile,OutHandle,offset BR,4,offset Written,NULL invoke WriteFile,OutHandle,offset month,month_size,offset Written,NULL invoke WriteFile,OutHandle,offset smonth,2,offset Written,NULL invoke WriteFile,OutHandle,offset BR,4,offset Written,NULL invoke WriteFile,OutHandle,offset DayOfWeek,week_size,offset Written,NULL invoke WriteFile,OutHandle,offset sDayOfWeek,1,offset Written,NULL invoke WriteFile,OutHandle,offset BR,4,offset Written,NULL invoke WriteFile,OutHandle,offset cur_time,cur_size,offset Written,NULL invoke WriteFile,OutHandle,offset sHour,2,offset Written,NULL invoke WriteFile,OutHandle,offset seq,1,offset Written,NULL invoke WriteFile,OutHandle,offset sMinute,2,offset Written,NULL invoke WriteFile,OutHandle,offset seq,1,offset Written,NULL invoke WriteFile,OutHandle,offset sSecond,2,offset Written,NULL invoke WriteFile,OutHandle,offset BR,4,offset Written,NULL invoke WriteFile,OutHandle,offset end_small,end_size,offset Written,NULL Exit: popa invoke ExitProcess,NULL end start