summaryrefslogblamecommitdiff
path: root/pasmgen-win.asm
blob: 927f9b75008549fb95e50e74f3e9c76d0df184eb (plain) (tree)
1
2
3
4
5
6
7
8
9








                                        




































                                                                                                 










                                                    




                                                        














                                       
format PE64 console

include 'win64a.inc'


section '.text' code readable executable

entry main
main:
	invoke GetCommandLine

argparse:
.skipexe:
	cmp byte [rax], 0
	je defaultargs

	cmp byte [rax], ' '
	je .pastexe
	inc rax
	jmp .skipexe
.pastexe:
	;; load arg1
	;; FIXME: at least on my system, there's 2 more spaces (needs more testing if consistent)
	mov r8, [rax+2]
	and r8, 0xFF
	test r8, r8
	jz fail
	sub r8, 48

	;; load arg2
	mov r9, [rax+4]
	and r9, 0xFF
	test r9, r9
	jz fail
	sub r9, 48

	;; load arg3
	mov r10, [rax+6]
	and r10, 0xFF
	test r10, r10
	jz fail
	sub r10, 48

	jmp generate

defaultargs:
	mov r8, qword 3
	mov r9, qword 2
	mov r10, qword 3

	jmp generate

ok:
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke WriteConsole, rax, out_buf, rsi, 0, 0
	invoke ExitProcess, 0

fail:
	invoke GetStdHandle, STD_OUTPUT_HANDLE
	invoke WriteConsole, rax, usage, usage_len, 0, 0
	invoke ExitProcess, 1

include 'pasmgen.inc'


;; win32 imports
section '.idata' import data readable

library kernel32,'kernel32.dll'
include 'api/kernel32.inc'


section '.data' data readable writeable

include 'constants.inc'

out_buf rb 64