CGI programming in Win32Asm

It can be done, its much faster, smaller, and actually... easy...

Writing MS Windows Programs in ASM

Win32API@

Intel@ Code: 16bit, 32bit

;
; Super Simple example of CGI coding in win32 assembly language.
; (c)1999 by Jeremy Collake
; http://webpages.charter.net
; collake@charter.net
; ---------------------------------------------------------------
; 
; This little program demonstrates CGI implementation in win32asm.
; It simply dumps the value of all filled CGI environment variables 
; to the requesting agent.
; 
;
extrn 	ExitProcess:PROC
extrn   WriteConsoleA:PROC
extrn   GetStdHandle:PROC
extrn	WriteFile:PROC
extrn	ExpandEnvironmentStringsA:PROC
extrn	lstrcmp:PROC
extrn	lstrlen:PROC
extrn	GlobalAlloc:PROC
extrn	GlobalFree:PROC
.486p
locals
jumps
.model flat,STDCALL
.data
cr equ 0dh
lf equ 0ah
hstdo dd 0
hMem dd 0
byteswrote dd 0
htmlstart db 'Content-Type: text/html', cr,lf,cr,lf
html_pre  db '<HTML><BODY bgcolor="black"><FONT color="blue">Jeremy''s CGI Environment Variable Dumper<BR></FONT><FONT color="white">',0
Separator db ' = ',0
Post	  db '<BR>',0
htmlends  db '</FONT></BODY></HTML>',0
EnvVariablePointers:
	dd offset e1
	dd offset e2
	dd offset e3	
	dd offset e4
	dd offset e5	
	dd offset e6	
	dd offset e7	
	dd offset e8	
	dd offset e9	
	dd offset ea	
	dd offset eb	
	dd offset ec	
	dd offset ed	
	dd offset ee	
	dd offset ef	
	dd offset e10	
	dd offset e11	
	dd offset e12	
	dd offset e13	
	dd 0
EnvVariables:
e1 	db '%SERVER_SOFTWARE%',0
e2	db '%SERVER_NAME%',0
e3	db '%GATEWAY_INTERFACE%',0
e4	db '%SERVER_PROTOCOL%',0
e5	db '%SERVER_PORT%',0
e6	db '%REQUEST_METHOD%',0
e7	db '%PATH_INFO%',0
e8	db '%PATH_TRANSLATED%',0
e9	db '%SCRIPT_NAME%',0
ea	db '%QUERY_STRING%',0
eb	db '%REMOTE_HOST%',0
ec	db '%REMOTE_ADDR%',0
ed	db '%AUTH_TYPE%',0
ee	db '%REMOTE_USER%',0
ef	db '%REMOTE_IDENT%',0
e10	db '%CONTENT_TYPE%',0
e11	db '%CONTENT_LENGTH%',0
e12	db '%HTTP_ACCEPT%',0
e13	db '%HTTP_USER_AGENT%',0
.code
start:
        call    GetStdHandle,-11
        mov     hstdo,eax             	
	call	WriteString,offset htmlstart
	
	lea	esi,EnvVariablePointers
	jmp	mEnvLoop
EnvLoop:	
	call	GlobalFree,hMem	
mEnvLoop:	
	lodsd		
	or	eax,eax
	jz	EnvLoopEnds	
	mov	edi,eax
	call	GlobalAlloc,64,101h
	mov	hMem,eax
	call	ExpandEnvironmentStringsA, edi, eax, 100h
	call	lstrcmp,hMem,dword ptr [esi-4]
	jz	EnvLoop
	call	WriteString,dword ptr [esi-4]	
	call	WriteString,offset Separator		
	call	WriteString,hMem
	call	WriteString,offset Post
	jmp	EnvLoop
EnvLoopEnds:			
	call	WriteString,offset htmlends	
	call	ExitProcess,0	
GetSHandle proc        
        ret
GetSHandle endp

WriteString proc pString:DWORD        
	call	lstrlen,pString
        call    WriteFile,hstdo,pString,eax,offset byteswrote,0        
        ret
WriteString endp

end start
ends
		 

Try a get: On Off Checked

OR

Try a post: On Off Checked

Comments: