Name:
Anonymous
2012-01-24 10:26
Bitches don't know about my FASM macros.
macro proc stackspace, name, [remaps]
{
common
label name
match =N, CALLTRACE \{
if stackspace < 0
; Forced entry
push rbp
mov rbp, rsp
else if stackspace > 0
push rbp
mov rbp, rsp
sub rsp, stackspace*8
end if
macro ret \\{
if stackspace <> 0
leave
end if
ret
\\}
macro tailcall addr \\{
if stackspace <> 0
leave
end if
jmp addr
\\}
macro sysretq \\{
if stackspace <> 0
leave
end if
sysretq
\\}
macro retj c, landing \\{
if stackspace <> 0
j\\#c leave.\\#landing
else
j\\#c landing
end if
\\}
\}
match =Y, CALLTRACE \{
push rbp
mov rbp, rsp
if stackspace > 0
sub rsp, stackspace*8
end if
macro ret \\{
leave
ret
\\}
macro tailcall addr \\{
call addr
ret
\\}
macro sysretq \\{
leave
sysretq
\\}
macro retj c, landing \\{
j\\#c leaving.\\#landing
\\}
\}
local to_restore
to_restore equ
macro _remap reg, re \{
\local prg
prg equ
irp tst, a,b,c,d \\{
match =tst, reg \\\{
append prg, r\#re
r\#re equ r\#reg\#x
append prg, r\#re\#d
r\#re\#d equ e\#reg\#x
append prg, r\#re\#w
r\#re\#w equ reg\#x
append prg, r\#re\#b
r\#re\#b equ reg\#l
append prg, r\#re\#h
r\#re\#h equ reg\#h
\\\}
\\}
irp tst, di,si,sp,bp \\{
match =tst, reg \\\{
append prg, r\#re
r\#re equ r\#reg
append prg, r\#re\#d
r\#re\#d equ e\#reg
append prg, r\#re\#w
r\#re\#w equ reg
append prg, r\#re\#b
r\#re\#b equ reg\#l
\\\}
\\}
irp tst, 8,9,10,11,12,13,14,15 \\{
match =tst, reg \\\{
append prg, r\#re
r\#re equ r\#reg
append prg, r\#re\#d
r\#re\#d equ r\#reg\#d
append prg, r\#re\#w
r\#re\#w equ r\#reg\#w
append prg, r\#re\#b
r\#re\#b equ r\#reg\#b
\\\}
\\}
append to_restore, prg
\}
macro remap [rem] \{
\forward match reg->re, rem \\{
_remap reg, re
\\}
\}
forward
match reg->re, remaps \{
_remap reg, re
\}
common
if ~ used name
display "WARN: Proc " # `name # \
" is defined but not used.", 10
end if
;if used name
macro endproc
\{
; end if
\local I, top
match I, to_restore \\{
irp top, I \\\{
restore top
\\\}
\\}
purge endproc, remap, _remap, ret, tailcall, sysretq, retj
\}
}