Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

FASM vs NASM vs YASM

Name: (in alphabetic order) 2012-01-23 23:29

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
        \}
   
}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List