51 lines
873 B
PHP
51 lines
873 B
PHP
|
|
||
|
include '../../examples/x86/include/80386.inc'
|
||
|
|
||
|
macro format?.MachO? variant
|
||
|
match , variant
|
||
|
MachO.Settings.FileType equ MH_OBJECT
|
||
|
include '../../examples/x86/include/format/macho.inc'
|
||
|
use32
|
||
|
else match =executable?, variant
|
||
|
MachO.Settings.BaseAddress = 0x1000
|
||
|
include '../../examples/x86/include/format/macho.inc'
|
||
|
use32
|
||
|
else
|
||
|
err 'invalid argument'
|
||
|
end match
|
||
|
end macro
|
||
|
|
||
|
macro struct? name
|
||
|
macro ends?!
|
||
|
end namespace
|
||
|
esc end struc
|
||
|
virtual at 0
|
||
|
name name
|
||
|
sizeof.name = $
|
||
|
end virtual
|
||
|
purge ends?
|
||
|
end macro
|
||
|
esc struc name
|
||
|
label . : sizeof.name
|
||
|
namespace .
|
||
|
end macro
|
||
|
|
||
|
macro ccall? proc*,args&
|
||
|
local size
|
||
|
mov ebp,esp
|
||
|
sub esp,size
|
||
|
and esp,0FFFFFFF0h
|
||
|
match any, args
|
||
|
iterate arg, args
|
||
|
mov dword [esp+(%-1)*4],arg
|
||
|
if % = 1
|
||
|
size := %%*4
|
||
|
end if
|
||
|
end iterate
|
||
|
else
|
||
|
size := 0
|
||
|
end match
|
||
|
call proc
|
||
|
mov esp,ebp
|
||
|
end macro
|