42 lines
907 B
PHP
42 lines
907 B
PHP
|
|
||
|
; Adapted and tested by Jacob Young (jacobly.alt@gmail.com)
|
||
|
|
||
|
include '../../linux/x64/selfhost.inc'
|
||
|
|
||
|
macro format?.MachO64? variant
|
||
|
match , variant
|
||
|
MachO.Settings.ProcessorType = CPU_TYPE_X86_64
|
||
|
MachO.Settings.FileType equ MH_OBJECT
|
||
|
include '../../../examples/x86/include/format/macho.inc'
|
||
|
use64
|
||
|
else match =executable?, variant
|
||
|
MachO.Settings.ProcessorType = CPU_TYPE_X86_64
|
||
|
MachO.Settings.BaseAddress = 0x1000
|
||
|
include '../../../examples/x86/include/format/macho.inc'
|
||
|
use64
|
||
|
else
|
||
|
err 'invalid argument'
|
||
|
end match
|
||
|
end macro
|
||
|
|
||
|
iterate reg, rdi, rsi, rdx, rcx, r8, r9
|
||
|
arguments.%? equ reg
|
||
|
end iterate
|
||
|
|
||
|
macro ccall? proc*,args&
|
||
|
local size
|
||
|
mov rbp,rsp
|
||
|
and rsp,0FFFFFFFFFFFFFFF0h
|
||
|
match any, args
|
||
|
iterate arg, args
|
||
|
if sizeof (arg)
|
||
|
lea arguments.%,[arg]
|
||
|
else if ~ arg eq arguments.%
|
||
|
mov arguments.%,arg
|
||
|
end if
|
||
|
end iterate
|
||
|
end match
|
||
|
call proc
|
||
|
mov rsp,rbp
|
||
|
end macro
|