Compare commits
2 Commits
8a974e9c89
...
03b272d91e
Author | SHA1 | Date | |
---|---|---|---|
03b272d91e | |||
dceb330571 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -0,0 +1 @@
|
||||
build/**
|
30
scripts/build.ps1
Normal file
30
scripts/build.ps1
Normal file
@ -0,0 +1,30 @@
|
||||
$misc = join-path $PSScriptRoot 'helpers/misc.ps1'
|
||||
. $misc
|
||||
|
||||
$path_root = git rev-parse --show-toplevel
|
||||
$path_build = join-path $path_root 'build'
|
||||
$path_scripts = join-path $path_root 'scripts'
|
||||
$path_source = join-path $path_root 'source'
|
||||
$path_toolchain = join-path $path_root 'toolchain'
|
||||
|
||||
$path_fasm = join-path $path_toolchain 'fasmw17332'
|
||||
$path_fasmg = join-path $path_toolchain 'fasmg.kl0e'
|
||||
$path_fasm2 = join-path $path_toolchain 'fasm2'
|
||||
|
||||
$fasm = join-path $path_fasm 'FASM.EXE'
|
||||
$fasmg = join-path $path_fasmg 'fasmg.exe'
|
||||
# $fasm2 = join-path $path_fasm2 "fasmg.exe -iInclude('fasm2.inc')"
|
||||
|
||||
verify-path $path_build
|
||||
push-location $path_build
|
||||
function build-hello
|
||||
{
|
||||
$env:include = join-path $path_fasm2 'include'
|
||||
|
||||
$asm_hello = join-path $path_source 'hello.asm'
|
||||
$exe_hello = 'hello.exe'
|
||||
|
||||
& $fasmg $asm_hello $exe_hello
|
||||
}
|
||||
build-hello
|
||||
pop-location
|
82
scripts/helpers/incremental_checks.ps1
Normal file
82
scripts/helpers/incremental_checks.ps1
Normal file
@ -0,0 +1,82 @@
|
||||
# This is meant to be used with build.ps1, and is not a standalone script.
|
||||
|
||||
function check-FileForChanges
|
||||
{
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]$path_file
|
||||
)
|
||||
|
||||
if (-not (Test-Path $path_file -PathType Leaf)) {
|
||||
Write-Error "The provided path is not a valid file: $path_file"
|
||||
return $false
|
||||
}
|
||||
$file_name = Split-Path $path_file -Leaf
|
||||
$path_csv = Join-Path $path_build ($file_name + "_file_hash.csv")
|
||||
|
||||
$csv_file_hash = $null
|
||||
if (Test-Path $path_csv) {
|
||||
$csv_file_hash = Import-Csv $path_csv | Select-Object -ExpandProperty value
|
||||
}
|
||||
|
||||
$current_hash_info = Get-FileHash -Path $path_file -Algorithm MD5
|
||||
$current_file_hash = $current_hash_info.Hash
|
||||
|
||||
# Save the current hash to the CSV
|
||||
[PSCustomObject]@{
|
||||
name = $path_file
|
||||
value = $current_file_hash
|
||||
} | Export-Csv $path_csv -NoTypeInformation
|
||||
|
||||
if ($csv_file_hash -and $csv_file_hash -eq $current_file_hash) {
|
||||
return $false
|
||||
} else {
|
||||
return $true
|
||||
}
|
||||
}
|
||||
|
||||
# Check to see if the module has changed files since the last build
|
||||
function check-ModuleForChanges
|
||||
{
|
||||
param( [string]$path_module, [array]$excludes )
|
||||
|
||||
$module_name = split-path $path_module -leaf
|
||||
$path_csv = Join-Path $path_build ("module_" + $module_name + "_hashes.csv")
|
||||
|
||||
$csv_file_hashes = $null
|
||||
if ( test-path $path_csv ) {
|
||||
$csv_file_hashes = @{}
|
||||
import-csv $path_csv | foreach-object {
|
||||
$csv_file_hashes[ $_.name ] = $_.value
|
||||
}
|
||||
}
|
||||
|
||||
$file_hashes = @{}
|
||||
get-childitem -path $path_module -file -Exclude $excludes -Recurse | foreach-object {
|
||||
$id = $_.fullname
|
||||
$hash_info = get-filehash -path $id -Algorithm MD5
|
||||
$file_hashes[ $id ] = $hash_info.Hash
|
||||
}
|
||||
|
||||
$file_hashes.GetEnumerator() | foreach-object { [PSCustomObject]$_ } |
|
||||
export-csv $path_csv -NoTypeInformation
|
||||
|
||||
if ( -not $csv_file_hashes ) { return $true }
|
||||
if ( $csv_file_hashes.Count -ne $file_hashes.Count ) { return $true }
|
||||
|
||||
foreach ( $key in $csv_file_hashes.Keys ) {
|
||||
if ( $csv_file_hashes[ $key ] -ne $file_hashes[ $key ] ) {
|
||||
return $true
|
||||
}
|
||||
}
|
||||
return $false
|
||||
}
|
||||
|
||||
function mark-ModuleDirty {
|
||||
param( [string]$path_module )
|
||||
|
||||
$module_name = split-path $path_module -leaf
|
||||
$path_csv = Join-Path $path_build ("module_" + $module_name + "_hashes.csv")
|
||||
|
||||
remove-item -Force -Path $path_csv
|
||||
}
|
20
scripts/helpers/ini.ps1
Normal file
20
scripts/helpers/ini.ps1
Normal file
@ -0,0 +1,20 @@
|
||||
# This is meant to be used with build.ps1, and is not a standalone script.
|
||||
|
||||
function Get-IniContent { param([ string]$filePath )
|
||||
$ini = @{}
|
||||
$currentSection = $null
|
||||
switch -regex -file $filePath
|
||||
{
|
||||
"^\[(.+)\]$" {
|
||||
$currentSection = $matches[1].Trim()
|
||||
$ini[$currentSection] = @{}
|
||||
}
|
||||
"^(.+?)\s*=\s*(.*)" {
|
||||
$key, $value = $matches[1].Trim(), $matches[2].Trim()
|
||||
if ($null -ne $currentSection) {
|
||||
$ini[$currentSection][$key] = $value
|
||||
}
|
||||
}
|
||||
}
|
||||
return $ini
|
||||
}
|
67
scripts/helpers/misc.ps1
Normal file
67
scripts/helpers/misc.ps1
Normal file
@ -0,0 +1,67 @@
|
||||
function clone-gitrepo { param( [string] $path, [string] $url )
|
||||
if (test-path $path) {
|
||||
# git -C $path pull
|
||||
}
|
||||
else {
|
||||
Write-Host "Cloning $url ..."
|
||||
git clone $url $path
|
||||
}
|
||||
}
|
||||
|
||||
function Update-GitRepo
|
||||
{
|
||||
param( [string] $path, [string] $url, [string] $build_command )
|
||||
|
||||
if ( $build_command -eq $null ) {
|
||||
write-host "Attempted to call Update-GitRepo without build_command specified"
|
||||
return
|
||||
}
|
||||
|
||||
$repo_name = $url.Split('/')[-1].Replace('.git', '')
|
||||
|
||||
$last_built_commit = join-path $path_build "last_built_commit_$repo_name.txt"
|
||||
if ( -not(test-path -Path $path))
|
||||
{
|
||||
write-host "Cloining repo from $url to $path"
|
||||
git clone $url $path
|
||||
|
||||
write-host "Building $url"
|
||||
push-location $path
|
||||
& "$build_command"
|
||||
pop-location
|
||||
|
||||
git -C $path rev-parse HEAD | out-file $last_built_commit
|
||||
$script:binaries_dirty = $true
|
||||
write-host
|
||||
return
|
||||
}
|
||||
|
||||
git -C $path fetch
|
||||
$latest_commit_hash = git -C $path rev-parse '@{u}'
|
||||
$last_built_hash = if (Test-Path $last_built_commit) { Get-Content $last_built_commit } else { "" }
|
||||
|
||||
if ( $latest_commit_hash -eq $last_built_hash ) {
|
||||
write-host
|
||||
return
|
||||
}
|
||||
|
||||
write-host "Build out of date for: $path, updating"
|
||||
write-host 'Pulling...'
|
||||
git -C $path pull
|
||||
|
||||
write-host "Building $url"
|
||||
push-location $path
|
||||
& $build_command
|
||||
pop-location
|
||||
|
||||
$latest_commit_hash | out-file $last_built_commit
|
||||
$script:binaries_dirty = $true
|
||||
write-host
|
||||
}
|
||||
|
||||
function verify-path { param( $path )
|
||||
if (test-path $path) {return}
|
||||
|
||||
new-item -ItemType Directory -Path $path
|
||||
return
|
||||
}
|
38
source/hello.asm
Normal file
38
source/hello.asm
Normal file
@ -0,0 +1,38 @@
|
||||
include 'fasm2.inc'
|
||||
|
||||
format PE64 console
|
||||
entry main
|
||||
|
||||
section '.data' data readable writeable
|
||||
message db 'Hello World!', 13, 10
|
||||
message_len = $ - message
|
||||
written dq ?
|
||||
|
||||
section '.text' code readable executable
|
||||
main:
|
||||
sub rsp, 40 ; 32 + 8 for alignment
|
||||
|
||||
mov ecx, -11 ; STD_OUTPUT_HANDLE
|
||||
call [GetStdHandle]
|
||||
|
||||
mov rcx, rax ; Handle
|
||||
lea rdx, [message] ; Buffer
|
||||
mov r8, message_len ; Length
|
||||
lea r9, [written] ; Bytes written
|
||||
push 0 ; Reserved parameter
|
||||
sub rsp, 32 ; Shadow space
|
||||
call [WriteConsoleA]
|
||||
add rsp, 40 ; Cleanup stack + reserved param
|
||||
|
||||
xor ecx, ecx ; Exit code 0
|
||||
call [ExitProcess]
|
||||
|
||||
section '.idata' import data readable
|
||||
library kernel32,'KERNEL32.DLL'
|
||||
|
||||
include 'win64a.inc'
|
||||
|
||||
import kernel32,\
|
||||
GetStdHandle,'GetStdHandle',\
|
||||
WriteConsoleA,'WriteConsoleA',\
|
||||
ExitProcess,'ExitProcess'
|
47
toolchain/fasm2/examples/globstr/demo_linux.asm
Normal file
47
toolchain/fasm2/examples/globstr/demo_linux.asm
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
; Global strings demonstration for Linux.
|
||||
|
||||
format ELF64 executable 3
|
||||
entry start
|
||||
|
||||
include 'globstr.inc'
|
||||
include 'macro/inline.inc'
|
||||
|
||||
inlinemacro GLOB(value&)
|
||||
local data
|
||||
data GLOBSTR value,0
|
||||
return equ data
|
||||
end inlinemacro
|
||||
|
||||
segment readable executable
|
||||
|
||||
start:
|
||||
lea rsi,[GLOB("Hello, it's ")]
|
||||
call display_string
|
||||
|
||||
mov rsi,[rsp+8] ; argv
|
||||
call display_string
|
||||
|
||||
lea rsi,[GLOB(' speaking.',10)]
|
||||
call display_string
|
||||
|
||||
xor edi,edi ; exit code 0
|
||||
mov eax,60 ; sys_exit
|
||||
syscall
|
||||
|
||||
display_string: ; rsi = address of ASCIIZ string
|
||||
xor al,al
|
||||
mov rdi,rsi
|
||||
or rcx,-1
|
||||
repne scasb
|
||||
neg rcx
|
||||
sub rcx,2
|
||||
mov edi,1
|
||||
mov eax,1 ; sys_write
|
||||
mov rdx,rcx
|
||||
syscall
|
||||
retn
|
||||
|
||||
segment readable
|
||||
|
||||
GLOBSTR.here
|
44
toolchain/fasm2/examples/globstr/demo_windows.asm
Normal file
44
toolchain/fasm2/examples/globstr/demo_windows.asm
Normal file
@ -0,0 +1,44 @@
|
||||
|
||||
; Global strings demonstration for Windows.
|
||||
|
||||
include 'win64ax.inc'
|
||||
include 'globstr.inc'
|
||||
|
||||
GLOBSTR.reuse := 1
|
||||
|
||||
.data
|
||||
GLOBSTR.here
|
||||
.code
|
||||
|
||||
start:
|
||||
; Inline macro allows to put string data in any expression
|
||||
; (getting the address in return):
|
||||
inlinemacro GLOB(value)
|
||||
local data
|
||||
data GLOBSTR value,0
|
||||
return equ data
|
||||
end inlinemacro
|
||||
|
||||
lea rdx,[GLOB('Hello!')]
|
||||
invoke MessageBox, HWND_DESKTOP, rdx, GLOB('Example'), MB_OK
|
||||
|
||||
; Alternatively, replacing the "fastcall?.inline_string" macro changes
|
||||
; how the string arguments to "fastcall" and "invoke" are handled:
|
||||
macro fastcall?.inline_string var
|
||||
local data
|
||||
data GLOBSTR var,0
|
||||
redefine var data
|
||||
end macro
|
||||
; For 32-bit case it would be the "stdcall?.push_string" macro,
|
||||
; provided here for completness:
|
||||
macro stdcall?.push_string value&
|
||||
local data
|
||||
data GLOBSTR value,0
|
||||
push data
|
||||
end macro
|
||||
|
||||
invoke MessageBox, HWND_DESKTOP, 'And bye!', 'Example', MB_OK
|
||||
|
||||
invoke ExitProcess,0
|
||||
|
||||
.end start
|
82
toolchain/fasm2/examples/globstr/globstr.inc
Normal file
82
toolchain/fasm2/examples/globstr/globstr.inc
Normal file
@ -0,0 +1,82 @@
|
||||
|
||||
define GLOBSTR GLOBSTR
|
||||
|
||||
virtual at GLOBSTR.baseaddr
|
||||
GLOBSTR.buffer::
|
||||
end virtual
|
||||
|
||||
postpone
|
||||
virtual GLOBSTR.buffer
|
||||
load GLOBSTR.data:$-$$ from $$
|
||||
end virtual
|
||||
if ~ defined GLOBSTR.where
|
||||
display 'Global string data has been placed automatically at the end of the executable.',13,10
|
||||
display 'To place it elsewhere, use "GLOBSTR.here" macro in the intended location.',13,10
|
||||
GLOBSTR.baseaddr db GLOBSTR.data
|
||||
end if
|
||||
end postpone
|
||||
|
||||
macro GLOBSTR.here
|
||||
GLOBSTR.baseaddr db GLOBSTR.data
|
||||
GLOBSTR.where := GLOBSTR.baseaddr
|
||||
end macro
|
||||
|
||||
if defined GLOBSTR.reuse & GLOBSTR.reuse
|
||||
|
||||
virtual at 0
|
||||
GLOBSTR.chr_skips:: dd 256 dup ?
|
||||
end virtual
|
||||
|
||||
struc GLOBSTR data&
|
||||
local buffer,size,a,b,c,p,skip,found
|
||||
virtual at 0
|
||||
buffer:: db data
|
||||
size := $
|
||||
end virtual
|
||||
repeat 256
|
||||
store size:dword at GLOBSTR.chr_skips:(%-1)*4
|
||||
end repeat
|
||||
repeat size-1
|
||||
load a:byte from buffer:%-1
|
||||
store size-%:dword at GLOBSTR.chr_skips:a*4
|
||||
end repeat
|
||||
virtual GLOBSTR.buffer
|
||||
found = -1
|
||||
p = 0
|
||||
while p + size <= $-$$
|
||||
c = size
|
||||
while c > 0
|
||||
load a:byte from $$+p+c-1
|
||||
load b:byte from buffer:c-1
|
||||
if a <> b
|
||||
c = -1
|
||||
break
|
||||
end if
|
||||
c = c - 1
|
||||
end while
|
||||
if c = 0
|
||||
found = p
|
||||
break
|
||||
else
|
||||
load a:byte from $$+p+size-1
|
||||
load skip:dword from GLOBSTR.chr_skips:a*4
|
||||
p = p + skip
|
||||
end if
|
||||
end while
|
||||
if found >= 0
|
||||
label . at $$+found
|
||||
else
|
||||
. db data
|
||||
end if
|
||||
end virtual
|
||||
end struc
|
||||
|
||||
else
|
||||
|
||||
struc GLOBSTR data&
|
||||
virtual GLOBSTR.buffer
|
||||
. db data
|
||||
end virtual
|
||||
end struc
|
||||
|
||||
end if
|
340
toolchain/fasm2/examples/tetros/tetros.asm
Normal file
340
toolchain/fasm2/examples/tetros/tetros.asm
Normal file
@ -0,0 +1,340 @@
|
||||
|
||||
; TetrOS version 1.05
|
||||
|
||||
; Requires VGA and 80386 CPU or higher.
|
||||
; Can be run under DOSBox with the BOOT command.
|
||||
|
||||
; Version 1.01 was submitted in 2004 for a 512-byte OS contest
|
||||
; (https://web.archive.org/web/20040930044834/http://512.decard.net/)
|
||||
|
||||
; For your playing pleasure, it's a boot-sector Tetris game.
|
||||
; Keys:
|
||||
; Left - move left
|
||||
; Right - move right
|
||||
; Up - rotate
|
||||
; Down - drop
|
||||
; Esc - new game at any time
|
||||
|
||||
format binary as 'img'
|
||||
org 7C00h
|
||||
|
||||
use i386
|
||||
|
||||
ROWS = 23
|
||||
COLUMNS = 12
|
||||
BACKGROUND = 0 ; background color, 0 for randomized
|
||||
|
||||
virtual at 46Ch
|
||||
clock dw ?
|
||||
end virtual
|
||||
|
||||
virtual at bp
|
||||
current dw ?
|
||||
current_column db ?
|
||||
current_row dw ?
|
||||
filler db ?
|
||||
next dw ?
|
||||
score dw ?
|
||||
last_tick dw ?
|
||||
random dw ?
|
||||
pics_wrt_bp:
|
||||
end virtual
|
||||
|
||||
label well at 8000h
|
||||
label pics at well-2*64
|
||||
label origin at pics-(pics_wrt_bp-bp)
|
||||
|
||||
assert origin and 1 = 0
|
||||
ORIGIN_PARITY = origin and 0FFh
|
||||
while ORIGIN_PARITY and not 1
|
||||
ORIGIN_PARITY = (ORIGIN_PARITY shr 1) xor (ORIGIN_PARITY and 1)
|
||||
end while
|
||||
|
||||
include 'listing.inc'
|
||||
|
||||
xor ax,ax
|
||||
mov ss,ax
|
||||
mov sp,origin
|
||||
mov ds,ax
|
||||
mov es,ax
|
||||
push ax
|
||||
push start
|
||||
retf
|
||||
|
||||
start:
|
||||
mov al,13h
|
||||
int 10h
|
||||
|
||||
restart:
|
||||
mov bp,sp
|
||||
|
||||
xor ax,ax
|
||||
cld
|
||||
lea di,[next]
|
||||
stosw ; [next]
|
||||
stosw ; [score]
|
||||
mov ax,[clock]
|
||||
stosw ; [last_tick]
|
||||
stosw ; [random]
|
||||
|
||||
mov cx,64
|
||||
if BACKGROUND
|
||||
mov ax,0F00h + BACKGROUND
|
||||
else
|
||||
mov ah,15
|
||||
end if
|
||||
rep stosb
|
||||
mov dx,7
|
||||
@@:
|
||||
mov al,15
|
||||
stosb
|
||||
mov al,ah
|
||||
mov cl,6
|
||||
rep stosb
|
||||
mov ax,0708h
|
||||
stosb
|
||||
dec dx
|
||||
jnz @b
|
||||
mov cl,8
|
||||
rep stosb
|
||||
|
||||
or ax,-1
|
||||
stosw
|
||||
stosw
|
||||
stosw
|
||||
mov cl,ROWS+4
|
||||
mov ax,not ( (1 shl COLUMNS - 1) shl ((16-COLUMNS)/2) )
|
||||
rep stosw
|
||||
|
||||
new_piece:
|
||||
mov bx,[random]
|
||||
mov ax,257
|
||||
mul bx
|
||||
inc ax
|
||||
mov cx,43243
|
||||
div cx
|
||||
mov [random],dx
|
||||
and bx,7
|
||||
jz new_piece
|
||||
shl bx,1
|
||||
mov ax,[pieces+bx-2]
|
||||
xchg ax,[next]
|
||||
or ax,ax
|
||||
jz new_piece
|
||||
lea di,[current]
|
||||
stosw ; [current]
|
||||
mov al,6
|
||||
stosb ; [current_column]
|
||||
mov ax,well+(3+ROWS-4)*2
|
||||
stosw ; [current_row]
|
||||
mov si,no_move
|
||||
call first_move
|
||||
jz update_screen
|
||||
inc bp ; game over
|
||||
|
||||
process_key:
|
||||
xor ah,ah
|
||||
int 16h
|
||||
mov al,ah
|
||||
dec ah
|
||||
jz restart
|
||||
test bp,bp
|
||||
if ORIGIN_PARITY
|
||||
jp process_key
|
||||
else
|
||||
jnp process_key
|
||||
end if
|
||||
mov si,rotate
|
||||
cmp al,48h
|
||||
je action
|
||||
mov si,left
|
||||
cmp al,4Bh
|
||||
je action
|
||||
mov si,right
|
||||
cmp al,4Dh
|
||||
je action
|
||||
cmp al,50h
|
||||
jne main_loop
|
||||
|
||||
drop_down:
|
||||
call do_move_down
|
||||
jz drop_down
|
||||
|
||||
action:
|
||||
call do_move
|
||||
|
||||
update_screen:
|
||||
mov bx,15
|
||||
mov dx,12h
|
||||
mov ah,2
|
||||
int 10h
|
||||
mov cl,84h
|
||||
print_score:
|
||||
mov ax,[score]
|
||||
rol ax,cl
|
||||
and al,0Fh
|
||||
cmp al,10
|
||||
sbb al,69h
|
||||
das
|
||||
mov ah,0Eh
|
||||
int 10h
|
||||
add cl,84h
|
||||
jns print_score
|
||||
xor bl,15 xor 7
|
||||
jnp print_score
|
||||
push es
|
||||
push 0A000h
|
||||
pop es
|
||||
mov si,well+3*2
|
||||
mov di,320*184+160-(COLUMNS*8)/2
|
||||
draw_well:
|
||||
lodsw
|
||||
push si
|
||||
mov dl,COLUMNS
|
||||
xchg bx,ax
|
||||
shr bx,(16-COLUMNS)/2
|
||||
call draw_row
|
||||
pop si
|
||||
cmp si,well+(3+ROWS)*2
|
||||
jb draw_well
|
||||
mov di,320*100+250
|
||||
mov bx,[next]
|
||||
draw_preview:
|
||||
mov dl,4
|
||||
call draw_row
|
||||
cmp di,320*68
|
||||
ja draw_preview
|
||||
pop es
|
||||
|
||||
main_loop:
|
||||
mov ah,1
|
||||
int 16h
|
||||
jnz process_key
|
||||
mov al,-1
|
||||
xor al,byte [score+1]
|
||||
and al,11b
|
||||
mov cx,[clock]
|
||||
sub cx,[last_tick]
|
||||
cmp cl,al
|
||||
jbe main_loop
|
||||
add [last_tick],cx
|
||||
call do_move_down
|
||||
jz update_screen
|
||||
movzx dx,byte [current_row]
|
||||
shr dx,2
|
||||
mov si,well+3*2
|
||||
mov di,si
|
||||
check_row:
|
||||
lodsw
|
||||
inc ax
|
||||
jz remove_row
|
||||
dec ax
|
||||
stosw
|
||||
jmp check_next_row
|
||||
remove_row:
|
||||
shl dx,1
|
||||
check_next_row:
|
||||
cmp di,well+(3+ROWS)*2
|
||||
jb check_row
|
||||
add [score],dx
|
||||
jmp new_piece
|
||||
|
||||
draw_row:
|
||||
push di
|
||||
blit_row:
|
||||
shr bx,1
|
||||
mov si,pics
|
||||
jnc blit_block
|
||||
add si,64
|
||||
blit_block:
|
||||
mov cx,8
|
||||
rep movsb
|
||||
add di,320-8
|
||||
test si,111111b
|
||||
jnz blit_block
|
||||
sub di,320*8-8
|
||||
dec dx
|
||||
jnz blit_row
|
||||
pop di
|
||||
sub di,320*8
|
||||
ret
|
||||
|
||||
do_move_down:
|
||||
mov si,down
|
||||
do_move:
|
||||
mov al,1
|
||||
call on_piece
|
||||
first_move:
|
||||
push dword [current]
|
||||
call si
|
||||
xor ax,ax
|
||||
call on_piece
|
||||
inc ax
|
||||
pop edx
|
||||
test ah,ah
|
||||
jz @f
|
||||
mov dword [current],edx
|
||||
@@:
|
||||
jmp on_piece
|
||||
down:
|
||||
sub byte [current_row],2
|
||||
ret
|
||||
left:
|
||||
dec [current_column]
|
||||
ret
|
||||
right:
|
||||
inc [current_column]
|
||||
no_move:
|
||||
ret
|
||||
rotate:
|
||||
mov cx,3
|
||||
@@:
|
||||
bt [current],cx
|
||||
rcl dx,1
|
||||
add cl,4
|
||||
cmp cl,16
|
||||
jb @b
|
||||
sub cl,17
|
||||
jnc @b
|
||||
mov [current],dx
|
||||
ret
|
||||
|
||||
on_piece:
|
||||
pushf
|
||||
mov di,[current_row]
|
||||
mov bx,4
|
||||
on_piece_row:
|
||||
mov dx,[current]
|
||||
mov cl,bh
|
||||
shr dx,cl
|
||||
and dx,1111b
|
||||
mov cl,[current_column]
|
||||
add cl,4
|
||||
shl edx,cl
|
||||
shr edx,4
|
||||
test al,al
|
||||
jz @f
|
||||
xor [di],dx
|
||||
@@:
|
||||
test [di],dx
|
||||
jz @f
|
||||
inc ah
|
||||
@@:
|
||||
add bh,4
|
||||
scasw
|
||||
dec bl
|
||||
jnz on_piece_row
|
||||
popf
|
||||
ret
|
||||
|
||||
rb 510 - ($% + signature - pieces)
|
||||
|
||||
pieces dw 0010001000100010b
|
||||
dw 0010011000100000b
|
||||
dw 0010001001100000b
|
||||
dw 0100010001100000b
|
||||
dw 0000011001100000b
|
||||
dw 0100011000100000b
|
||||
dw 0010011001000000b
|
||||
|
||||
signature dw 0AA55h
|
3
toolchain/fasm2/fasm2
Normal file
3
toolchain/fasm2/fasm2
Normal file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
DIR="$( dirname -- "$( readlink -f -- "$0"; )"; )"
|
||||
INCLUDE="$DIR/include;$INCLUDE" "$DIR/fasmg.x64" -iInclude\ \'fasm2.inc\' "$@"
|
5
toolchain/fasm2/fasm2.cmd
Normal file
5
toolchain/fasm2/fasm2.cmd
Normal file
@ -0,0 +1,5 @@
|
||||
@echo off
|
||||
setlocal
|
||||
set include=%~dp0include;%include%
|
||||
"%~dp0fasmg" -iInclude('fasm2.inc') %*
|
||||
endlocal
|
BIN
toolchain/fasm2/fasmg.exe
Normal file
BIN
toolchain/fasm2/fasmg.exe
Normal file
Binary file not shown.
BIN
toolchain/fasm2/fasmg.x64
Normal file
BIN
toolchain/fasm2/fasmg.x64
Normal file
Binary file not shown.
BIN
toolchain/fasm2/fasmgw.exe
Normal file
BIN
toolchain/fasm2/fasmgw.exe
Normal file
Binary file not shown.
40
toolchain/fasm2/fasmgw.ini
Normal file
40
toolchain/fasm2/fasmgw.ini
Normal file
@ -0,0 +1,40 @@
|
||||
[Environment]
|
||||
Include=C:\projects\asm_dip\toolchain\fasm2\include
|
||||
[Compiler]
|
||||
SourceHeader=include 'fasm2.inc'
|
||||
MaxPasses=100
|
||||
MaxRecursion=10000
|
||||
Priority=0
|
||||
[Options]
|
||||
SecureSelection=0
|
||||
AutoBrackets=0
|
||||
AutoIndent=1
|
||||
SmartTabs=1
|
||||
OptimalFill=0
|
||||
ReviveDeadKeys=0
|
||||
ConsoleCaret=1
|
||||
TimeScroll=0
|
||||
[Colors]
|
||||
Text=0,0,0
|
||||
Background=255,255,255
|
||||
SelectionText=255,255,255
|
||||
SelectionBackground=0,120,215
|
||||
Symbols=48,48,240
|
||||
Numbers=0,144,0
|
||||
Strings=176,0,0
|
||||
Comments=128,128,128
|
||||
[Font]
|
||||
Face=Courier New
|
||||
Height=16
|
||||
Width=0
|
||||
Weight=0
|
||||
Italic=0
|
||||
CharSet=1
|
||||
[Window]
|
||||
Top=64
|
||||
Left=64
|
||||
Right=564
|
||||
Bottom=564
|
||||
Maximized=0
|
||||
[Help]
|
||||
Path=
|
40
toolchain/fasm2/include/@@.inc
Normal file
40
toolchain/fasm2/include/@@.inc
Normal file
@ -0,0 +1,40 @@
|
||||
|
||||
; Extended implementation of anonymous labels.
|
||||
|
||||
; Classic use like:
|
||||
; @@: ; A
|
||||
; je @f ; -> B
|
||||
; loop @b ; -> A
|
||||
; @@: ; B
|
||||
|
||||
; Additional sets of labels are available for more flexibility:
|
||||
; @1: ; A
|
||||
; je @1f ; -> C
|
||||
; jg @2f ; -> B
|
||||
; loop @1b ; -> A
|
||||
; @2: ; B
|
||||
; loop @2b ; -> B
|
||||
; @1: ; C
|
||||
|
||||
macro @INIT name,prefix
|
||||
|
||||
macro name tail&
|
||||
match label, prefix#f?
|
||||
label tail
|
||||
prefix#b? equ prefix#f?
|
||||
prefix#r? equ prefix#f?
|
||||
end match
|
||||
local anonymous
|
||||
prefix#f? equ anonymous
|
||||
end macro
|
||||
|
||||
define prefix#f?
|
||||
name
|
||||
|
||||
end macro
|
||||
|
||||
@INIT @@,@
|
||||
|
||||
repeat 10, i:0
|
||||
@INIT @#i,@#i
|
||||
end repeat
|
97
toolchain/fasm2/include/align.inc
Normal file
97
toolchain/fasm2/include/align.inc
Normal file
@ -0,0 +1,97 @@
|
||||
|
||||
; Universal implementation of ALIGN.
|
||||
|
||||
; Basic use:
|
||||
; align 4
|
||||
|
||||
; Ensure specific offset relative to an aligned address:
|
||||
; align 4 | 1
|
||||
|
||||
; Provide information for the alignment of relocatable symbols:
|
||||
; align.assume rbp, 16
|
||||
|
||||
; element RELOCATABLE_BASE
|
||||
; org RELOCATABLE_BASE
|
||||
; align.assume RELOCATABLE_BASE, 10000h
|
||||
|
||||
; Pad with value:
|
||||
; align 16, 90h
|
||||
|
||||
; Use a custom command to pad:
|
||||
; align 16, db # dup ($ and 0FFh)
|
||||
|
||||
define align? align
|
||||
|
||||
align?.count = 0
|
||||
|
||||
calminstruction align?.assume? address*, alignment*
|
||||
local index, symbol
|
||||
compute address, address
|
||||
compute alignment, alignment
|
||||
check address relativeto 0
|
||||
jyes absolute
|
||||
compute index, 0
|
||||
find:
|
||||
check index = align.count
|
||||
jyes update
|
||||
arrange symbol, align.=address#index
|
||||
check address relativeto symbol
|
||||
jyes update
|
||||
compute index, index + 1
|
||||
jump find
|
||||
update:
|
||||
arrange symbol, align.=address#index
|
||||
publish symbol, address
|
||||
arrange symbol, align.=alignment#index
|
||||
publish symbol, alignment
|
||||
compute align.count, align.count + 1
|
||||
exit
|
||||
absolute:
|
||||
check address mod alignment = 0
|
||||
jyes ok
|
||||
err 'false assumption about absolute address'
|
||||
ok:
|
||||
end calminstruction
|
||||
|
||||
calminstruction align? alignment*, filler:rb #
|
||||
local index, address, offset, symbol
|
||||
compute offset, 0
|
||||
match alignment | offset, alignment
|
||||
compute alignment, alignment
|
||||
check alignment >= 0
|
||||
jyes alignment_ok
|
||||
err 'invalid alignment value'
|
||||
exit
|
||||
alignment_ok:
|
||||
compute address, $
|
||||
check address relativeto 0
|
||||
jyes align
|
||||
compute index, 0
|
||||
find:
|
||||
check index = align.count
|
||||
jyes fail
|
||||
arrange symbol, align.=address#index
|
||||
check address relativeto symbol
|
||||
jyes found
|
||||
compute index, index + 1
|
||||
jump find
|
||||
found:
|
||||
compute address, address - symbol
|
||||
arrange symbol, align.=alignment#index
|
||||
check symbol > 0 & symbol mod alignment = 0
|
||||
jyes align
|
||||
fail:
|
||||
err 'variable portion of the address is not aligned enough'
|
||||
exit
|
||||
align:
|
||||
compute alignment, (alignment-1) - (address-offset+alignment-1) mod alignment
|
||||
local prefix, suffix
|
||||
match prefix? # suffix?, filler
|
||||
jyes custom
|
||||
arrange alignment, =db alignment =dup (filler)
|
||||
assemble alignment
|
||||
exit
|
||||
custom:
|
||||
arrange alignment, prefix alignment suffix
|
||||
assemble alignment
|
||||
end calminstruction
|
535
toolchain/fasm2/include/api/advapi32.inc
Normal file
535
toolchain/fasm2/include/api/advapi32.inc
Normal file
@ -0,0 +1,535 @@
|
||||
|
||||
; ADVAPI32 API calls
|
||||
|
||||
import advapi32,\
|
||||
AbortSystemShutdownA,'AbortSystemShutdownA',\
|
||||
AbortSystemShutdownW,'AbortSystemShutdownW',\
|
||||
AccessCheck,'AccessCheck',\
|
||||
AccessCheckAndAuditAlarmA,'AccessCheckAndAuditAlarmA',\
|
||||
AccessCheckAndAuditAlarmW,'AccessCheckAndAuditAlarmW',\
|
||||
AccessCheckByType,'AccessCheckByType',\
|
||||
AccessCheckByTypeAndAuditAlarmA,'AccessCheckByTypeAndAuditAlarmA',\
|
||||
AccessCheckByTypeAndAuditAlarmW,'AccessCheckByTypeAndAuditAlarmW',\
|
||||
AccessCheckByTypeResultList,'AccessCheckByTypeResultList',\
|
||||
AccessCheckByTypeResultListAndAuditAlarmA,'AccessCheckByTypeResultListAndAuditAlarmA',\
|
||||
AccessCheckByTypeResultListAndAuditAlarmW,'AccessCheckByTypeResultListAndAuditAlarmW',\
|
||||
AddAccessAllowedAce,'AddAccessAllowedAce',\
|
||||
AddAccessAllowedAceEx,'AddAccessAllowedAceEx',\
|
||||
AddAccessAllowedObjectAce,'AddAccessAllowedObjectAce',\
|
||||
AddAccessDeniedAce,'AddAccessDeniedAce',\
|
||||
AddAccessDeniedAceEx,'AddAccessDeniedAceEx',\
|
||||
AddAccessDeniedObjectAce,'AddAccessDeniedObjectAce',\
|
||||
AddAce,'AddAce',\
|
||||
AddAuditAccessAce,'AddAuditAccessAce',\
|
||||
AddAuditAccessAceEx,'AddAuditAccessAceEx',\
|
||||
AddAuditAccessObjectAce,'AddAuditAccessObjectAce',\
|
||||
AdjustTokenGroups,'AdjustTokenGroups',\
|
||||
AdjustTokenPrivileges,'AdjustTokenPrivileges',\
|
||||
AllocateAndInitializeSid,'AllocateAndInitializeSid',\
|
||||
AllocateLocallyUniqueId,'AllocateLocallyUniqueId',\
|
||||
AreAllAccessesGranted,'AreAllAccessesGranted',\
|
||||
AreAnyAccessesGranted,'AreAnyAccessesGranted',\
|
||||
BackupEventLogA,'BackupEventLogA',\
|
||||
BackupEventLogW,'BackupEventLogW',\
|
||||
BuildExplicitAccessWithNameA,'BuildExplicitAccessWithNameA',\
|
||||
BuildExplicitAccessWithNameW,'BuildExplicitAccessWithNameW',\
|
||||
BuildImpersonateExplicitAccessWithNameA,'BuildImpersonateExplicitAccessWithNameA',\
|
||||
BuildImpersonateExplicitAccessWithNameW,'BuildImpersonateExplicitAccessWithNameW',\
|
||||
BuildImpersonateTrusteeA,'BuildImpersonateTrusteeA',\
|
||||
BuildImpersonateTrusteeW,'BuildImpersonateTrusteeW',\
|
||||
BuildSecurityDescriptorA,'BuildSecurityDescriptorA',\
|
||||
BuildSecurityDescriptorW,'BuildSecurityDescriptorW',\
|
||||
BuildTrusteeWithNameA,'BuildTrusteeWithNameA',\
|
||||
BuildTrusteeWithNameW,'BuildTrusteeWithNameW',\
|
||||
BuildTrusteeWithSidA,'BuildTrusteeWithSidA',\
|
||||
BuildTrusteeWithSidW,'BuildTrusteeWithSidW',\
|
||||
CancelOverlappedAccess,'CancelOverlappedAccess',\
|
||||
ChangeServiceConfig2A,'ChangeServiceConfig2A',\
|
||||
ChangeServiceConfig2W,'ChangeServiceConfig2W',\
|
||||
ChangeServiceConfigA,'ChangeServiceConfigA',\
|
||||
ChangeServiceConfigW,'ChangeServiceConfigW',\
|
||||
ClearEventLogA,'ClearEventLogA',\
|
||||
ClearEventLogW,'ClearEventLogW',\
|
||||
CloseEventLog,'CloseEventLog',\
|
||||
CloseRaw,'CloseRaw',\
|
||||
CloseServiceHandle,'CloseServiceHandle',\
|
||||
ControlService,'ControlService',\
|
||||
ConvertAccessToSecurityDescriptorA,'ConvertAccessToSecurityDescriptorA',\
|
||||
ConvertAccessToSecurityDescriptorW,'ConvertAccessToSecurityDescriptorW',\
|
||||
ConvertSecurityDescriptorToAccessA,'ConvertSecurityDescriptorToAccessA',\
|
||||
ConvertSecurityDescriptorToAccessW,'ConvertSecurityDescriptorToAccessW',\
|
||||
ConvertSecurityDescriptorToAccessNamedA,'ConvertSecurityDescriptorToAccessNamedA',\
|
||||
ConvertSecurityDescriptorToAccessNamedW,'ConvertSecurityDescriptorToAccessNamedW',\
|
||||
ConvertToAutoInheritPrivateObjectSecurity,'ConvertToAutoInheritPrivateObjectSecurity',\
|
||||
CopySid,'CopySid',\
|
||||
CreatePrivateObjectSecurity,'CreatePrivateObjectSecurity',\
|
||||
CreatePrivateObjectSecurityEx,'CreatePrivateObjectSecurityEx',\
|
||||
CreateProcessAsUserA,'CreateProcessAsUserA',\
|
||||
CreateProcessAsUserW,'CreateProcessAsUserW',\
|
||||
CreateRestrictedToken,'CreateRestrictedToken',\
|
||||
CreateServiceA,'CreateServiceA',\
|
||||
CreateServiceW,'CreateServiceW',\
|
||||
CryptAcquireContextA,'CryptAcquireContextA',\
|
||||
CryptAcquireContextW,'CryptAcquireContextW',\
|
||||
CryptContextAddRef,'CryptContextAddRef',\
|
||||
CryptCreateHash,'CryptCreateHash',\
|
||||
CryptDecrypt,'CryptDecrypt',\
|
||||
CryptDeriveKey,'CryptDeriveKey',\
|
||||
CryptDestroyHash,'CryptDestroyHash',\
|
||||
CryptDestroyKey,'CryptDestroyKey',\
|
||||
CryptDuplicateHash,'CryptDuplicateHash',\
|
||||
CryptDuplicateKey,'CryptDuplicateKey',\
|
||||
CryptEncrypt,'CryptEncrypt',\
|
||||
CryptEnumProviderTypesA,'CryptEnumProviderTypesA',\
|
||||
CryptEnumProviderTypesW,'CryptEnumProviderTypesW',\
|
||||
CryptEnumProvidersA,'CryptEnumProvidersA',\
|
||||
CryptEnumProvidersW,'CryptEnumProvidersW',\
|
||||
CryptExportKey,'CryptExportKey',\
|
||||
CryptGenKey,'CryptGenKey',\
|
||||
CryptGenRandom,'CryptGenRandom',\
|
||||
CryptGetDefaultProviderA,'CryptGetDefaultProviderA',\
|
||||
CryptGetDefaultProviderW,'CryptGetDefaultProviderW',\
|
||||
CryptGetHashParam,'CryptGetHashParam',\
|
||||
CryptGetKeyParam,'CryptGetKeyParam',\
|
||||
CryptGetProvParam,'CryptGetProvParam',\
|
||||
CryptGetUserKey,'CryptGetUserKey',\
|
||||
CryptHashData,'CryptHashData',\
|
||||
CryptHashSessionKey,'CryptHashSessionKey',\
|
||||
CryptImportKey,'CryptImportKey',\
|
||||
CryptReleaseContext,'CryptReleaseContext',\
|
||||
CryptSetHashParam,'CryptSetHashParam',\
|
||||
CryptSetKeyParam,'CryptSetKeyParam',\
|
||||
CryptSetProvParam,'CryptSetProvParam',\
|
||||
CryptSetProviderA,'CryptSetProviderA',\
|
||||
CryptSetProviderW,'CryptSetProviderW',\
|
||||
CryptSetProviderExA,'CryptSetProviderExA',\
|
||||
CryptSetProviderExW,'CryptSetProviderExW',\
|
||||
CryptSignHashA,'CryptSignHashA',\
|
||||
CryptSignHashW,'CryptSignHashW',\
|
||||
CryptVerifySignatureA,'CryptVerifySignatureA',\
|
||||
CryptVerifySignatureW,'CryptVerifySignatureW',\
|
||||
DecryptFileA,'DecryptFileA',\
|
||||
DecryptFileW,'DecryptFileW',\
|
||||
DeleteAce,'DeleteAce',\
|
||||
DeleteService,'DeleteService',\
|
||||
DeregisterEventSource,'DeregisterEventSource',\
|
||||
DestroyPrivateObjectSecurity,'DestroyPrivateObjectSecurity',\
|
||||
DuplicateToken,'DuplicateToken',\
|
||||
DuplicateTokenEx,'DuplicateTokenEx',\
|
||||
ElfBackupEventLogFileA,'ElfBackupEventLogFileA',\
|
||||
ElfBackupEventLogFileW,'ElfBackupEventLogFileW',\
|
||||
ElfChangeNotify,'ElfChangeNotify',\
|
||||
ElfClearEventLogFileA,'ElfClearEventLogFileA',\
|
||||
ElfClearEventLogFileW,'ElfClearEventLogFileW',\
|
||||
ElfCloseEventLog,'ElfCloseEventLog',\
|
||||
ElfDeregisterEventSource,'ElfDeregisterEventSource',\
|
||||
ElfNumberOfRecords,'ElfNumberOfRecords',\
|
||||
ElfOldestRecord,'ElfOldestRecord',\
|
||||
ElfOpenBackupEventLogA,'ElfOpenBackupEventLogA',\
|
||||
ElfOpenBackupEventLogW,'ElfOpenBackupEventLogW',\
|
||||
ElfOpenEventLogA,'ElfOpenEventLogA',\
|
||||
ElfOpenEventLogW,'ElfOpenEventLogW',\
|
||||
ElfReadEventLogA,'ElfReadEventLogA',\
|
||||
ElfReadEventLogW,'ElfReadEventLogW',\
|
||||
ElfRegisterEventSourceA,'ElfRegisterEventSourceA',\
|
||||
ElfRegisterEventSourceW,'ElfRegisterEventSourceW',\
|
||||
ElfReportEventA,'ElfReportEventA',\
|
||||
ElfReportEventW,'ElfReportEventW',\
|
||||
EncryptFileA,'EncryptFileA',\
|
||||
EncryptFileW,'EncryptFileW',\
|
||||
EnumDependentServicesA,'EnumDependentServicesA',\
|
||||
EnumDependentServicesW,'EnumDependentServicesW',\
|
||||
EnumServicesStatusA,'EnumServicesStatusA',\
|
||||
EnumServicesStatusW,'EnumServicesStatusW',\
|
||||
EqualPrefixSid,'EqualPrefixSid',\
|
||||
EqualSid,'EqualSid',\
|
||||
FindFirstFreeAce,'FindFirstFreeAce',\
|
||||
FreeSid,'FreeSid',\
|
||||
GetAccessPermissionsForObjectA,'GetAccessPermissionsForObjectA',\
|
||||
GetAccessPermissionsForObjectW,'GetAccessPermissionsForObjectW',\
|
||||
GetAce,'GetAce',\
|
||||
GetAclInformation,'GetAclInformation',\
|
||||
GetAuditedPermissionsFromAclA,'GetAuditedPermissionsFromAclA',\
|
||||
GetAuditedPermissionsFromAclW,'GetAuditedPermissionsFromAclW',\
|
||||
GetCurrentHwProfileA,'GetCurrentHwProfileA',\
|
||||
GetCurrentHwProfileW,'GetCurrentHwProfileW',\
|
||||
GetEffectiveRightsFromAclA,'GetEffectiveRightsFromAclA',\
|
||||
GetEffectiveRightsFromAclW,'GetEffectiveRightsFromAclW',\
|
||||
GetExplicitEntriesFromAclA,'GetExplicitEntriesFromAclA',\
|
||||
GetExplicitEntriesFromAclW,'GetExplicitEntriesFromAclW',\
|
||||
GetFileSecurityA,'GetFileSecurityA',\
|
||||
GetFileSecurityW,'GetFileSecurityW',\
|
||||
GetKernelObjectSecurity,'GetKernelObjectSecurity',\
|
||||
GetLengthSid,'GetLengthSid',\
|
||||
GetMultipleTrusteeA,'GetMultipleTrusteeA',\
|
||||
GetMultipleTrusteeW,'GetMultipleTrusteeW',\
|
||||
GetMultipleTrusteeOperationA,'GetMultipleTrusteeOperationA',\
|
||||
GetMultipleTrusteeOperationW,'GetMultipleTrusteeOperationW',\
|
||||
GetNamedSecurityInfoA,'GetNamedSecurityInfoA',\
|
||||
GetNamedSecurityInfoW,'GetNamedSecurityInfoW',\
|
||||
GetNamedSecurityInfoExA,'GetNamedSecurityInfoExA',\
|
||||
GetNamedSecurityInfoExW,'GetNamedSecurityInfoExW',\
|
||||
GetNumberOfEventLogRecords,'GetNumberOfEventLogRecords',\
|
||||
GetOldestEventLogRecord,'GetOldestEventLogRecord',\
|
||||
GetOverlappedAccessResults,'GetOverlappedAccessResults',\
|
||||
GetPrivateObjectSecurity,'GetPrivateObjectSecurity',\
|
||||
GetSecurityDescriptorControl,'GetSecurityDescriptorControl',\
|
||||
GetSecurityDescriptorDacl,'GetSecurityDescriptorDacl',\
|
||||
GetSecurityDescriptorGroup,'GetSecurityDescriptorGroup',\
|
||||
GetSecurityDescriptorLength,'GetSecurityDescriptorLength',\
|
||||
GetSecurityDescriptorOwner,'GetSecurityDescriptorOwner',\
|
||||
GetSecurityDescriptorSacl,'GetSecurityDescriptorSacl',\
|
||||
GetSecurityInfo,'GetSecurityInfo',\
|
||||
GetSecurityInfoExA,'GetSecurityInfoExA',\
|
||||
GetSecurityInfoExW,'GetSecurityInfoExW',\
|
||||
GetServiceDisplayNameA,'GetServiceDisplayNameA',\
|
||||
GetServiceDisplayNameW,'GetServiceDisplayNameW',\
|
||||
GetServiceKeyNameA,'GetServiceKeyNameA',\
|
||||
GetServiceKeyNameW,'GetServiceKeyNameW',\
|
||||
GetSidLengthRequiredA,'GetSidLengthRequiredA',\
|
||||
GetSidLengthRequiredW,'GetSidLengthRequiredW',\
|
||||
GetSidSubAuthority,'GetSidSubAuthority',\
|
||||
GetSidSubAuthorityCount,'GetSidSubAuthorityCount',\
|
||||
GetTokenInformation,'GetTokenInformation',\
|
||||
GetTrusteeNameA,'GetTrusteeNameA',\
|
||||
GetTrusteeNameW,'GetTrusteeNameW',\
|
||||
GetTrusteeTypeA,'GetTrusteeTypeA',\
|
||||
GetTrusteeTypeW,'GetTrusteeTypeW',\
|
||||
GetUserNameA,'GetUserNameA',\
|
||||
GetUserNameW,'GetUserNameW',\
|
||||
I_ScSetServiceBitsA,'I_ScSetServiceBitsA',\
|
||||
I_ScSetServiceBitsW,'I_ScSetServiceBitsW',\
|
||||
ImpersonateLoggedOnUser,'ImpersonateLoggedOnUser',\
|
||||
ImpersonateNamedPipeClient,'ImpersonateNamedPipeClient',\
|
||||
ImpersonateSelf,'ImpersonateSelf',\
|
||||
InitializeAcl,'InitializeAcl',\
|
||||
InitializeSecurityDescriptor,'InitializeSecurityDescriptor',\
|
||||
InitializeSid,'InitializeSid',\
|
||||
InitiateSystemShutdownA,'InitiateSystemShutdownA',\
|
||||
InitiateSystemShutdownW,'InitiateSystemShutdownW',\
|
||||
IsTextUnicode,'IsTextUnicode',\
|
||||
IsTokenRestricted,'IsTokenRestricted',\
|
||||
IsValidAcl,'IsValidAcl',\
|
||||
IsValidSecurityDescriptor,'IsValidSecurityDescriptor',\
|
||||
IsValidSid,'IsValidSid',\
|
||||
LockServiceDatabase,'LockServiceDatabase',\
|
||||
LogonUserA,'LogonUserA',\
|
||||
LogonUserW,'LogonUserW',\
|
||||
LookupAccountNameA,'LookupAccountNameA',\
|
||||
LookupAccountNameW,'LookupAccountNameW',\
|
||||
LookupAccountSidA,'LookupAccountSidA',\
|
||||
LookupAccountSidW,'LookupAccountSidW',\
|
||||
LookupPrivilegeDisplayNameA,'LookupPrivilegeDisplayNameA',\
|
||||
LookupPrivilegeDisplayNameW,'LookupPrivilegeDisplayNameW',\
|
||||
LookupPrivilegeNameA,'LookupPrivilegeNameA',\
|
||||
LookupPrivilegeNameW,'LookupPrivilegeNameW',\
|
||||
LookupPrivilegeValueA,'LookupPrivilegeValueA',\
|
||||
LookupPrivilegeValueW,'LookupPrivilegeValueW',\
|
||||
LookupSecurityDescriptorPartsA,'LookupSecurityDescriptorPartsA',\
|
||||
LookupSecurityDescriptorPartsW,'LookupSecurityDescriptorPartsW',\
|
||||
LsaAddAccountRights,'LsaAddAccountRights',\
|
||||
LsaAddPrivilegesToAccount,'LsaAddPrivilegesToAccount',\
|
||||
LsaClearAuditLog,'LsaClearAuditLog',\
|
||||
LsaClose,'LsaClose',\
|
||||
LsaCreateAccount,'LsaCreateAccount',\
|
||||
LsaCreateSecret,'LsaCreateSecret',\
|
||||
LsaCreateTrustedDomain,'LsaCreateTrustedDomain',\
|
||||
LsaCreateTrustedDomainEx,'LsaCreateTrustedDomainEx',\
|
||||
LsaDelete,'LsaDelete',\
|
||||
LsaDeleteTrustedDomain,'LsaDeleteTrustedDomain',\
|
||||
LsaEnumerateAccountRights,'LsaEnumerateAccountRights',\
|
||||
LsaEnumerateAccounts,'LsaEnumerateAccounts',\
|
||||
LsaEnumerateAccountsWithUserRight,'LsaEnumerateAccountsWithUserRight',\
|
||||
LsaEnumeratePrivileges,'LsaEnumeratePrivileges',\
|
||||
LsaEnumeratePrivilegesOfAccount,'LsaEnumeratePrivilegesOfAccount',\
|
||||
LsaEnumerateTrustedDomains,'LsaEnumerateTrustedDomains',\
|
||||
LsaEnumerateTrustedDomainsEx,'LsaEnumerateTrustedDomainsEx',\
|
||||
LsaFreeMemory,'LsaFreeMemory',\
|
||||
LsaGetQuotasForAccount,'LsaGetQuotasForAccount',\
|
||||
LsaGetSystemAccessAccount,'LsaGetSystemAccessAccount',\
|
||||
LsaGetUserName,'LsaGetUserName',\
|
||||
LsaICLookupNames,'LsaICLookupNames',\
|
||||
LsaICLookupSids,'LsaICLookupSids',\
|
||||
LsaIGetTrustedDomainAuthInfoBlobs,'LsaIGetTrustedDomainAuthInfoBlobs',\
|
||||
LsaISetTrustedDomainAuthInfoBlobs,'LsaISetTrustedDomainAuthInfoBlobs',\
|
||||
LsaLookupNames,'LsaLookupNames',\
|
||||
LsaLookupPrivilegeDisplayName,'LsaLookupPrivilegeDisplayName',\
|
||||
LsaLookupPrivilegeName,'LsaLookupPrivilegeName',\
|
||||
LsaLookupPrivilegeValue,'LsaLookupPrivilegeValue',\
|
||||
LsaLookupSids,'LsaLookupSids',\
|
||||
LsaNtStatusToWinError,'LsaNtStatusToWinError',\
|
||||
LsaOpenAccount,'LsaOpenAccount',\
|
||||
LsaOpenPolicy,'LsaOpenPolicy',\
|
||||
LsaOpenSecret,'LsaOpenSecret',\
|
||||
LsaOpenTrustedDomain,'LsaOpenTrustedDomain',\
|
||||
LsaQueryDomainInformationPolicy,'LsaQueryDomainInformationPolicy',\
|
||||
LsaQueryInfoTrustedDomain,'LsaQueryInfoTrustedDomain',\
|
||||
LsaQueryInformationPolicy,'LsaQueryInformationPolicy',\
|
||||
LsaQueryLocalInformationPolicy,'LsaQueryLocalInformationPolicy',\
|
||||
LsaQuerySecret,'LsaQuerySecret',\
|
||||
LsaQuerySecurityObject,'LsaQuerySecurityObject',\
|
||||
LsaQueryTrustedDomainInfo,'LsaQueryTrustedDomainInfo',\
|
||||
LsaQueryTrustedDomainInfoByName,'LsaQueryTrustedDomainInfoByName',\
|
||||
LsaRemoveAccountRights,'LsaRemoveAccountRights',\
|
||||
LsaRemovePrivilegesFromAccount,'LsaRemovePrivilegesFromAccount',\
|
||||
LsaRetrievePrivateData,'LsaRetrievePrivateData',\
|
||||
LsaSetDomainInformationPolicy,'LsaSetDomainInformationPolicy',\
|
||||
LsaSetInformationPolicy,'LsaSetInformationPolicy',\
|
||||
LsaSetInformationTrustedDomain,'LsaSetInformationTrustedDomain',\
|
||||
LsaSetLocalInformationPolicy,'LsaSetLocalInformationPolicy',\
|
||||
LsaSetQuotasForAccount,'LsaSetQuotasForAccount',\
|
||||
LsaSetSecret,'LsaSetSecret',\
|
||||
LsaSetSecurityObject,'LsaSetSecurityObject',\
|
||||
LsaSetSystemAccessAccount,'LsaSetSystemAccessAccount',\
|
||||
LsaSetTrustedDomainInfoByName,'LsaSetTrustedDomainInfoByName',\
|
||||
LsaSetTrustedDomainInformation,'LsaSetTrustedDomainInformation',\
|
||||
LsaStorePrivateData,'LsaStorePrivateData',\
|
||||
MakeAbsoluteSD,'MakeAbsoluteSD',\
|
||||
MakeSelfRelativeSD,'MakeSelfRelativeSD',\
|
||||
MapGenericMask,'MapGenericMask',\
|
||||
NotifyBootConfigStatus,'NotifyBootConfigStatus',\
|
||||
NotifyChangeEventLog,'NotifyChangeEventLog',\
|
||||
ObjectCloseAuditAlarmA,'ObjectCloseAuditAlarmA',\
|
||||
ObjectCloseAuditAlarmW,'ObjectCloseAuditAlarmW',\
|
||||
ObjectDeleteAuditAlarmA,'ObjectDeleteAuditAlarmA',\
|
||||
ObjectDeleteAuditAlarmW,'ObjectDeleteAuditAlarmW',\
|
||||
ObjectOpenAuditAlarmA,'ObjectOpenAuditAlarmA',\
|
||||
ObjectOpenAuditAlarmW,'ObjectOpenAuditAlarmW',\
|
||||
ObjectPrivilegeAuditAlarmA,'ObjectPrivilegeAuditAlarmA',\
|
||||
ObjectPrivilegeAuditAlarmW,'ObjectPrivilegeAuditAlarmW',\
|
||||
OpenBackupEventLogA,'OpenBackupEventLogA',\
|
||||
OpenBackupEventLogW,'OpenBackupEventLogW',\
|
||||
OpenEventLogA,'OpenEventLogA',\
|
||||
OpenEventLogW,'OpenEventLogW',\
|
||||
OpenProcessToken,'OpenProcessToken',\
|
||||
OpenRawA,'OpenRawA',\
|
||||
OpenRawW,'OpenRawW',\
|
||||
OpenSCManagerA,'OpenSCManagerA',\
|
||||
OpenSCManagerW,'OpenSCManagerW',\
|
||||
OpenServiceA,'OpenServiceA',\
|
||||
OpenServiceW,'OpenServiceW',\
|
||||
OpenThreadToken,'OpenThreadToken',\
|
||||
PrivilegeCheck,'PrivilegeCheck',\
|
||||
PrivilegedServiceAuditAlarmA,'PrivilegedServiceAuditAlarmA',\
|
||||
PrivilegedServiceAuditAlarmW,'PrivilegedServiceAuditAlarmW',\
|
||||
QueryRecoveryAgentsA,'QueryRecoveryAgentsA',\
|
||||
QueryRecoveryAgentsW,'QueryRecoveryAgentsW',\
|
||||
QueryServiceConfig2A,'QueryServiceConfig2A',\
|
||||
QueryServiceConfig2W,'QueryServiceConfig2W',\
|
||||
QueryServiceConfigA,'QueryServiceConfigA',\
|
||||
QueryServiceConfigW,'QueryServiceConfigW',\
|
||||
QueryServiceLockStatusA,'QueryServiceLockStatusA',\
|
||||
QueryServiceLockStatusW,'QueryServiceLockStatusW',\
|
||||
QueryServiceObjectSecurity,'QueryServiceObjectSecurity',\
|
||||
QueryServiceStatus,'QueryServiceStatus',\
|
||||
QueryWindows31FilesMigration,'QueryWindows31FilesMigration',\
|
||||
ReadEventLogA,'ReadEventLogA',\
|
||||
ReadEventLogW,'ReadEventLogW',\
|
||||
ReadRaw,'ReadRaw',\
|
||||
RegCloseKey,'RegCloseKey',\
|
||||
RegConnectRegistryA,'RegConnectRegistryA',\
|
||||
RegConnectRegistryW,'RegConnectRegistryW',\
|
||||
RegCreateKeyA,'RegCreateKeyA',\
|
||||
RegCreateKeyW,'RegCreateKeyW',\
|
||||
RegCreateKeyExA,'RegCreateKeyExA',\
|
||||
RegCreateKeyExW,'RegCreateKeyExW',\
|
||||
RegDeleteKeyA,'RegDeleteKeyA',\
|
||||
RegDeleteKeyW,'RegDeleteKeyW',\
|
||||
RegDeleteValueA,'RegDeleteValueA',\
|
||||
RegDeleteValueW,'RegDeleteValueW',\
|
||||
RegEnumKeyA,'RegEnumKeyA',\
|
||||
RegEnumKeyW,'RegEnumKeyW',\
|
||||
RegEnumKeyExA,'RegEnumKeyExA',\
|
||||
RegEnumKeyExW,'RegEnumKeyExW',\
|
||||
RegEnumValueA,'RegEnumValueA',\
|
||||
RegEnumValueW,'RegEnumValueW',\
|
||||
RegFlushKey,'RegFlushKey',\
|
||||
RegGetKeySecurity,'RegGetKeySecurity',\
|
||||
RegLoadKeyA,'RegLoadKeyA',\
|
||||
RegLoadKeyW,'RegLoadKeyW',\
|
||||
RegNotifyChangeKeyValue,'RegNotifyChangeKeyValue',\
|
||||
RegOpenKeyA,'RegOpenKeyA',\
|
||||
RegOpenKeyW,'RegOpenKeyW',\
|
||||
RegOpenKeyExA,'RegOpenKeyExA',\
|
||||
RegOpenKeyExW,'RegOpenKeyExW',\
|
||||
RegOverridePredefKey,'RegOverridePredefKey',\
|
||||
RegQueryInfoKeyA,'RegQueryInfoKeyA',\
|
||||
RegQueryInfoKeyW,'RegQueryInfoKeyW',\
|
||||
RegQueryMultipleValuesA,'RegQueryMultipleValuesA',\
|
||||
RegQueryMultipleValuesW,'RegQueryMultipleValuesW',\
|
||||
RegQueryValueA,'RegQueryValueA',\
|
||||
RegQueryValueW,'RegQueryValueW',\
|
||||
RegQueryValueExA,'RegQueryValueExA',\
|
||||
RegQueryValueExW,'RegQueryValueExW',\
|
||||
RegReplaceKeyA,'RegReplaceKeyA',\
|
||||
RegReplaceKeyW,'RegReplaceKeyW',\
|
||||
RegRestoreKeyA,'RegRestoreKeyA',\
|
||||
RegRestoreKeyW,'RegRestoreKeyW',\
|
||||
RegSaveKeyA,'RegSaveKeyA',\
|
||||
RegSaveKeyW,'RegSaveKeyW',\
|
||||
RegSetKeySecurity,'RegSetKeySecurity',\
|
||||
RegSetValueA,'RegSetValueA',\
|
||||
RegSetValueW,'RegSetValueW',\
|
||||
RegSetValueExA,'RegSetValueExA',\
|
||||
RegSetValueExW,'RegSetValueExW',\
|
||||
RegUnLoadKeyA,'RegUnLoadKeyA',\
|
||||
RegUnLoadKeyW,'RegUnLoadKeyW',\
|
||||
RegisterEventSourceA,'RegisterEventSourceA',\
|
||||
RegisterEventSourceW,'RegisterEventSourceW',\
|
||||
RegisterServiceCtrlHandlerA,'RegisterServiceCtrlHandlerA',\
|
||||
RegisterServiceCtrlHandlerW,'RegisterServiceCtrlHandlerW',\
|
||||
ReportEventA,'ReportEventA',\
|
||||
ReportEventW,'ReportEventW',\
|
||||
RevertToSelf,'RevertToSelf',\
|
||||
SetAclInformation,'SetAclInformation',\
|
||||
SetEntriesInAccessListA,'SetEntriesInAccessListA',\
|
||||
SetEntriesInAccessListW,'SetEntriesInAccessListW',\
|
||||
SetEntriesInAclA,'SetEntriesInAclA',\
|
||||
SetEntriesInAclW,'SetEntriesInAclW',\
|
||||
SetEntriesInAuditListA,'SetEntriesInAuditListA',\
|
||||
SetEntriesInAuditListW,'SetEntriesInAuditListW',\
|
||||
SetFileSecurityA,'SetFileSecurityA',\
|
||||
SetFileSecurityW,'SetFileSecurityW',\
|
||||
SetKernelObjectSecurity,'SetKernelObjectSecurity',\
|
||||
SetNamedSecurityInfoA,'SetNamedSecurityInfoA',\
|
||||
SetNamedSecurityInfoW,'SetNamedSecurityInfoW',\
|
||||
SetNamedSecurityInfoExA,'SetNamedSecurityInfoExA',\
|
||||
SetNamedSecurityInfoExW,'SetNamedSecurityInfoExW',\
|
||||
SetPrivateObjectSecurity,'SetPrivateObjectSecurity',\
|
||||
SetPrivateObjectSecurityEx,'SetPrivateObjectSecurityEx',\
|
||||
SetSecurityDescriptorControl,'SetSecurityDescriptorControl',\
|
||||
SetSecurityDescriptorDacl,'SetSecurityDescriptorDacl',\
|
||||
SetSecurityDescriptorGroup,'SetSecurityDescriptorGroup',\
|
||||
SetSecurityDescriptorOwner,'SetSecurityDescriptorOwner',\
|
||||
SetSecurityDescriptorSacl,'SetSecurityDescriptorSacl',\
|
||||
SetSecurityInfo,'SetSecurityInfo',\
|
||||
SetSecurityInfoExA,'SetSecurityInfoExA',\
|
||||
SetSecurityInfoExW,'SetSecurityInfoExW',\
|
||||
SetServiceBits,'SetServiceBits',\
|
||||
SetServiceObjectSecurity,'SetServiceObjectSecurity',\
|
||||
SetServiceStatus,'SetServiceStatus',\
|
||||
SetThreadToken,'SetThreadToken',\
|
||||
SetTokenInformation,'SetTokenInformation',\
|
||||
StartServiceA,'StartServiceA',\
|
||||
StartServiceW,'StartServiceW',\
|
||||
StartServiceCtrlDispatcherA,'StartServiceCtrlDispatcherA',\
|
||||
StartServiceCtrlDispatcherW,'StartServiceCtrlDispatcherW',\
|
||||
SynchronizeWindows31FilesAndWindowsNTRegistry,'SynchronizeWindows31FilesAndWindowsNTRegistry',\
|
||||
TrusteeAccessToObjectA,'TrusteeAccessToObjectA',\
|
||||
TrusteeAccessToObjectW,'TrusteeAccessToObjectW',\
|
||||
UnlockServiceDatabase,'UnlockServiceDatabase',\
|
||||
WriteRaw,'WriteRaw'
|
||||
|
||||
api AbortSystemShutdown,\
|
||||
AccessCheckAndAuditAlarm,\
|
||||
AccessCheckByTypeAndAuditAlarm,\
|
||||
AccessCheckByTypeResultListAndAuditAlarm,\
|
||||
BackupEventLog,\
|
||||
BuildExplicitAccessWithName,\
|
||||
BuildImpersonateExplicitAccessWithName,\
|
||||
BuildImpersonateTrustee,\
|
||||
BuildSecurityDescriptor,\
|
||||
BuildTrusteeWithName,\
|
||||
BuildTrusteeWithSid,\
|
||||
ChangeServiceConfig2,\
|
||||
ChangeServiceConfig,\
|
||||
ClearEventLog,\
|
||||
ConvertAccessToSecurityDescriptor,\
|
||||
ConvertSecurityDescriptorToAccess,\
|
||||
ConvertSecurityDescriptorToAccessNamed,\
|
||||
CreateProcessAsUser,\
|
||||
CreateService,\
|
||||
CryptAcquireContext,\
|
||||
CryptEnumProviderTypes,\
|
||||
CryptEnumProviders,\
|
||||
CryptGetDefaultProvider,\
|
||||
CryptSetProvider,\
|
||||
CryptSetProviderEx,\
|
||||
CryptSignHash,\
|
||||
CryptVerifySignature,\
|
||||
DecryptFile,\
|
||||
ElfBackupEventLogFile,\
|
||||
ElfClearEventLogFile,\
|
||||
ElfOpenBackupEventLog,\
|
||||
ElfOpenEventLog,\
|
||||
ElfReadEventLog,\
|
||||
ElfRegisterEventSource,\
|
||||
ElfReportEvent,\
|
||||
EncryptFile,\
|
||||
EnumDependentServices,\
|
||||
EnumServicesStatus,\
|
||||
GetAccessPermissionsForObject,\
|
||||
GetAuditedPermissionsFromAcl,\
|
||||
GetCurrentHwProfile,\
|
||||
GetEffectiveRightsFromAcl,\
|
||||
GetExplicitEntriesFromAcl,\
|
||||
GetFileSecurity,\
|
||||
GetMultipleTrustee,\
|
||||
GetMultipleTrusteeOperation,\
|
||||
GetNamedSecurityInfo,\
|
||||
GetNamedSecurityInfoEx,\
|
||||
GetSecurityInfoEx,\
|
||||
GetServiceDisplayName,\
|
||||
GetServiceKeyName,\
|
||||
GetSidLengthRequired,\
|
||||
GetTrusteeName,\
|
||||
GetTrusteeType,\
|
||||
GetUserName,\
|
||||
I_ScSetServiceBits,\
|
||||
InitiateSystemShutdown,\
|
||||
LogonUser,\
|
||||
LookupAccountName,\
|
||||
LookupAccountSid,\
|
||||
LookupPrivilegeDisplayName,\
|
||||
LookupPrivilegeName,\
|
||||
LookupPrivilegeValue,\
|
||||
LookupSecurityDescriptorParts,\
|
||||
ObjectCloseAuditAlarm,\
|
||||
ObjectDeleteAuditAlarm,\
|
||||
ObjectOpenAuditAlarm,\
|
||||
ObjectPrivilegeAuditAlarm,\
|
||||
OpenBackupEventLog,\
|
||||
OpenEventLog,\
|
||||
OpenRaw,\
|
||||
OpenSCManager,\
|
||||
OpenService,\
|
||||
PrivilegedServiceAuditAlarm,\
|
||||
QueryRecoveryAgents,\
|
||||
QueryServiceConfig2,\
|
||||
QueryServiceConfig,\
|
||||
QueryServiceLockStatus,\
|
||||
ReadEventLog,\
|
||||
RegConnectRegistry,\
|
||||
RegCreateKey,\
|
||||
RegCreateKeyEx,\
|
||||
RegDeleteKey,\
|
||||
RegDeleteValue,\
|
||||
RegEnumKey,\
|
||||
RegEnumKeyEx,\
|
||||
RegEnumValue,\
|
||||
RegLoadKey,\
|
||||
RegOpenKey,\
|
||||
RegOpenKeyEx,\
|
||||
RegQueryInfoKey,\
|
||||
RegQueryMultipleValues,\
|
||||
RegQueryValue,\
|
||||
RegQueryValueEx,\
|
||||
RegReplaceKey,\
|
||||
RegRestoreKey,\
|
||||
RegSaveKey,\
|
||||
RegSetValue,\
|
||||
RegSetValueEx,\
|
||||
RegUnLoadKey,\
|
||||
RegisterEventSource,\
|
||||
RegisterServiceCtrlHandler,\
|
||||
ReportEvent,\
|
||||
SetEntriesInAccessList,\
|
||||
SetEntriesInAcl,\
|
||||
SetEntriesInAuditList,\
|
||||
SetFileSecurity,\
|
||||
SetNamedSecurityInfo,\
|
||||
SetNamedSecurityInfoEx,\
|
||||
SetSecurityInfoEx,\
|
||||
StartService,\
|
||||
StartServiceCtrlDispatcher,\
|
||||
TrusteeAccessToObject
|
81
toolchain/fasm2/include/api/comctl32.inc
Normal file
81
toolchain/fasm2/include/api/comctl32.inc
Normal file
@ -0,0 +1,81 @@
|
||||
|
||||
; COMCTL32 API calls
|
||||
|
||||
import comctl32,\
|
||||
CreateMappedBitmap,'CreateMappedBitmap',\
|
||||
CreatePropertySheetPageA,'CreatePropertySheetPageA',\
|
||||
CreatePropertySheetPageW,'CreatePropertySheetPageW',\
|
||||
CreateStatusWindowA,'CreateStatusWindowA',\
|
||||
CreateStatusWindowW,'CreateStatusWindowW',\
|
||||
CreateToolbar,'CreateToolbar',\
|
||||
CreateToolbarEx,'CreateToolbarEx',\
|
||||
CreateUpDownControl,'CreateUpDownControl',\
|
||||
DestroyPropertySheetPage,'DestroyPropertySheetPage',\
|
||||
DrawInsert,'DrawInsert',\
|
||||
DrawStatusTextA,'DrawStatusTextA',\
|
||||
DrawStatusTextW,'DrawStatusTextW',\
|
||||
FlatSB_EnableScrollBar,'FlatSB_EnableScrollBar',\
|
||||
FlatSB_GetScrollInfo,'FlatSB_GetScrollInfo',\
|
||||
FlatSB_GetScrollPos,'FlatSB_GetScrollPos',\
|
||||
FlatSB_GetScrollProp,'FlatSB_GetScrollProp',\
|
||||
FlatSB_GetScrollRange,'FlatSB_GetScrollRange',\
|
||||
FlatSB_SetScrollInfo,'FlatSB_SetScrollInfo',\
|
||||
FlatSB_SetScrollPos,'FlatSB_SetScrollPos',\
|
||||
FlatSB_SetScrollProp,'FlatSB_SetScrollProp',\
|
||||
FlatSB_SetScrollRange,'FlatSB_SetScrollRange',\
|
||||
FlatSB_ShowScrollBar,'FlatSB_ShowScrollBar',\
|
||||
GetEffectiveClientRect,'GetEffectiveClientRect',\
|
||||
ImageList_Add,'ImageList_Add',\
|
||||
ImageList_AddIcon,'ImageList_AddIcon',\
|
||||
ImageList_AddMasked,'ImageList_AddMasked',\
|
||||
ImageList_BeginDrag,'ImageList_BeginDrag',\
|
||||
ImageList_Copy,'ImageList_Copy',\
|
||||
ImageList_Create,'ImageList_Create',\
|
||||
ImageList_Destroy,'ImageList_Destroy',\
|
||||
ImageList_DragEnter,'ImageList_DragEnter',\
|
||||
ImageList_DragLeave,'ImageList_DragLeave',\
|
||||
ImageList_DragMove,'ImageList_DragMove',\
|
||||
ImageList_DragShowNolock,'ImageList_DragShowNolock',\
|
||||
ImageList_Draw,'ImageList_Draw',\
|
||||
ImageList_DrawEx,'ImageList_DrawEx',\
|
||||
ImageList_DrawIndirect,'ImageList_DrawIndirect',\
|
||||
ImageList_Duplicate,'ImageList_Duplicate',\
|
||||
ImageList_EndDrag,'ImageList_EndDrag',\
|
||||
ImageList_GetBkColor,'ImageList_GetBkColor',\
|
||||
ImageList_GetDragImage,'ImageList_GetDragImage',\
|
||||
ImageList_GetIcon,'ImageList_GetIcon',\
|
||||
ImageList_GetIconSize,'ImageList_GetIconSize',\
|
||||
ImageList_GetImageCount,'ImageList_GetImageCount',\
|
||||
ImageList_GetImageInfo,'ImageList_GetImageInfo',\
|
||||
ImageList_GetImageRect,'ImageList_GetImageRect',\
|
||||
ImageList_LoadImageA,'ImageList_LoadImageA',\
|
||||
ImageList_LoadImageW,'ImageList_LoadImageW',\
|
||||
ImageList_Merge,'ImageList_Merge',\
|
||||
ImageList_Read,'ImageList_Read',\
|
||||
ImageList_Remove,'ImageList_Remove',\
|
||||
ImageList_Replace,'ImageList_Replace',\
|
||||
ImageList_ReplaceIcon,'ImageList_ReplaceIcon',\
|
||||
ImageList_SetBkColor,'ImageList_SetBkColor',\
|
||||
ImageList_SetDragCursorImage,'ImageList_SetDragCursorImage',\
|
||||
ImageList_SetFilter,'ImageList_SetFilter',\
|
||||
ImageList_SetIconSize,'ImageList_SetIconSize',\
|
||||
ImageList_SetImageCount,'ImageList_SetImageCount',\
|
||||
ImageList_SetOverlayImage,'ImageList_SetOverlayImage',\
|
||||
ImageList_Write,'ImageList_Write',\
|
||||
InitCommonControls,'InitCommonControls',\
|
||||
InitCommonControlsEx,'InitCommonControlsEx',\
|
||||
InitializeFlatSB,'InitializeFlatSB',\
|
||||
LBItemFromPt,'LBItemFromPt',\
|
||||
MakeDragList,'MakeDragList',\
|
||||
MenuHelp,'MenuHelp',\
|
||||
PropertySheetA,'PropertySheetA',\
|
||||
PropertySheetW,'PropertySheetW',\
|
||||
ShowHideMenuCtl,'ShowHideMenuCtl',\
|
||||
UninitializeFlatSB,'UninitializeFlatSB',\
|
||||
_TrackMouseEvent,'_TrackMouseEvent'
|
||||
|
||||
api CreatePropertySheetPage,\
|
||||
CreateStatusWindow,\
|
||||
DrawStatusText,\
|
||||
ImageList_LoadImage,\
|
||||
PropertySheet
|
38
toolchain/fasm2/include/api/comdlg32.inc
Normal file
38
toolchain/fasm2/include/api/comdlg32.inc
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
; COMDLG32 API calls
|
||||
|
||||
import comdlg32,\
|
||||
ChooseColorA,'ChooseColorA',\
|
||||
ChooseColorW,'ChooseColorW',\
|
||||
ChooseFontA,'ChooseFontA',\
|
||||
ChooseFontW,'ChooseFontW',\
|
||||
CommDlgExtendedError,'CommDlgExtendedError',\
|
||||
FindTextA,'FindTextA',\
|
||||
FindTextW,'FindTextW',\
|
||||
FormatCharDlgProc,'FormatCharDlgProc',\
|
||||
GetFileTitleA,'GetFileTitleA',\
|
||||
GetFileTitleW,'GetFileTitleW',\
|
||||
GetOpenFileNameA,'GetOpenFileNameA',\
|
||||
GetOpenFileNameW,'GetOpenFileNameW',\
|
||||
GetSaveFileNameA,'GetSaveFileNameA',\
|
||||
GetSaveFileNameW,'GetSaveFileNameW',\
|
||||
LoadAlterBitmap,'LoadAlterBitmap',\
|
||||
PageSetupDlgA,'PageSetupDlgA',\
|
||||
PageSetupDlgW,'PageSetupDlgW',\
|
||||
PrintDlgA,'PrintDlgA',\
|
||||
PrintDlgW,'PrintDlgW',\
|
||||
ReplaceTextA,'ReplaceTextA',\
|
||||
ReplaceTextW,'ReplaceTextW',\
|
||||
WantArrows,'WantArrows',\
|
||||
dwLBSubclass,'dwLBSubclass',\
|
||||
dwOKSubclass,'dwOKSubclass'
|
||||
|
||||
api ChooseColor,\
|
||||
ChooseFont,\
|
||||
FindText,\
|
||||
GetFileTitle,\
|
||||
GetOpenFileName,\
|
||||
GetSaveFileName,\
|
||||
PageSetupDlg,\
|
||||
PrintDlg,\
|
||||
ReplaceText
|
419
toolchain/fasm2/include/api/gdi32.inc
Normal file
419
toolchain/fasm2/include/api/gdi32.inc
Normal file
@ -0,0 +1,419 @@
|
||||
|
||||
; GDI32 API calls
|
||||
|
||||
import gdi32,\
|
||||
AbortDoc,'AbortDoc',\
|
||||
AbortPath,'AbortPath',\
|
||||
AddFontMemResourceEx,'AddFontMemResourceEx',\
|
||||
AddFontResourceA,'AddFontResourceA',\
|
||||
AddFontResourceW,'AddFontResourceW',\
|
||||
AddFontResourceExA,'AddFontResourceExA',\
|
||||
AddFontResourceExW,'AddFontResourceExW',\
|
||||
AngleArc,'AngleArc',\
|
||||
AnimatePalette,'AnimatePalette',\
|
||||
Arc,'Arc',\
|
||||
ArcTo,'ArcTo',\
|
||||
BeginPath,'BeginPath',\
|
||||
BitBlt,'BitBlt',\
|
||||
CancelDC,'CancelDC',\
|
||||
CheckColorsInGamut,'CheckColorsInGamut',\
|
||||
ChoosePixelFormat,'ChoosePixelFormat',\
|
||||
Chord,'Chord',\
|
||||
CloseEnhMetaFile,'CloseEnhMetaFile',\
|
||||
CloseFigure,'CloseFigure',\
|
||||
CloseMetaFile,'CloseMetaFile',\
|
||||
ColorCorrectPalette,'ColorCorrectPalette',\
|
||||
ColorMatchToTarget,'ColorMatchToTarget',\
|
||||
CombineRgn,'CombineRgn',\
|
||||
CombineTransform,'CombineTransform',\
|
||||
CopyEnhMetaFileA,'CopyEnhMetaFileA',\
|
||||
CopyEnhMetaFileW,'CopyEnhMetaFileW',\
|
||||
CopyMetaFileA,'CopyMetaFileA',\
|
||||
CopyMetaFileW,'CopyMetaFileW',\
|
||||
CreateBitmap,'CreateBitmap',\
|
||||
CreateBitmapIndirect,'CreateBitmapIndirect',\
|
||||
CreateBrushIndirect,'CreateBrushIndirect',\
|
||||
CreateColorSpaceA,'CreateColorSpaceA',\
|
||||
CreateColorSpaceW,'CreateColorSpaceW',\
|
||||
CreateCompatibleBitmap,'CreateCompatibleBitmap',\
|
||||
CreateCompatibleDC,'CreateCompatibleDC',\
|
||||
CreateDCA,'CreateDCA',\
|
||||
CreateDCW,'CreateDCW',\
|
||||
CreateDIBPatternBrush,'CreateDIBPatternBrush',\
|
||||
CreateDIBPatternBrushPt,'CreateDIBPatternBrushPt',\
|
||||
CreateDIBSection,'CreateDIBSection',\
|
||||
CreateDIBitmap,'CreateDIBitmap',\
|
||||
CreateDiscardableBitmap,'CreateDiscardableBitmap',\
|
||||
CreateEllipticRgn,'CreateEllipticRgn',\
|
||||
CreateEllipticRgnIndirect,'CreateEllipticRgnIndirect',\
|
||||
CreateEnhMetaFileA,'CreateEnhMetaFileA',\
|
||||
CreateEnhMetaFileW,'CreateEnhMetaFileW',\
|
||||
CreateFontA,'CreateFontA',\
|
||||
CreateFontW,'CreateFontW',\
|
||||
CreateFontIndirectA,'CreateFontIndirectA',\
|
||||
CreateFontIndirectW,'CreateFontIndirectW',\
|
||||
CreateFontIndirectExA,'CreateFontIndirectExA',\
|
||||
CreateFontIndirectExW,'CreateFontIndirectExW',\
|
||||
CreateHalftonePalette,'CreateHalftonePalette',\
|
||||
CreateHatchBrush,'CreateHatchBrush',\
|
||||
CreateICA,'CreateICA',\
|
||||
CreateICW,'CreateICW',\
|
||||
CreateMetaFileA,'CreateMetaFileA',\
|
||||
CreateMetaFileW,'CreateMetaFileW',\
|
||||
CreatePalette,'CreatePalette',\
|
||||
CreatePatternBrush,'CreatePatternBrush',\
|
||||
CreatePen,'CreatePen',\
|
||||
CreatePenIndirect,'CreatePenIndirect',\
|
||||
CreatePolyPolygonRgn,'CreatePolyPolygonRgn',\
|
||||
CreatePolygonRgn,'CreatePolygonRgn',\
|
||||
CreateRectRgn,'CreateRectRgn',\
|
||||
CreateRectRgnIndirect,'CreateRectRgnIndirect',\
|
||||
CreateRoundRectRgn,'CreateRoundRectRgn',\
|
||||
CreateScalableFontResourceA,'CreateScalableFontResourceA',\
|
||||
CreateScalableFontResourceW,'CreateScalableFontResourceW',\
|
||||
CreateSolidBrush,'CreateSolidBrush',\
|
||||
DPtoLP,'DPtoLP',\
|
||||
DeleteColorSpace,'DeleteColorSpace',\
|
||||
DeleteDC,'DeleteDC',\
|
||||
DeleteEnhMetaFile,'DeleteEnhMetaFile',\
|
||||
DeleteMetaFile,'DeleteMetaFile',\
|
||||
DeleteObject,'DeleteObject',\
|
||||
DescribePixelFormat,'DescribePixelFormat',\
|
||||
DeviceCapabilitiesExA,'DeviceCapabilitiesExA',\
|
||||
DeviceCapabilitiesExW,'DeviceCapabilitiesExW',\
|
||||
DrawEscape,'DrawEscape',\
|
||||
Ellipse,'Ellipse',\
|
||||
EnableEUDC,'EnableEUDC',\
|
||||
EndDoc,'EndDoc',\
|
||||
EndPage,'EndPage',\
|
||||
EndPath,'EndPath',\
|
||||
EnumEnhMetaFile,'EnumEnhMetaFile',\
|
||||
EnumFontFamiliesA,'EnumFontFamiliesA',\
|
||||
EnumFontFamiliesW,'EnumFontFamiliesW',\
|
||||
EnumFontFamiliesExA,'EnumFontFamiliesExA',\
|
||||
EnumFontFamiliesExW,'EnumFontFamiliesExW',\
|
||||
EnumFontsA,'EnumFontsA',\
|
||||
EnumFontsW,'EnumFontsW',\
|
||||
EnumICMProfilesA,'EnumICMProfilesA',\
|
||||
EnumICMProfilesW,'EnumICMProfilesW',\
|
||||
EnumMetaFile,'EnumMetaFile',\
|
||||
EnumObjects,'EnumObjects',\
|
||||
EqualRgn,'EqualRgn',\
|
||||
Escape,'Escape',\
|
||||
ExcludeClipRect,'ExcludeClipRect',\
|
||||
ExtCreatePen,'ExtCreatePen',\
|
||||
ExtCreateRegion,'ExtCreateRegion',\
|
||||
ExtEscape,'ExtEscape',\
|
||||
ExtFloodFill,'ExtFloodFill',\
|
||||
ExtSelectClipRgn,'ExtSelectClipRgn',\
|
||||
ExtTextOutA,'ExtTextOutA',\
|
||||
ExtTextOutW,'ExtTextOutW',\
|
||||
FillPath,'FillPath',\
|
||||
FillRgn,'FillRgn',\
|
||||
FixBrushOrgEx,'FixBrushOrgEx',\
|
||||
FlattenPath,'FlattenPath',\
|
||||
FloodFill,'FloodFill',\
|
||||
FrameRgn,'FrameRgn',\
|
||||
GdiComment,'GdiComment',\
|
||||
GdiDeleteSpoolFileHandle,'GdiDeleteSpoolFileHandle',\
|
||||
GdiEndDocEMF,'GdiEndDocEMF',\
|
||||
GdiEndPageEMF,'GdiEndPageEMF',\
|
||||
GdiFlush,'GdiFlush',\
|
||||
GdiGetBatchLimit,'GdiGetBatchLimit',\
|
||||
GdiGetDC,'GdiGetDC',\
|
||||
GdiGetDevmodeForPage,'GdiGetDevmodeForPage',\
|
||||
GdiGetPageCount,'GdiGetPageCount',\
|
||||
GdiGetPageHandle,'GdiGetPageHandle',\
|
||||
GdiGetSpoolFileHandle,'GdiGetSpoolFileHandle',\
|
||||
GdiPlayDCScript,'GdiPlayDCScript',\
|
||||
GdiPlayEMF,'GdiPlayEMF',\
|
||||
GdiPlayJournal,'GdiPlayJournal',\
|
||||
GdiPlayPageEMF,'GdiPlayPageEMF',\
|
||||
GdiPlayPrivatePageEMF,'GdiPlayPrivatePageEMF',\
|
||||
GdiPlayScript,'GdiPlayScript',\
|
||||
GdiResetDCEMF,'GdiResetDCEMF',\
|
||||
GdiSetBatchLimit,'GdiSetBatchLimit',\
|
||||
GdiStartDocEMF,'GdiStartDocEMF',\
|
||||
GdiStartPageEMF,'GdiStartPageEMF',\
|
||||
GetArcDirection,'GetArcDirection',\
|
||||
GetAspectRatioFilterEx,'GetAspectRatioFilterEx',\
|
||||
GetBitmapBits,'GetBitmapBits',\
|
||||
GetBitmapDimensionEx,'GetBitmapDimensionEx',\
|
||||
GetBkColor,'GetBkColor',\
|
||||
GetBkMode,'GetBkMode',\
|
||||
GetBoundsRect,'GetBoundsRect',\
|
||||
GetBrushOrgEx,'GetBrushOrgEx',\
|
||||
GetCharABCWidthsA,'GetCharABCWidthsA',\
|
||||
GetCharABCWidthsW,'GetCharABCWidthsW',\
|
||||
GetCharABCWidthsFloatA,'GetCharABCWidthsFloatA',\
|
||||
GetCharABCWidthsFloatW,'GetCharABCWidthsFloatW',\
|
||||
GetCharABCWidthsI,'GetCharABCWidthsI',\
|
||||
GetCharWidth32A,'GetCharWidth32A',\
|
||||
GetCharWidth32W,'GetCharWidth32W',\
|
||||
GetCharWidthA,'GetCharWidthA',\
|
||||
GetCharWidthW,'GetCharWidthW',\
|
||||
GetCharWidthFloatA,'GetCharWidthFloatA',\
|
||||
GetCharWidthFloatW,'GetCharWidthFloatW',\
|
||||
GetCharWidthI,'GetCharWidthI',\
|
||||
GetCharacterPlacementA,'GetCharacterPlacementA',\
|
||||
GetCharacterPlacementW,'GetCharacterPlacementW',\
|
||||
GetClipBox,'GetClipBox',\
|
||||
GetClipRgn,'GetClipRgn',\
|
||||
GetColorAdjustment,'GetColorAdjustment',\
|
||||
GetColorSpace,'GetColorSpace',\
|
||||
GetCurrentObject,'GetCurrentObject',\
|
||||
GetCurrentPositionEx,'GetCurrentPositionEx',\
|
||||
GetDCBrushColor,'GetDCBrushColor',\
|
||||
GetDCOrgEx,'GetDCOrgEx',\
|
||||
GetDCPenColor,'GetDCPenColor',\
|
||||
GetDIBColorTable,'GetDIBColorTable',\
|
||||
GetDIBits,'GetDIBits',\
|
||||
GetDeviceCaps,'GetDeviceCaps',\
|
||||
GetDeviceGammaRamp,'GetDeviceGammaRamp',\
|
||||
GetEnhMetaFileA,'GetEnhMetaFileA',\
|
||||
GetEnhMetaFileW,'GetEnhMetaFileW',\
|
||||
GetEnhMetaFileBits,'GetEnhMetaFileBits',\
|
||||
GetEnhMetaFileDescriptionA,'GetEnhMetaFileDescriptionA',\
|
||||
GetEnhMetaFileDescriptionW,'GetEnhMetaFileDescriptionW',\
|
||||
GetEnhMetaFileHeader,'GetEnhMetaFileHeader',\
|
||||
GetEnhMetaFilePaletteEntries,'GetEnhMetaFilePaletteEntries',\
|
||||
GetEnhMetaFilePixelFormat,'GetEnhMetaFilePixelFormat',\
|
||||
GetFontAssocStatus,'GetFontAssocStatus',\
|
||||
GetFontData,'GetFontData',\
|
||||
GetFontLanguageInfo,'GetFontLanguageInfo',\
|
||||
GetFontUnicodeRanges,'GetFontUnicodeRanges',\
|
||||
GetGlyphIndicesA,'GetGlyphIndicesA',\
|
||||
GetGlyphIndicesW,'GetGlyphIndicesW',\
|
||||
GetGlyphOutlineA,'GetGlyphOutlineA',\
|
||||
GetGlyphOutlineW,'GetGlyphOutlineW',\
|
||||
GetGraphicsMode,'GetGraphicsMode',\
|
||||
GetICMProfileA,'GetICMProfileA',\
|
||||
GetICMProfileW,'GetICMProfileW',\
|
||||
GetKerningPairsA,'GetKerningPairsA',\
|
||||
GetKerningPairsW,'GetKerningPairsW',\
|
||||
GetLogColorSpaceA,'GetLogColorSpaceA',\
|
||||
GetLogColorSpaceW,'GetLogColorSpaceW',\
|
||||
GetMapMode,'GetMapMode',\
|
||||
GetMetaFileA,'GetMetaFileA',\
|
||||
GetMetaFileW,'GetMetaFileW',\
|
||||
GetMetaFileBitsEx,'GetMetaFileBitsEx',\
|
||||
GetMetaRgn,'GetMetaRgn',\
|
||||
GetMiterLimit,'GetMiterLimit',\
|
||||
GetNearestColor,'GetNearestColor',\
|
||||
GetNearestPaletteIndex,'GetNearestPaletteIndex',\
|
||||
GetObjectA,'GetObjectA',\
|
||||
GetObjectW,'GetObjectW',\
|
||||
GetObjectType,'GetObjectType',\
|
||||
GetOutlineTextMetricsA,'GetOutlineTextMetricsA',\
|
||||
GetOutlineTextMetricsW,'GetOutlineTextMetricsW',\
|
||||
GetPaletteEntries,'GetPaletteEntries',\
|
||||
GetPath,'GetPath',\
|
||||
GetPixel,'GetPixel',\
|
||||
GetPixelFormat,'GetPixelFormat',\
|
||||
GetPolyFillMode,'GetPolyFillMode',\
|
||||
GetROP2,'GetROP2',\
|
||||
GetRandomRgn,'GetRandomRgn',\
|
||||
GetRasterizerCaps,'GetRasterizerCaps',\
|
||||
GetRegionData,'GetRegionData',\
|
||||
GetRelAbs,'GetRelAbs',\
|
||||
GetRgnBox,'GetRgnBox',\
|
||||
GetStockObject,'GetStockObject',\
|
||||
GetStretchBltMode,'GetStretchBltMode',\
|
||||
GetSystemPaletteEntries,'GetSystemPaletteEntries',\
|
||||
GetSystemPaletteUse,'GetSystemPaletteUse',\
|
||||
GetTextAlign,'GetTextAlign',\
|
||||
GetTextCharacterExtra,'GetTextCharacterExtra',\
|
||||
GetTextCharset,'GetTextCharset',\
|
||||
GetTextCharsetInfo,'GetTextCharsetInfo',\
|
||||
GetTextColor,'GetTextColor',\
|
||||
GetTextExtentExPointA,'GetTextExtentExPointA',\
|
||||
GetTextExtentExPointW,'GetTextExtentExPointW',\
|
||||
GetTextExtentExPointI,'GetTextExtentExPointI',\
|
||||
GetTextExtentPoint32A,'GetTextExtentPoint32A',\
|
||||
GetTextExtentPoint32W,'GetTextExtentPoint32W',\
|
||||
GetTextExtentPointA,'GetTextExtentPointA',\
|
||||
GetTextExtentPointW,'GetTextExtentPointW',\
|
||||
GetTextExtentPointI,'GetTextExtentPointI',\
|
||||
GetTextFaceA,'GetTextFaceA',\
|
||||
GetTextFaceW,'GetTextFaceW',\
|
||||
GetTextMetricsA,'GetTextMetricsA',\
|
||||
GetTextMetricsW,'GetTextMetricsW',\
|
||||
GetViewportExtEx,'GetViewportExtEx',\
|
||||
GetViewportOrgEx,'GetViewportOrgEx',\
|
||||
GetWinMetaFileBits,'GetWinMetaFileBits',\
|
||||
GetWindowExtEx,'GetWindowExtEx',\
|
||||
GetWindowOrgEx,'GetWindowOrgEx',\
|
||||
GetWorldTransform,'GetWorldTransform',\
|
||||
IntersectClipRect,'IntersectClipRect',\
|
||||
InvertRgn,'InvertRgn',\
|
||||
LPtoDP,'LPtoDP',\
|
||||
LineDDA,'LineDDA',\
|
||||
LineDDW,'LineDDW',\
|
||||
LineTo,'LineTo',\
|
||||
MaskBlt,'MaskBlt',\
|
||||
ModifyWorldTransform,'ModifyWorldTransform',\
|
||||
MoveToEx,'MoveToEx',\
|
||||
OffsetClipRgn,'OffsetClipRgn',\
|
||||
OffsetRgn,'OffsetRgn',\
|
||||
OffsetViewportOrgEx,'OffsetViewportOrgEx',\
|
||||
OffsetWindowOrgEx,'OffsetWindowOrgEx',\
|
||||
PaintRgn,'PaintRgn',\
|
||||
PatBlt,'PatBlt',\
|
||||
PathToRegion,'PathToRegion',\
|
||||
Pie,'Pie',\
|
||||
PlayEnhMetaFile,'PlayEnhMetaFile',\
|
||||
PlayEnhMetaFileRecord,'PlayEnhMetaFileRecord',\
|
||||
PlayMetaFile,'PlayMetaFile',\
|
||||
PlayMetaFileRecord,'PlayMetaFileRecord',\
|
||||
PlgBlt,'PlgBlt',\
|
||||
PolyBezier,'PolyBezier',\
|
||||
PolyBezierTo,'PolyBezierTo',\
|
||||
PolyDraw,'PolyDraw',\
|
||||
PolyPatBlt,'PolyPatBlt',\
|
||||
PolyPolygon,'PolyPolygon',\
|
||||
PolyPolyline,'PolyPolyline',\
|
||||
PolyTextOutA,'PolyTextOutA',\
|
||||
PolyTextOutW,'PolyTextOutW',\
|
||||
Polygon,'Polygon',\
|
||||
Polyline,'Polyline',\
|
||||
PolylineTo,'PolylineTo',\
|
||||
PtInRegion,'PtInRegion',\
|
||||
PtVisible,'PtVisible',\
|
||||
RealizePalette,'RealizePalette',\
|
||||
RectInRegion,'RectInRegion',\
|
||||
RectVisible,'RectVisible',\
|
||||
Rectangle,'Rectangle',\
|
||||
RemoveFontMemResourceEx,'RemoveFontMemResourceEx',\
|
||||
RemoveFontResourceA,'RemoveFontResourceA',\
|
||||
RemoveFontResourceW,'RemoveFontResourceW',\
|
||||
RemoveFontResourceExA,'RemoveFontResourceExA',\
|
||||
RemoveFontResourceExW,'RemoveFontResourceExW',\
|
||||
ResetDCA,'ResetDCA',\
|
||||
ResetDCW,'ResetDCW',\
|
||||
ResizePalette,'ResizePalette',\
|
||||
RestoreDC,'RestoreDC',\
|
||||
RoundRect,'RoundRect',\
|
||||
SaveDC,'SaveDC',\
|
||||
ScaleViewportExtEx,'ScaleViewportExtEx',\
|
||||
ScaleWindowExtEx,'ScaleWindowExtEx',\
|
||||
SelectBrushLocal,'SelectBrushLocal',\
|
||||
SelectClipPath,'SelectClipPath',\
|
||||
SelectClipRgn,'SelectClipRgn',\
|
||||
SelectFontLocal,'SelectFontLocal',\
|
||||
SelectObject,'SelectObject',\
|
||||
SelectPalette,'SelectPalette',\
|
||||
SetAbortProc,'SetAbortProc',\
|
||||
SetArcDirection,'SetArcDirection',\
|
||||
SetBitmapBits,'SetBitmapBits',\
|
||||
SetBitmapDimensionEx,'SetBitmapDimensionEx',\
|
||||
SetBkColor,'SetBkColor',\
|
||||
SetBkMode,'SetBkMode',\
|
||||
SetBoundsRect,'SetBoundsRect',\
|
||||
SetBrushOrgEx,'SetBrushOrgEx',\
|
||||
SetColorAdjustment,'SetColorAdjustment',\
|
||||
SetColorSpace,'SetColorSpace',\
|
||||
SetDCBrushColor,'SetDCBrushColor',\
|
||||
SetDCPenColor,'SetDCPenColor',\
|
||||
SetDIBColorTable,'SetDIBColorTable',\
|
||||
SetDIBits,'SetDIBits',\
|
||||
SetDIBitsToDevice,'SetDIBitsToDevice',\
|
||||
SetDeviceGammaRamp,'SetDeviceGammaRamp',\
|
||||
SetEnhMetaFileBits,'SetEnhMetaFileBits',\
|
||||
SetFontEnumeration,'SetFontEnumeration',\
|
||||
SetGraphicsMode,'SetGraphicsMode',\
|
||||
SetICMMode,'SetICMMode',\
|
||||
SetICMProfileA,'SetICMProfileA',\
|
||||
SetICMProfileW,'SetICMProfileW',\
|
||||
SetMagicColors,'SetMagicColors',\
|
||||
SetMapMode,'SetMapMode',\
|
||||
SetMapperFlags,'SetMapperFlags',\
|
||||
SetMetaFileBitsEx,'SetMetaFileBitsEx',\
|
||||
SetMetaRgn,'SetMetaRgn',\
|
||||
SetMiterLimit,'SetMiterLimit',\
|
||||
SetPaletteEntries,'SetPaletteEntries',\
|
||||
SetPixel,'SetPixel',\
|
||||
SetPixelFormat,'SetPixelFormat',\
|
||||
SetPixelV,'SetPixelV',\
|
||||
SetPolyFillMode,'SetPolyFillMode',\
|
||||
SetROP2,'SetROP2',\
|
||||
SetRectRgn,'SetRectRgn',\
|
||||
SetRelAbs,'SetRelAbs',\
|
||||
SetStretchBltMode,'SetStretchBltMode',\
|
||||
SetSystemPaletteUse,'SetSystemPaletteUse',\
|
||||
SetTextAlign,'SetTextAlign',\
|
||||
SetTextCharacterExtra,'SetTextCharacterExtra',\
|
||||
SetTextColor,'SetTextColor',\
|
||||
SetTextJustification,'SetTextJustification',\
|
||||
SetViewportExtEx,'SetViewportExtEx',\
|
||||
SetViewportOrgEx,'SetViewportOrgEx',\
|
||||
SetWinMetaFileBits,'SetWinMetaFileBits',\
|
||||
SetWindowExtEx,'SetWindowExtEx',\
|
||||
SetWindowOrgEx,'SetWindowOrgEx',\
|
||||
SetWorldTransform,'SetWorldTransform',\
|
||||
StartDocA,'StartDocA',\
|
||||
StartDocW,'StartDocW',\
|
||||
StartPage,'StartPage',\
|
||||
StretchBlt,'StretchBlt',\
|
||||
StretchDIBits,'StretchDIBits',\
|
||||
StrokeAndFillPath,'StrokeAndFillPath',\
|
||||
StrokePath,'StrokePath',\
|
||||
SwapBuffers,'SwapBuffers',\
|
||||
TextOutA,'TextOutA',\
|
||||
TextOutW,'TextOutW',\
|
||||
TranslateCharsetInfo,'TranslateCharsetInfo',\
|
||||
UnrealizeObject,'UnrealizeObject',\
|
||||
UpdateColors,'UpdateColors',\
|
||||
UpdateICMRegKeyA,'UpdateICMRegKeyA',\
|
||||
UpdateICMRegKeyW,'UpdateICMRegKeyW',\
|
||||
WidenPath,'WidenPath',\
|
||||
gdiPlaySpoolStream,'gdiPlaySpoolStream'
|
||||
|
||||
api AddFontResource,\
|
||||
AddFontResourceEx,\
|
||||
CopyEnhMetaFile,\
|
||||
CopyMetaFile,\
|
||||
CreateColorSpace,\
|
||||
CreateDC,\
|
||||
CreateEnhMetaFile,\
|
||||
CreateFont,\
|
||||
CreateFontIndirect,\
|
||||
CreateFontIndirectEx,\
|
||||
CreateIC,\
|
||||
CreateMetaFile,\
|
||||
CreateScalableFontResource,\
|
||||
DeviceCapabilitiesEx,\
|
||||
EnumFontFamilies,\
|
||||
EnumFontFamiliesEx,\
|
||||
EnumFonts,\
|
||||
EnumICMProfiles,\
|
||||
ExtTextOut,\
|
||||
GetCharABCWidths,\
|
||||
GetCharABCWidthsFloat,\
|
||||
GetCharWidth32,\
|
||||
GetCharWidth,\
|
||||
GetCharWidthFloat,\
|
||||
GetCharacterPlacement,\
|
||||
GetEnhMetaFile,\
|
||||
GetEnhMetaFileDescription,\
|
||||
GetGlyphIndices,\
|
||||
GetGlyphOutline,\
|
||||
GetICMProfile,\
|
||||
GetKerningPairs,\
|
||||
GetLogColorSpace,\
|
||||
GetMetaFile,\
|
||||
GetObject,\
|
||||
GetOutlineTextMetrics,\
|
||||
GetTextExtentExPoint,\
|
||||
GetTextExtentPoint32,\
|
||||
GetTextExtentPoint,\
|
||||
GetTextFace,\
|
||||
GetTextMetrics,\
|
||||
LineDD,\
|
||||
PolyTextOut,\
|
||||
RemoveFontResource,\
|
||||
RemoveFontResourceEx,\
|
||||
ResetDC,\
|
||||
SetICMProfile,\
|
||||
StartDoc,\
|
||||
TextOut,\
|
||||
UpdateICMRegKey
|
881
toolchain/fasm2/include/api/kernel32.inc
Normal file
881
toolchain/fasm2/include/api/kernel32.inc
Normal file
@ -0,0 +1,881 @@
|
||||
|
||||
; KERNEL32 API calls
|
||||
|
||||
import kernel32,\
|
||||
AddAtomA,'AddAtomA',\
|
||||
AddAtomW,'AddAtomW',\
|
||||
AddConsoleAliasA,'AddConsoleAliasA',\
|
||||
AddConsoleAliasW,'AddConsoleAliasW',\
|
||||
AllocConsole,'AllocConsole',\
|
||||
AreFileApisANSI,'AreFileApisANSI',\
|
||||
AssignProcessToJobObject,'AssignProcessToJobObject',\
|
||||
BackupRead,'BackupRead',\
|
||||
BackupSeek,'BackupSeek',\
|
||||
BackupWrite,'BackupWrite',\
|
||||
BaseAttachCompleteThunk,'BaseAttachCompleteThunk',\
|
||||
Beep,'Beep',\
|
||||
BeginUpdateResourceA,'BeginUpdateResourceA',\
|
||||
BeginUpdateResourceW,'BeginUpdateResourceW',\
|
||||
BuildCommDCBA,'BuildCommDCBA',\
|
||||
BuildCommDCBW,'BuildCommDCBW',\
|
||||
BuildCommDCBAndTimeoutsA,'BuildCommDCBAndTimeoutsA',\
|
||||
BuildCommDCBAndTimeoutsW,'BuildCommDCBAndTimeoutsW',\
|
||||
CallNamedPipeA,'CallNamedPipeA',\
|
||||
CallNamedPipeW,'CallNamedPipeW',\
|
||||
CancelIo,'CancelIo',\
|
||||
CancelWaitableTimer,'CancelWaitableTimer',\
|
||||
ClearCommBreak,'ClearCommBreak',\
|
||||
ClearCommError,'ClearCommError',\
|
||||
CloseConsoleHandle,'CloseConsoleHandle',\
|
||||
CloseHandle,'CloseHandle',\
|
||||
CloseProfileUserMapping,'CloseProfileUserMapping',\
|
||||
CmdBatNotification,'CmdBatNotification',\
|
||||
CommConfigDialogA,'CommConfigDialogA',\
|
||||
CommConfigDialogW,'CommConfigDialogW',\
|
||||
CompareFileTime,'CompareFileTime',\
|
||||
CompareStringA,'CompareStringA',\
|
||||
CompareStringW,'CompareStringW',\
|
||||
ConnectNamedPipe,'ConnectNamedPipe',\
|
||||
ConsoleMenuControl,'ConsoleMenuControl',\
|
||||
ContinueDebugEvent,'ContinueDebugEvent',\
|
||||
ConvertDefaultLocale,'ConvertDefaultLocale',\
|
||||
ConvertThreadToFiber,'ConvertThreadToFiber',\
|
||||
CopyFileA,'CopyFileA',\
|
||||
CopyFileW,'CopyFileW',\
|
||||
CopyFileExA,'CopyFileExA',\
|
||||
CopyFileExW,'CopyFileExW',\
|
||||
CreateConsoleScreenBuffer,'CreateConsoleScreenBuffer',\
|
||||
CreateDirectoryA,'CreateDirectoryA',\
|
||||
CreateDirectoryW,'CreateDirectoryW',\
|
||||
CreateDirectoryExA,'CreateDirectoryExA',\
|
||||
CreateDirectoryExW,'CreateDirectoryExW',\
|
||||
CreateEventA,'CreateEventA',\
|
||||
CreateEventW,'CreateEventW',\
|
||||
CreateFiber,'CreateFiber',\
|
||||
CreateFileA,'CreateFileA',\
|
||||
CreateFileW,'CreateFileW',\
|
||||
CreateFileMappingA,'CreateFileMappingA',\
|
||||
CreateFileMappingW,'CreateFileMappingW',\
|
||||
CreateHardLinkA,'CreateHardLinkA',\
|
||||
CreateHardLinkW,'CreateHardLinkW',\
|
||||
CreateIoCompletionPort,'CreateIoCompletionPort',\
|
||||
CreateJobObjectA,'CreateJobObjectA',\
|
||||
CreateJobObjectW,'CreateJobObjectW',\
|
||||
CreateMailslotA,'CreateMailslotA',\
|
||||
CreateMailslotW,'CreateMailslotW',\
|
||||
CreateMutexA,'CreateMutexA',\
|
||||
CreateMutexW,'CreateMutexW',\
|
||||
CreateNamedPipeA,'CreateNamedPipeA',\
|
||||
CreateNamedPipeW,'CreateNamedPipeW',\
|
||||
CreatePipe,'CreatePipe',\
|
||||
CreateProcessA,'CreateProcessA',\
|
||||
CreateProcessW,'CreateProcessW',\
|
||||
CreateRemoteThread,'CreateRemoteThread',\
|
||||
CreateSemaphoreA,'CreateSemaphoreA',\
|
||||
CreateSemaphoreW,'CreateSemaphoreW',\
|
||||
CreateTapePartition,'CreateTapePartition',\
|
||||
CreateThread,'CreateThread',\
|
||||
CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
|
||||
CreateVirtualBuffer,'CreateVirtualBuffer',\
|
||||
CreateWaitableTimerA,'CreateWaitableTimerA',\
|
||||
CreateWaitableTimerW,'CreateWaitableTimerW',\
|
||||
DebugActiveProcess,'DebugActiveProcess',\
|
||||
DebugBreak,'DebugBreak',\
|
||||
DefineDosDeviceA,'DefineDosDeviceA',\
|
||||
DefineDosDeviceW,'DefineDosDeviceW',\
|
||||
DeleteAtom,'DeleteAtom',\
|
||||
DeleteCriticalSection,'DeleteCriticalSection',\
|
||||
DeleteFiber,'DeleteFiber',\
|
||||
DeleteFileA,'DeleteFileA',\
|
||||
DeleteFileW,'DeleteFileW',\
|
||||
DeviceIoControl,'DeviceIoControl',\
|
||||
DisableThreadLibraryCalls,'DisableThreadLibraryCalls',\
|
||||
DisconnectNamedPipe,'DisconnectNamedPipe',\
|
||||
DosDateTimeToFileTime,'DosDateTimeToFileTime',\
|
||||
DuplicateConsoleHandle,'DuplicateConsoleHandle',\
|
||||
DuplicateHandle,'DuplicateHandle',\
|
||||
EndUpdateResourceA,'EndUpdateResourceA',\
|
||||
EndUpdateResourceW,'EndUpdateResourceW',\
|
||||
EnterCriticalSection,'EnterCriticalSection',\
|
||||
EnumCalendarInfoA,'EnumCalendarInfoA',\
|
||||
EnumCalendarInfoW,'EnumCalendarInfoW',\
|
||||
EnumCalendarInfoExA,'EnumCalendarInfoExA',\
|
||||
EnumCalendarInfoExW,'EnumCalendarInfoExW',\
|
||||
EnumDateFormatsA,'EnumDateFormatsA',\
|
||||
EnumDateFormatsW,'EnumDateFormatsW',\
|
||||
EnumDateFormatsExA,'EnumDateFormatsExA',\
|
||||
EnumDateFormatsExW,'EnumDateFormatsExW',\
|
||||
EnumResourceLanguagesA,'EnumResourceLanguagesA',\
|
||||
EnumResourceLanguagesW,'EnumResourceLanguagesW',\
|
||||
EnumResourceNamesA,'EnumResourceNamesA',\
|
||||
EnumResourceNamesW,'EnumResourceNamesW',\
|
||||
EnumResourceTypesA,'EnumResourceTypesA',\
|
||||
EnumResourceTypesW,'EnumResourceTypesW',\
|
||||
EnumSystemCodePagesA,'EnumSystemCodePagesA',\
|
||||
EnumSystemCodePagesW,'EnumSystemCodePagesW',\
|
||||
EnumSystemLocalesA,'EnumSystemLocalesA',\
|
||||
EnumSystemLocalesW,'EnumSystemLocalesW',\
|
||||
EnumTimeFormatsA,'EnumTimeFormatsA',\
|
||||
EnumTimeFormatsW,'EnumTimeFormatsW',\
|
||||
EraseTape,'EraseTape',\
|
||||
EscapeCommFunction,'EscapeCommFunction',\
|
||||
ExitProcess,'ExitProcess',\
|
||||
ExitThread,'ExitThread',\
|
||||
ExitVDM,'ExitVDM',\
|
||||
ExpandEnvironmentStringsA,'ExpandEnvironmentStringsA',\
|
||||
ExpandEnvironmentStringsW,'ExpandEnvironmentStringsW',\
|
||||
ExpungeConsoleCommandHistoryA,'ExpungeConsoleCommandHistoryA',\
|
||||
ExpungeConsoleCommandHistoryW,'ExpungeConsoleCommandHistoryW',\
|
||||
ExtendVirtualBuffer,'ExtendVirtualBuffer',\
|
||||
FatalAppExitA,'FatalAppExitA',\
|
||||
FatalAppExitW,'FatalAppExitW',\
|
||||
FatalExit,'FatalExit',\
|
||||
FileTimeToDosDateTime,'FileTimeToDosDateTime',\
|
||||
FileTimeToLocalFileTime,'FileTimeToLocalFileTime',\
|
||||
FileTimeToSystemTime,'FileTimeToSystemTime',\
|
||||
FillConsoleOutputAttribute,'FillConsoleOutputAttribute',\
|
||||
FillConsoleOutputCharacterA,'FillConsoleOutputCharacterA',\
|
||||
FillConsoleOutputCharacterW,'FillConsoleOutputCharacterW',\
|
||||
FindAtomA,'FindAtomA',\
|
||||
FindAtomW,'FindAtomW',\
|
||||
FindClose,'FindClose',\
|
||||
FindCloseChangeNotification,'FindCloseChangeNotification',\
|
||||
FindFirstChangeNotificationA,'FindFirstChangeNotificationA',\
|
||||
FindFirstChangeNotificationW,'FindFirstChangeNotificationW',\
|
||||
FindFirstFileA,'FindFirstFileA',\
|
||||
FindFirstFileW,'FindFirstFileW',\
|
||||
FindFirstFileExA,'FindFirstFileExA',\
|
||||
FindFirstFileExW,'FindFirstFileExW',\
|
||||
FindNextChangeNotification,'FindNextChangeNotification',\
|
||||
FindNextFileA,'FindNextFileA',\
|
||||
FindNextFileW,'FindNextFileW',\
|
||||
FindResourceA,'FindResourceA',\
|
||||
FindResourceW,'FindResourceW',\
|
||||
FindResourceExA,'FindResourceExA',\
|
||||
FindResourceExW,'FindResourceExW',\
|
||||
FlushConsoleInputBuffer,'FlushConsoleInputBuffer',\
|
||||
FlushFileBuffers,'FlushFileBuffers',\
|
||||
FlushInstructionCache,'FlushInstructionCache',\
|
||||
FlushViewOfFile,'FlushViewOfFile',\
|
||||
FoldStringA,'FoldStringA',\
|
||||
FoldStringW,'FoldStringW',\
|
||||
FormatMessageA,'FormatMessageA',\
|
||||
FormatMessageW,'FormatMessageW',\
|
||||
FreeConsole,'FreeConsole',\
|
||||
FreeEnvironmentStringsA,'FreeEnvironmentStringsA',\
|
||||
FreeEnvironmentStringsW,'FreeEnvironmentStringsW',\
|
||||
FreeLibrary,'FreeLibrary',\
|
||||
FreeLibraryAndExitThread,'FreeLibraryAndExitThread',\
|
||||
FreeResource,'FreeResource',\
|
||||
FreeVirtualBuffer,'FreeVirtualBuffer',\
|
||||
GenerateConsoleCtrlEvent,'GenerateConsoleCtrlEvent',\
|
||||
GetACP,'GetACP',\
|
||||
GetAtomNameA,'GetAtomNameA',\
|
||||
GetAtomNameW,'GetAtomNameW',\
|
||||
GetBinaryTypeA,'GetBinaryTypeA',\
|
||||
GetBinaryTypeW,'GetBinaryTypeW',\
|
||||
GetCPInfo,'GetCPInfo',\
|
||||
GetCPInfoExA,'GetCPInfoExA',\
|
||||
GetCPInfoExW,'GetCPInfoExW',\
|
||||
GetCommConfig,'GetCommConfig',\
|
||||
GetCommMask,'GetCommMask',\
|
||||
GetCommModemStatus,'GetCommModemStatus',\
|
||||
GetCommProperties,'GetCommProperties',\
|
||||
GetCommState,'GetCommState',\
|
||||
GetCommTimeouts,'GetCommTimeouts',\
|
||||
GetCommandLineA,'GetCommandLineA',\
|
||||
GetCommandLineW,'GetCommandLineW',\
|
||||
GetCompressedFileSizeA,'GetCompressedFileSizeA',\
|
||||
GetCompressedFileSizeW,'GetCompressedFileSizeW',\
|
||||
GetComputerNameA,'GetComputerNameA',\
|
||||
GetComputerNameW,'GetComputerNameW',\
|
||||
GetConsoleAliasA,'GetConsoleAliasA',\
|
||||
GetConsoleAliasW,'GetConsoleAliasW',\
|
||||
GetConsoleAliasExesA,'GetConsoleAliasExesA',\
|
||||
GetConsoleAliasExesW,'GetConsoleAliasExesW',\
|
||||
GetConsoleAliasExesLengthA,'GetConsoleAliasExesLengthA',\
|
||||
GetConsoleAliasExesLengthW,'GetConsoleAliasExesLengthW',\
|
||||
GetConsoleAliasesA,'GetConsoleAliasesA',\
|
||||
GetConsoleAliasesW,'GetConsoleAliasesW',\
|
||||
GetConsoleAliasesLengthA,'GetConsoleAliasesLengthA',\
|
||||
GetConsoleAliasesLengthW,'GetConsoleAliasesLengthW',\
|
||||
GetConsoleCP,'GetConsoleCP',\
|
||||
GetConsoleCommandHistoryA,'GetConsoleCommandHistoryA',\
|
||||
GetConsoleCommandHistoryW,'GetConsoleCommandHistoryW',\
|
||||
GetConsoleCommandHistoryLengthA,'GetConsoleCommandHistoryLengthA',\
|
||||
GetConsoleCommandHistoryLengthW,'GetConsoleCommandHistoryLengthW',\
|
||||
GetConsoleCursorInfo,'GetConsoleCursorInfo',\
|
||||
GetConsoleDisplayMode,'GetConsoleDisplayMode',\
|
||||
GetConsoleFontInfo,'GetConsoleFontInfo',\
|
||||
GetConsoleFontSize,'GetConsoleFontSize',\
|
||||
GetConsoleHardwareState,'GetConsoleHardwareState',\
|
||||
GetConsoleInputExeNameA,'GetConsoleInputExeNameA',\
|
||||
GetConsoleInputExeNameW,'GetConsoleInputExeNameW',\
|
||||
GetConsoleInputWaitHandle,'GetConsoleInputWaitHandle',\
|
||||
GetConsoleKeyboardLayoutNameA,'GetConsoleKeyboardLayoutNameA',\
|
||||
GetConsoleKeyboardLayoutNameW,'GetConsoleKeyboardLayoutNameW',\
|
||||
GetConsoleMode,'GetConsoleMode',\
|
||||
GetConsoleOutputCP,'GetConsoleOutputCP',\
|
||||
GetConsoleScreenBufferInfo,'GetConsoleScreenBufferInfo',\
|
||||
GetConsoleTitleA,'GetConsoleTitleA',\
|
||||
GetConsoleTitleW,'GetConsoleTitleW',\
|
||||
GetConsoleWindow,'GetConsoleWindow',\
|
||||
GetCurrencyFormatA,'GetCurrencyFormatA',\
|
||||
GetCurrencyFormatW,'GetCurrencyFormatW',\
|
||||
GetCurrentConsoleFont,'GetCurrentConsoleFont',\
|
||||
GetCurrentDirectoryA,'GetCurrentDirectoryA',\
|
||||
GetCurrentDirectoryW,'GetCurrentDirectoryW',\
|
||||
GetCurrentProcess,'GetCurrentProcess',\
|
||||
GetCurrentProcessId,'GetCurrentProcessId',\
|
||||
GetCurrentThread,'GetCurrentThread',\
|
||||
GetCurrentThreadId,'GetCurrentThreadId',\
|
||||
GetDateFormatA,'GetDateFormatA',\
|
||||
GetDateFormatW,'GetDateFormatW',\
|
||||
GetDefaultCommConfigA,'GetDefaultCommConfigA',\
|
||||
GetDefaultCommConfigW,'GetDefaultCommConfigW',\
|
||||
GetDevicePowerState,'GetDevicePowerState',\
|
||||
GetDiskFreeSpaceA,'GetDiskFreeSpaceA',\
|
||||
GetDiskFreeSpaceW,'GetDiskFreeSpaceW',\
|
||||
GetDiskFreeSpaceExA,'GetDiskFreeSpaceExA',\
|
||||
GetDiskFreeSpaceExW,'GetDiskFreeSpaceExW',\
|
||||
GetDriveTypeA,'GetDriveTypeA',\
|
||||
GetDriveTypeW,'GetDriveTypeW',\
|
||||
GetEnvironmentStringsA,'GetEnvironmentStringsA',\
|
||||
GetEnvironmentStringsW,'GetEnvironmentStringsW',\
|
||||
GetEnvironmentVariableA,'GetEnvironmentVariableA',\
|
||||
GetEnvironmentVariableW,'GetEnvironmentVariableW',\
|
||||
GetExitCodeProcess,'GetExitCodeProcess',\
|
||||
GetExitCodeThread,'GetExitCodeThread',\
|
||||
GetFileAttributesA,'GetFileAttributesA',\
|
||||
GetFileAttributesW,'GetFileAttributesW',\
|
||||
GetFileAttributesExA,'GetFileAttributesExA',\
|
||||
GetFileAttributesExW,'GetFileAttributesExW',\
|
||||
GetFileInformationByHandle,'GetFileInformationByHandle',\
|
||||
GetFileSize,'GetFileSize',\
|
||||
GetFileSizeEx,'GetFileSizeEx',\
|
||||
GetFileTime,'GetFileTime',\
|
||||
GetFileType,'GetFileType',\
|
||||
GetFullPathNameA,'GetFullPathNameA',\
|
||||
GetFullPathNameW,'GetFullPathNameW',\
|
||||
GetHandleInformation,'GetHandleInformation',\
|
||||
GetLargestConsoleWindowSize,'GetLargestConsoleWindowSize',\
|
||||
GetLastError,'GetLastError',\
|
||||
GetLocalTime,'GetLocalTime',\
|
||||
GetLocaleInfoA,'GetLocaleInfoA',\
|
||||
GetLocaleInfoW,'GetLocaleInfoW',\
|
||||
GetLogicalDriveStringsA,'GetLogicalDriveStringsA',\
|
||||
GetLogicalDriveStringsW,'GetLogicalDriveStringsW',\
|
||||
GetLogicalDrives,'GetLogicalDrives',\
|
||||
GetLongPathNameA,'GetLongPathNameA',\
|
||||
GetLongPathNameW,'GetLongPathNameW',\
|
||||
GetMailslotInfo,'GetMailslotInfo',\
|
||||
GetModuleFileNameA,'GetModuleFileNameA',\
|
||||
GetModuleFileNameW,'GetModuleFileNameW',\
|
||||
GetModuleHandleA,'GetModuleHandleA',\
|
||||
GetModuleHandleW,'GetModuleHandleW',\
|
||||
GetNamedPipeHandleStateA,'GetNamedPipeHandleStateA',\
|
||||
GetNamedPipeHandleStateW,'GetNamedPipeHandleStateW',\
|
||||
GetNamedPipeInfo,'GetNamedPipeInfo',\
|
||||
GetNextVDMCommand,'GetNextVDMCommand',\
|
||||
GetNumberFormatA,'GetNumberFormatA',\
|
||||
GetNumberFormatW,'GetNumberFormatW',\
|
||||
GetNumberOfConsoleFonts,'GetNumberOfConsoleFonts',\
|
||||
GetNumberOfConsoleInputEvents,'GetNumberOfConsoleInputEvents',\
|
||||
GetNumberOfConsoleMouseButtons,'GetNumberOfConsoleMouseButtons',\
|
||||
GetOEMCP,'GetOEMCP',\
|
||||
GetOverlappedResult,'GetOverlappedResult',\
|
||||
GetPriorityClass,'GetPriorityClass',\
|
||||
GetPrivateProfileIntA,'GetPrivateProfileIntA',\
|
||||
GetPrivateProfileIntW,'GetPrivateProfileIntW',\
|
||||
GetPrivateProfileSectionA,'GetPrivateProfileSectionA',\
|
||||
GetPrivateProfileSectionW,'GetPrivateProfileSectionW',\
|
||||
GetPrivateProfileSectionNamesA,'GetPrivateProfileSectionNamesA',\
|
||||
GetPrivateProfileSectionNamesW,'GetPrivateProfileSectionNamesW',\
|
||||
GetPrivateProfileStringA,'GetPrivateProfileStringA',\
|
||||
GetPrivateProfileStringW,'GetPrivateProfileStringW',\
|
||||
GetPrivateProfileStructA,'GetPrivateProfileStructA',\
|
||||
GetPrivateProfileStructW,'GetPrivateProfileStructW',\
|
||||
GetProcAddress,'GetProcAddress',\
|
||||
GetProcessAffinityMask,'GetProcessAffinityMask',\
|
||||
GetProcessHeap,'GetProcessHeap',\
|
||||
GetProcessHeaps,'GetProcessHeaps',\
|
||||
GetProcessPriorityBoost,'GetProcessPriorityBoost',\
|
||||
GetProcessShutdownParameters,'GetProcessShutdownParameters',\
|
||||
GetProcessTimes,'GetProcessTimes',\
|
||||
GetProcessVersion,'GetProcessVersion',\
|
||||
GetProcessWorkingSetSize,'GetProcessWorkingSetSize',\
|
||||
GetProfileIntA,'GetProfileIntA',\
|
||||
GetProfileIntW,'GetProfileIntW',\
|
||||
GetProfileSectionA,'GetProfileSectionA',\
|
||||
GetProfileSectionW,'GetProfileSectionW',\
|
||||
GetProfileStringA,'GetProfileStringA',\
|
||||
GetProfileStringW,'GetProfileStringW',\
|
||||
GetQueuedCompletionStatus,'GetQueuedCompletionStatus',\
|
||||
GetShortPathNameA,'GetShortPathNameA',\
|
||||
GetShortPathNameW,'GetShortPathNameW',\
|
||||
GetStartupInfoA,'GetStartupInfoA',\
|
||||
GetStartupInfoW,'GetStartupInfoW',\
|
||||
GetStdHandle,'GetStdHandle',\
|
||||
GetStringTypeA,'GetStringTypeA',\
|
||||
GetStringTypeW,'GetStringTypeW',\
|
||||
GetStringTypeExA,'GetStringTypeExA',\
|
||||
GetStringTypeExW,'GetStringTypeExW',\
|
||||
GetSystemDefaultLCID,'GetSystemDefaultLCID',\
|
||||
GetSystemDefaultLangID,'GetSystemDefaultLangID',\
|
||||
GetSystemDirectoryA,'GetSystemDirectoryA',\
|
||||
GetSystemDirectoryW,'GetSystemDirectoryW',\
|
||||
GetSystemInfo,'GetSystemInfo',\
|
||||
GetSystemPowerStatus,'GetSystemPowerStatus',\
|
||||
GetSystemTime,'GetSystemTime',\
|
||||
GetSystemTimeAdjustment,'GetSystemTimeAdjustment',\
|
||||
GetSystemTimeAsFileTime,'GetSystemTimeAsFileTime',\
|
||||
GetTapeParameters,'GetTapeParameters',\
|
||||
GetTapePosition,'GetTapePosition',\
|
||||
GetTapeStatus,'GetTapeStatus',\
|
||||
GetTempFileNameA,'GetTempFileNameA',\
|
||||
GetTempFileNameW,'GetTempFileNameW',\
|
||||
GetTempPathA,'GetTempPathA',\
|
||||
GetTempPathW,'GetTempPathW',\
|
||||
GetThreadContext,'GetThreadContext',\
|
||||
GetThreadLocale,'GetThreadLocale',\
|
||||
GetThreadPriority,'GetThreadPriority',\
|
||||
GetThreadPriorityBoost,'GetThreadPriorityBoost',\
|
||||
GetThreadSelectorEntry,'GetThreadSelectorEntry',\
|
||||
GetThreadTimes,'GetThreadTimes',\
|
||||
GetTickCount,'GetTickCount',\
|
||||
GetTimeFormatA,'GetTimeFormatA',\
|
||||
GetTimeFormatW,'GetTimeFormatW',\
|
||||
GetTimeZoneInformation,'GetTimeZoneInformation',\
|
||||
GetUserDefaultLCID,'GetUserDefaultLCID',\
|
||||
GetUserDefaultLangID,'GetUserDefaultLangID',\
|
||||
GetVDMCurrentDirectories,'GetVDMCurrentDirectories',\
|
||||
GetVersion,'GetVersion',\
|
||||
GetVersionExA,'GetVersionExA',\
|
||||
GetVersionExW,'GetVersionExW',\
|
||||
GetVolumeInformationA,'GetVolumeInformationA',\
|
||||
GetVolumeInformationW,'GetVolumeInformationW',\
|
||||
GetWindowsDirectoryA,'GetWindowsDirectoryA',\
|
||||
GetWindowsDirectoryW,'GetWindowsDirectoryW',\
|
||||
GlobalAddAtomA,'GlobalAddAtomA',\
|
||||
GlobalAddAtomW,'GlobalAddAtomW',\
|
||||
GlobalAlloc,'GlobalAlloc',\
|
||||
GlobalCompact,'GlobalCompact',\
|
||||
GlobalDeleteAtom,'GlobalDeleteAtom',\
|
||||
GlobalFindAtomA,'GlobalFindAtomA',\
|
||||
GlobalFindAtomW,'GlobalFindAtomW',\
|
||||
GlobalFix,'GlobalFix',\
|
||||
GlobalFlags,'GlobalFlags',\
|
||||
GlobalFree,'GlobalFree',\
|
||||
GlobalGetAtomNameA,'GlobalGetAtomNameA',\
|
||||
GlobalGetAtomNameW,'GlobalGetAtomNameW',\
|
||||
GlobalHandle,'GlobalHandle',\
|
||||
GlobalLock,'GlobalLock',\
|
||||
GlobalMemoryStatus,'GlobalMemoryStatus',\
|
||||
GlobalMemoryStatusVlm,'GlobalMemoryStatusVlm',\
|
||||
GlobalReAlloc,'GlobalReAlloc',\
|
||||
GlobalSize,'GlobalSize',\
|
||||
GlobalUnWire,'GlobalUnWire',\
|
||||
GlobalUnfix,'GlobalUnfix',\
|
||||
GlobalUnlock,'GlobalUnlock',\
|
||||
GlobalWire,'GlobalWire',\
|
||||
Heap32First,'Heap32First',\
|
||||
Heap32ListFirst,'Heap32ListFirst',\
|
||||
Heap32ListNext,'Heap32ListNext',\
|
||||
Heap32Next,'Heap32Next',\
|
||||
HeapAlloc,'HeapAlloc',\
|
||||
HeapCompact,'HeapCompact',\
|
||||
HeapCreate,'HeapCreate',\
|
||||
HeapDestroy,'HeapDestroy',\
|
||||
HeapExtend,'HeapExtend',\
|
||||
HeapFree,'HeapFree',\
|
||||
HeapLock,'HeapLock',\
|
||||
HeapReAlloc,'HeapReAlloc',\
|
||||
HeapSize,'HeapSize',\
|
||||
HeapSummary,'HeapSummary',\
|
||||
HeapUnlock,'HeapUnlock',\
|
||||
HeapUsage,'HeapUsage',\
|
||||
HeapValidate,'HeapValidate',\
|
||||
HeapWalk,'HeapWalk',\
|
||||
InitAtomTable,'InitAtomTable',\
|
||||
InitializeCriticalSection,'InitializeCriticalSection',\
|
||||
InitializeCriticalSectionAndSpinCount,'InitializeCriticalSectionAndSpinCount',\
|
||||
InterlockedCompareExchange,'InterlockedCompareExchange',\
|
||||
InterlockedDecrement,'InterlockedDecrement',\
|
||||
InterlockedExchange,'InterlockedExchange',\
|
||||
InterlockedExchangeAdd,'InterlockedExchangeAdd',\
|
||||
InterlockedIncrement,'InterlockedIncrement',\
|
||||
InvalidateConsoleDIBits,'InvalidateConsoleDIBits',\
|
||||
IsBadCodePtr,'IsBadCodePtr',\
|
||||
IsBadHugeReadPtr,'IsBadHugeReadPtr',\
|
||||
IsBadHugeWritePtr,'IsBadHugeWritePtr',\
|
||||
IsBadReadPtr,'IsBadReadPtr',\
|
||||
IsBadStringPtrA,'IsBadStringPtrA',\
|
||||
IsBadStringPtrW,'IsBadStringPtrW',\
|
||||
IsBadWritePtr,'IsBadWritePtr',\
|
||||
IsDBCSLeadByte,'IsDBCSLeadByte',\
|
||||
IsDBCSLeadByteEx,'IsDBCSLeadByteEx',\
|
||||
IsDebuggerPresent,'IsDebuggerPresent',\
|
||||
IsProcessorFeaturePresent,'IsProcessorFeaturePresent',\
|
||||
IsValidCodePage,'IsValidCodePage',\
|
||||
IsValidLocale,'IsValidLocale',\
|
||||
LCMapStringA,'LCMapStringA',\
|
||||
LCMapStringW,'LCMapStringW',\
|
||||
LeaveCriticalSection,'LeaveCriticalSection',\
|
||||
LoadLibraryA,'LoadLibraryA',\
|
||||
LoadLibraryW,'LoadLibraryW',\
|
||||
LoadLibraryExA,'LoadLibraryExA',\
|
||||
LoadLibraryExW,'LoadLibraryExW',\
|
||||
LoadModule,'LoadModule',\
|
||||
LoadResource,'LoadResource',\
|
||||
LocalAlloc,'LocalAlloc',\
|
||||
LocalCompact,'LocalCompact',\
|
||||
LocalFileTimeToFileTime,'LocalFileTimeToFileTime',\
|
||||
LocalFlags,'LocalFlags',\
|
||||
LocalFree,'LocalFree',\
|
||||
LocalHandle,'LocalHandle',\
|
||||
LocalLock,'LocalLock',\
|
||||
LocalReAlloc,'LocalReAlloc',\
|
||||
LocalShrink,'LocalShrink',\
|
||||
LocalSize,'LocalSize',\
|
||||
LocalUnlock,'LocalUnlock',\
|
||||
LockFile,'LockFile',\
|
||||
LockFileEx,'LockFileEx',\
|
||||
LockResource,'LockResource',\
|
||||
MapViewOfFile,'MapViewOfFile',\
|
||||
MapViewOfFileEx,'MapViewOfFileEx',\
|
||||
MapViewOfFileVlm,'MapViewOfFileVlm',\
|
||||
Module32First,'Module32First',\
|
||||
Module32Next,'Module32Next',\
|
||||
MoveFileA,'MoveFileA',\
|
||||
MoveFileW,'MoveFileW',\
|
||||
MoveFileExA,'MoveFileExA',\
|
||||
MoveFileExW,'MoveFileExW',\
|
||||
MoveFileWithProgressA,'MoveFileWithProgressA',\
|
||||
MoveFileWithProgressW,'MoveFileWithProgressW',\
|
||||
MulDiv,'MulDiv',\
|
||||
MultiByteToWideChar,'MultiByteToWideChar',\
|
||||
OpenEventA,'OpenEventA',\
|
||||
OpenEventW,'OpenEventW',\
|
||||
OpenFile,'OpenFile',\
|
||||
OpenFileMappingA,'OpenFileMappingA',\
|
||||
OpenFileMappingW,'OpenFileMappingW',\
|
||||
OpenJobObjectA,'OpenJobObjectA',\
|
||||
OpenJobObjectW,'OpenJobObjectW',\
|
||||
OpenMutexA,'OpenMutexA',\
|
||||
OpenMutexW,'OpenMutexW',\
|
||||
OpenProcess,'OpenProcess',\
|
||||
OpenProfileUserMapping,'OpenProfileUserMapping',\
|
||||
OpenSemaphoreA,'OpenSemaphoreA',\
|
||||
OpenSemaphoreW,'OpenSemaphoreW',\
|
||||
OpenWaitableTimerA,'OpenWaitableTimerA',\
|
||||
OpenWaitableTimerW,'OpenWaitableTimerW',\
|
||||
OutputDebugStringA,'OutputDebugStringA',\
|
||||
OutputDebugStringW,'OutputDebugStringW',\
|
||||
PeekConsoleInputA,'PeekConsoleInputA',\
|
||||
PeekConsoleInputW,'PeekConsoleInputW',\
|
||||
PeekNamedPipe,'PeekNamedPipe',\
|
||||
PostQueuedCompletionStatus,'PostQueuedCompletionStatus',\
|
||||
PrepareTape,'PrepareTape',\
|
||||
Process32First,'Process32First',\
|
||||
Process32Next,'Process32Next',\
|
||||
PulseEvent,'PulseEvent',\
|
||||
PurgeComm,'PurgeComm',\
|
||||
QueryDosDeviceA,'QueryDosDeviceA',\
|
||||
QueryDosDeviceW,'QueryDosDeviceW',\
|
||||
QueryInformationJobObject,'QueryInformationJobObject',\
|
||||
QueryPerformanceCounter,'QueryPerformanceCounter',\
|
||||
QueryPerformanceFrequency,'QueryPerformanceFrequency',\
|
||||
QueryWin31IniFilesMappedToRegistry,'QueryWin31IniFilesMappedToRegistry',\
|
||||
QueueUserAPC,'QueueUserAPC',\
|
||||
RaiseException,'RaiseException',\
|
||||
ReadConsoleA,'ReadConsoleA',\
|
||||
ReadConsoleW,'ReadConsoleW',\
|
||||
ReadConsoleInputA,'ReadConsoleInputA',\
|
||||
ReadConsoleInputW,'ReadConsoleInputW',\
|
||||
ReadConsoleInputExA,'ReadConsoleInputExA',\
|
||||
ReadConsoleInputExW,'ReadConsoleInputExW',\
|
||||
ReadConsoleOutputA,'ReadConsoleOutputA',\
|
||||
ReadConsoleOutputW,'ReadConsoleOutputW',\
|
||||
ReadConsoleOutputAttribute,'ReadConsoleOutputAttribute',\
|
||||
ReadConsoleOutputCharacterA,'ReadConsoleOutputCharacterA',\
|
||||
ReadConsoleOutputCharacterW,'ReadConsoleOutputCharacterW',\
|
||||
ReadFile,'ReadFile',\
|
||||
ReadFileEx,'ReadFileEx',\
|
||||
ReadFileScatter,'ReadFileScatter',\
|
||||
ReadFileVlm,'ReadFileVlm',\
|
||||
ReadProcessMemory,'ReadProcessMemory',\
|
||||
ReadProcessMemoryVlm,'ReadProcessMemoryVlm',\
|
||||
RegisterConsoleVDM,'RegisterConsoleVDM',\
|
||||
RegisterWaitForInputIdle,'RegisterWaitForInputIdle',\
|
||||
RegisterWowBaseHandlers,'RegisterWowBaseHandlers',\
|
||||
RegisterWowExec,'RegisterWowExec',\
|
||||
ReleaseMutex,'ReleaseMutex',\
|
||||
ReleaseSemaphore,'ReleaseSemaphore',\
|
||||
RemoveDirectoryA,'RemoveDirectoryA',\
|
||||
RemoveDirectoryW,'RemoveDirectoryW',\
|
||||
RequestWakeupLatency,'RequestWakeupLatency',\
|
||||
ResetEvent,'ResetEvent',\
|
||||
ResumeThread,'ResumeThread',\
|
||||
RtlFillMemory,'RtlFillMemory',\
|
||||
RtlMoveMemory,'RtlMoveMemory',\
|
||||
RtlUnwind,'RtlUnwind',\
|
||||
RtlZeroMemory,'RtlZeroMemory',\
|
||||
ScrollConsoleScreenBufferA,'ScrollConsoleScreenBufferA',\
|
||||
ScrollConsoleScreenBufferW,'ScrollConsoleScreenBufferW',\
|
||||
SearchPathA,'SearchPathA',\
|
||||
SearchPathW,'SearchPathW',\
|
||||
SetCommBreak,'SetCommBreak',\
|
||||
SetCommConfig,'SetCommConfig',\
|
||||
SetCommMask,'SetCommMask',\
|
||||
SetCommState,'SetCommState',\
|
||||
SetCommTimeouts,'SetCommTimeouts',\
|
||||
SetComputerNameA,'SetComputerNameA',\
|
||||
SetComputerNameW,'SetComputerNameW',\
|
||||
SetConsoleActiveScreenBuffer,'SetConsoleActiveScreenBuffer',\
|
||||
SetConsoleCP,'SetConsoleCP',\
|
||||
SetConsoleCommandHistoryMode,'SetConsoleCommandHistoryMode',\
|
||||
SetConsoleCtrlHandler,'SetConsoleCtrlHandler',\
|
||||
SetConsoleCursor,'SetConsoleCursor',\
|
||||
SetConsoleCursorInfo,'SetConsoleCursorInfo',\
|
||||
SetConsoleCursorPosition,'SetConsoleCursorPosition',\
|
||||
SetConsoleDisplayMode,'SetConsoleDisplayMode',\
|
||||
SetConsoleFont,'SetConsoleFont',\
|
||||
SetConsoleHardwareState,'SetConsoleHardwareState',\
|
||||
SetConsoleIcon,'SetConsoleIcon',\
|
||||
SetConsoleInputExeNameA,'SetConsoleInputExeNameA',\
|
||||
SetConsoleInputExeNameW,'SetConsoleInputExeNameW',\
|
||||
SetConsoleKeyShortcuts,'SetConsoleKeyShortcuts',\
|
||||
SetConsoleMaximumWindowSize,'SetConsoleMaximumWindowSize',\
|
||||
SetConsoleMenuClose,'SetConsoleMenuClose',\
|
||||
SetConsoleMode,'SetConsoleMode',\
|
||||
SetConsoleNumberOfCommandsA,'SetConsoleNumberOfCommandsA',\
|
||||
SetConsoleNumberOfCommandsW,'SetConsoleNumberOfCommandsW',\
|
||||
SetConsoleOutputCP,'SetConsoleOutputCP',\
|
||||
SetConsolePalette,'SetConsolePalette',\
|
||||
SetConsoleScreenBufferSize,'SetConsoleScreenBufferSize',\
|
||||
SetConsoleTextAttribute,'SetConsoleTextAttribute',\
|
||||
SetConsoleTitleA,'SetConsoleTitleA',\
|
||||
SetConsoleTitleW,'SetConsoleTitleW',\
|
||||
SetConsoleWindowInfo,'SetConsoleWindowInfo',\
|
||||
SetCriticalSectionSpinCount,'SetCriticalSectionSpinCount',\
|
||||
SetCurrentDirectoryA,'SetCurrentDirectoryA',\
|
||||
SetCurrentDirectoryW,'SetCurrentDirectoryW',\
|
||||
SetDefaultCommConfigA,'SetDefaultCommConfigA',\
|
||||
SetDefaultCommConfigW,'SetDefaultCommConfigW',\
|
||||
SetEndOfFile,'SetEndOfFile',\
|
||||
SetEnvironmentVariableA,'SetEnvironmentVariableA',\
|
||||
SetEnvironmentVariableW,'SetEnvironmentVariableW',\
|
||||
SetErrorMode,'SetErrorMode',\
|
||||
SetEvent,'SetEvent',\
|
||||
SetFileApisToANSI,'SetFileApisToANSI',\
|
||||
SetFileApisToOEM,'SetFileApisToOEM',\
|
||||
SetFileAttributesA,'SetFileAttributesA',\
|
||||
SetFileAttributesW,'SetFileAttributesW',\
|
||||
SetFilePointer,'SetFilePointer',\
|
||||
SetFilePointerEx,'SetFilePointerEx',\
|
||||
SetFileTime,'SetFileTime',\
|
||||
SetHandleCount,'SetHandleCount',\
|
||||
SetHandleInformation,'SetHandleInformation',\
|
||||
SetInformationJobObject,'SetInformationJobObject',\
|
||||
SetLastConsoleEventActive,'SetLastConsoleEventActive',\
|
||||
SetLastError,'SetLastError',\
|
||||
SetLocalTime,'SetLocalTime',\
|
||||
SetLocaleInfoA,'SetLocaleInfoA',\
|
||||
SetLocaleInfoW,'SetLocaleInfoW',\
|
||||
SetMailslotInfo,'SetMailslotInfo',\
|
||||
SetNamedPipeHandleState,'SetNamedPipeHandleState',\
|
||||
SetPriorityClass,'SetPriorityClass',\
|
||||
SetProcessAffinityMask,'SetProcessAffinityMask',\
|
||||
SetProcessPriorityBoost,'SetProcessPriorityBoost',\
|
||||
SetProcessShutdownParameters,'SetProcessShutdownParameters',\
|
||||
SetProcessWorkingSetSize,'SetProcessWorkingSetSize',\
|
||||
SetStdHandle,'SetStdHandle',\
|
||||
SetSystemPowerState,'SetSystemPowerState',\
|
||||
SetSystemTime,'SetSystemTime',\
|
||||
SetSystemTimeAdjustment,'SetSystemTimeAdjustment',\
|
||||
SetTapeParameters,'SetTapeParameters',\
|
||||
SetTapePosition,'SetTapePosition',\
|
||||
SetThreadAffinityMask,'SetThreadAffinityMask',\
|
||||
SetThreadContext,'SetThreadContext',\
|
||||
SetThreadExecutionState,'SetThreadExecutionState',\
|
||||
SetThreadIdealProcessor,'SetThreadIdealProcessor',\
|
||||
SetThreadLocale,'SetThreadLocale',\
|
||||
SetThreadPriority,'SetThreadPriority',\
|
||||
SetThreadPriorityBoost,'SetThreadPriorityBoost',\
|
||||
SetTimeZoneInformation,'SetTimeZoneInformation',\
|
||||
SetUnhandledExceptionFilter,'SetUnhandledExceptionFilter',\
|
||||
SetVDMCurrentDirectories,'SetVDMCurrentDirectories',\
|
||||
SetVolumeLabelA,'SetVolumeLabelA',\
|
||||
SetVolumeLabelW,'SetVolumeLabelW',\
|
||||
SetWaitableTimer,'SetWaitableTimer',\
|
||||
SetupComm,'SetupComm',\
|
||||
ShowConsoleCursor,'ShowConsoleCursor',\
|
||||
SignalObjectAndWait,'SignalObjectAndWait',\
|
||||
SizeofResource,'SizeofResource',\
|
||||
Sleep,'Sleep',\
|
||||
SleepEx,'SleepEx',\
|
||||
SuspendThread,'SuspendThread',\
|
||||
SwitchToFiber,'SwitchToFiber',\
|
||||
SwitchToThread,'SwitchToThread',\
|
||||
SystemTimeToFileTime,'SystemTimeToFileTime',\
|
||||
SystemTimeToTzSpecificLocalTime,'SystemTimeToTzSpecificLocalTime',\
|
||||
TerminateJobObject,'TerminateJobObject',\
|
||||
TerminateProcess,'TerminateProcess',\
|
||||
TerminateThread,'TerminateThread',\
|
||||
Thread32First,'Thread32First',\
|
||||
Thread32Next,'Thread32Next',\
|
||||
TlsAlloc,'TlsAlloc',\
|
||||
TlsFree,'TlsFree',\
|
||||
TlsGetValue,'TlsGetValue',\
|
||||
TlsSetValue,'TlsSetValue',\
|
||||
Toolhelp32ReadProcessMemory,'Toolhelp32ReadProcessMemory',\
|
||||
TransactNamedPipe,'TransactNamedPipe',\
|
||||
TransmitCommChar,'TransmitCommChar',\
|
||||
TrimVirtualBuffer,'TrimVirtualBuffer',\
|
||||
TryEnterCriticalSection,'TryEnterCriticalSection',\
|
||||
UnhandledExceptionFilter,'UnhandledExceptionFilter',\
|
||||
UnlockFile,'UnlockFile',\
|
||||
UnlockFileEx,'UnlockFileEx',\
|
||||
UnmapViewOfFile,'UnmapViewOfFile',\
|
||||
UnmapViewOfFileVlm,'UnmapViewOfFileVlm',\
|
||||
UpdateResourceA,'UpdateResourceA',\
|
||||
UpdateResourceW,'UpdateResourceW',\
|
||||
VDMConsoleOperation,'VDMConsoleOperation',\
|
||||
VDMOperationStarted,'VDMOperationStarted',\
|
||||
VerLanguageNameA,'VerLanguageNameA',\
|
||||
VerLanguageNameW,'VerLanguageNameW',\
|
||||
VerifyConsoleIoHandle,'VerifyConsoleIoHandle',\
|
||||
VirtualAlloc,'VirtualAlloc',\
|
||||
VirtualAllocEx,'VirtualAllocEx',\
|
||||
VirtualAllocVlm,'VirtualAllocVlm',\
|
||||
VirtualBufferExceptionHandler,'VirtualBufferExceptionHandler',\
|
||||
VirtualFree,'VirtualFree',\
|
||||
VirtualFreeEx,'VirtualFreeEx',\
|
||||
VirtualFreeVlm,'VirtualFreeVlm',\
|
||||
VirtualLock,'VirtualLock',\
|
||||
VirtualProtect,'VirtualProtect',\
|
||||
VirtualProtectEx,'VirtualProtectEx',\
|
||||
VirtualProtectVlm,'VirtualProtectVlm',\
|
||||
VirtualQuery,'VirtualQuery',\
|
||||
VirtualQueryEx,'VirtualQueryEx',\
|
||||
VirtualQueryVlm,'VirtualQueryVlm',\
|
||||
VirtualUnlock,'VirtualUnlock',\
|
||||
WaitCommEvent,'WaitCommEvent',\
|
||||
WaitForDebugEvent,'WaitForDebugEvent',\
|
||||
WaitForMultipleObjects,'WaitForMultipleObjects',\
|
||||
WaitForMultipleObjectsEx,'WaitForMultipleObjectsEx',\
|
||||
WaitForSingleObject,'WaitForSingleObject',\
|
||||
WaitForSingleObjectEx,'WaitForSingleObjectEx',\
|
||||
WaitNamedPipeA,'WaitNamedPipeA',\
|
||||
WaitNamedPipeW,'WaitNamedPipeW',\
|
||||
WideCharToMultiByte,'WideCharToMultiByte',\
|
||||
WinExec,'WinExec',\
|
||||
WriteConsoleA,'WriteConsoleA',\
|
||||
WriteConsoleW,'WriteConsoleW',\
|
||||
WriteConsoleInputA,'WriteConsoleInputA',\
|
||||
WriteConsoleInputW,'WriteConsoleInputW',\
|
||||
WriteConsoleInputVDMA,'WriteConsoleInputVDMA',\
|
||||
WriteConsoleInputVDMW,'WriteConsoleInputVDMW',\
|
||||
WriteConsoleOutputA,'WriteConsoleOutputA',\
|
||||
WriteConsoleOutputW,'WriteConsoleOutputW',\
|
||||
WriteConsoleOutputAttribute,'WriteConsoleOutputAttribute',\
|
||||
WriteConsoleOutputCharacterA,'WriteConsoleOutputCharacterA',\
|
||||
WriteConsoleOutputCharacterW,'WriteConsoleOutputCharacterW',\
|
||||
WriteFile,'WriteFile',\
|
||||
WriteFileEx,'WriteFileEx',\
|
||||
WriteFileGather,'WriteFileGather',\
|
||||
WriteFileVlm,'WriteFileVlm',\
|
||||
WritePrivateProfileSectionA,'WritePrivateProfileSectionA',\
|
||||
WritePrivateProfileSectionW,'WritePrivateProfileSectionW',\
|
||||
WritePrivateProfileStringA,'WritePrivateProfileStringA',\
|
||||
WritePrivateProfileStringW,'WritePrivateProfileStringW',\
|
||||
WritePrivateProfileStructA,'WritePrivateProfileStructA',\
|
||||
WritePrivateProfileStructW,'WritePrivateProfileStructW',\
|
||||
WriteProcessMemory,'WriteProcessMemory',\
|
||||
WriteProcessMemoryVlm,'WriteProcessMemoryVlm',\
|
||||
WriteProfileSectionA,'WriteProfileSectionA',\
|
||||
WriteProfileSectionW,'WriteProfileSectionW',\
|
||||
WriteProfileStringA,'WriteProfileStringA',\
|
||||
WriteProfileStringW,'WriteProfileStringW',\
|
||||
WriteTapemark,'WriteTapemark',\
|
||||
_hread,'_hread',\
|
||||
_hwrite,'_hwrite',\
|
||||
_lclose,'_lclose',\
|
||||
_lcreat,'_lcreat',\
|
||||
_llseek,'_llseek',\
|
||||
_lopen,'_lopen',\
|
||||
_lread,'_lread',\
|
||||
_lwrite,'_lwrite',\
|
||||
lstrcatA,'lstrcatA',\
|
||||
lstrcatW,'lstrcatW',\
|
||||
lstrcmpA,'lstrcmpA',\
|
||||
lstrcmpW,'lstrcmpW',\
|
||||
lstrcmpiA,'lstrcmpiA',\
|
||||
lstrcmpiW,'lstrcmpiW',\
|
||||
lstrcpyA,'lstrcpyA',\
|
||||
lstrcpyW,'lstrcpyW',\
|
||||
lstrcpynA,'lstrcpynA',\
|
||||
lstrcpynW,'lstrcpynW',\
|
||||
lstrlenA,'lstrlenA',\
|
||||
lstrlenW,'lstrlenW'
|
||||
|
||||
api AddAtom,\
|
||||
AddConsoleAlias,\
|
||||
BeginUpdateResource,\
|
||||
BuildCommDCB,\
|
||||
BuildCommDCBAndTimeouts,\
|
||||
CallNamedPipe,\
|
||||
CommConfigDialog,\
|
||||
CompareString,\
|
||||
CopyFile,\
|
||||
CopyFileEx,\
|
||||
CreateDirectory,\
|
||||
CreateDirectoryEx,\
|
||||
CreateEvent,\
|
||||
CreateFile,\
|
||||
CreateFileMapping,\
|
||||
CreateHardLink,\
|
||||
CreateJobObject,\
|
||||
CreateMailslot,\
|
||||
CreateMutex,\
|
||||
CreateNamedPipe,\
|
||||
CreateProcess,\
|
||||
CreateSemaphore,\
|
||||
CreateWaitableTimer,\
|
||||
DefineDosDevice,\
|
||||
DeleteFile,\
|
||||
EndUpdateResource,\
|
||||
EnumCalendarInfo,\
|
||||
EnumCalendarInfoEx,\
|
||||
EnumDateFormats,\
|
||||
EnumDateFormatsEx,\
|
||||
EnumResourceLanguages,\
|
||||
EnumResourceNames,\
|
||||
EnumResourceTypes,\
|
||||
EnumSystemCodePages,\
|
||||
EnumSystemLocales,\
|
||||
EnumTimeFormats,\
|
||||
ExpandEnvironmentStrings,\
|
||||
ExpungeConsoleCommandHistory,\
|
||||
FatalAppExit,\
|
||||
FillConsoleOutputCharacter,\
|
||||
FindAtom,\
|
||||
FindFirstChangeNotification,\
|
||||
FindFirstFile,\
|
||||
FindFirstFileEx,\
|
||||
FindNextFile,\
|
||||
FindResource,\
|
||||
FindResourceEx,\
|
||||
FoldString,\
|
||||
FormatMessage,\
|
||||
FreeEnvironmentStrings,\
|
||||
GetAtomName,\
|
||||
GetBinaryType,\
|
||||
GetCPInfoEx,\
|
||||
GetCommandLine,\
|
||||
GetCompressedFileSize,\
|
||||
GetComputerName,\
|
||||
GetConsoleAlias,\
|
||||
GetConsoleAliasExes,\
|
||||
GetConsoleAliasExesLength,\
|
||||
GetConsoleAliases,\
|
||||
GetConsoleAliasesLength,\
|
||||
GetConsoleCommandHistory,\
|
||||
GetConsoleCommandHistoryLength,\
|
||||
GetConsoleInputExeName,\
|
||||
GetConsoleKeyboardLayoutName,\
|
||||
GetConsoleTitle,\
|
||||
GetCurrencyFormat,\
|
||||
GetCurrentDirectory,\
|
||||
GetDateFormat,\
|
||||
GetDefaultCommConfig,\
|
||||
GetDiskFreeSpace,\
|
||||
GetDiskFreeSpaceEx,\
|
||||
GetDriveType,\
|
||||
GetEnvironmentStrings,\
|
||||
GetEnvironmentVariable,\
|
||||
GetFileAttributes,\
|
||||
GetFileAttributesEx,\
|
||||
GetFullPathName,\
|
||||
GetLocaleInfo,\
|
||||
GetLogicalDriveStrings,\
|
||||
GetLongPathName,\
|
||||
GetModuleFileName,\
|
||||
GetModuleHandle,\
|
||||
GetNamedPipeHandleState,\
|
||||
GetNumberFormat,\
|
||||
GetPrivateProfileInt,\
|
||||
GetPrivateProfileSection,\
|
||||
GetPrivateProfileSectionNames,\
|
||||
GetPrivateProfileString,\
|
||||
GetPrivateProfileStruct,\
|
||||
GetProfileInt,\
|
||||
GetProfileSection,\
|
||||
GetProfileString,\
|
||||
GetShortPathName,\
|
||||
GetStartupInfo,\
|
||||
GetStringType,\
|
||||
GetStringTypeEx,\
|
||||
GetSystemDirectory,\
|
||||
GetTempFileName,\
|
||||
GetTempPath,\
|
||||
GetTimeFormat,\
|
||||
GetVersionEx,\
|
||||
GetVolumeInformation,\
|
||||
GetWindowsDirectory,\
|
||||
GlobalAddAtom,\
|
||||
GlobalFindAtom,\
|
||||
GlobalGetAtomName,\
|
||||
IsBadStringPtr,\
|
||||
LCMapString,\
|
||||
LoadLibrary,\
|
||||
LoadLibraryEx,\
|
||||
MoveFile,\
|
||||
MoveFileEx,\
|
||||
MoveFileWithProgress,\
|
||||
OpenEvent,\
|
||||
OpenFileMapping,\
|
||||
OpenJobObject,\
|
||||
OpenMutex,\
|
||||
OpenSemaphore,\
|
||||
OpenWaitableTimer,\
|
||||
OutputDebugString,\
|
||||
PeekConsoleInput,\
|
||||
QueryDosDevice,\
|
||||
ReadConsole,\
|
||||
ReadConsoleInput,\
|
||||
ReadConsoleInputEx,\
|
||||
ReadConsoleOutput,\
|
||||
ReadConsoleOutputCharacter,\
|
||||
RemoveDirectory,\
|
||||
ScrollConsoleScreenBuffer,\
|
||||
SearchPath,\
|
||||
SetComputerName,\
|
||||
SetConsoleInputExeName,\
|
||||
SetConsoleNumberOfCommands,\
|
||||
SetConsoleTitle,\
|
||||
SetCurrentDirectory,\
|
||||
SetDefaultCommConfig,\
|
||||
SetEnvironmentVariable,\
|
||||
SetFileAttributes,\
|
||||
SetLocaleInfo,\
|
||||
SetVolumeLabel,\
|
||||
UpdateResource,\
|
||||
VerLanguageName,\
|
||||
WaitNamedPipe,\
|
||||
WriteConsole,\
|
||||
WriteConsoleInput,\
|
||||
WriteConsoleInputVDM,\
|
||||
WriteConsoleOutput,\
|
||||
WriteConsoleOutputCharacter,\
|
||||
WritePrivateProfileSection,\
|
||||
WritePrivateProfileString,\
|
||||
WritePrivateProfileStruct,\
|
||||
WriteProfileSection,\
|
||||
WriteProfileString,\
|
||||
lstrcat,\
|
||||
lstrcmp,\
|
||||
lstrcmpi,\
|
||||
lstrcpy,\
|
||||
lstrcpyn,\
|
||||
lstrlen
|
167
toolchain/fasm2/include/api/shell32.inc
Normal file
167
toolchain/fasm2/include/api/shell32.inc
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
; SHELL32 API calls
|
||||
|
||||
import shell32,\
|
||||
CheckEscapesA,'CheckEscapesA',\
|
||||
CheckEscapesW,'CheckEscapesW',\
|
||||
DoEnvironmentSubstA,'DoEnvironmentSubstA',\
|
||||
DoEnvironmentSubstW,'DoEnvironmentSubstW',\
|
||||
DragAcceptFiles,'DragAcceptFiles',\
|
||||
DragFinish,'DragFinish',\
|
||||
DragQueryFileA,'DragQueryFileA',\
|
||||
DragQueryFileW,'DragQueryFileW',\
|
||||
DragQueryPoint,'DragQueryPoint',\
|
||||
DuplicateIcon,'DuplicateIcon',\
|
||||
ExtractAssociatedIconA,'ExtractAssociatedIconA',\
|
||||
ExtractAssociatedIconW,'ExtractAssociatedIconW',\
|
||||
ExtractAssociatedIconExA,'ExtractAssociatedIconExA',\
|
||||
ExtractAssociatedIconExW,'ExtractAssociatedIconExW',\
|
||||
ExtractIconA,'ExtractIconA',\
|
||||
ExtractIconW,'ExtractIconW',\
|
||||
ExtractIconExA,'ExtractIconExA',\
|
||||
ExtractIconExW,'ExtractIconExW',\
|
||||
ExtractIconResInfoA,'ExtractIconResInfoA',\
|
||||
ExtractIconResInfoW,'ExtractIconResInfoW',\
|
||||
FindExeDlgProc,'FindExeDlgProc',\
|
||||
FindExecutableA,'FindExecutableA',\
|
||||
FindExecutableW,'FindExecutableW',\
|
||||
FreeIconList,'FreeIconList',\
|
||||
InternalExtractIconListA,'InternalExtractIconListA',\
|
||||
InternalExtractIconListW,'InternalExtractIconListW',\
|
||||
RealShellExecuteA,'RealShellExecuteA',\
|
||||
RealShellExecuteW,'RealShellExecuteW',\
|
||||
RealShellExecuteExA,'RealShellExecuteExA',\
|
||||
RealShellExecuteExW,'RealShellExecuteExW',\
|
||||
RegenerateUserEnvironment,'RegenerateUserEnvironment',\
|
||||
SHAddToRecentDocs,'SHAddToRecentDocs',\
|
||||
SHAppBarMessage,'SHAppBarMessage',\
|
||||
SHBrowseForFolderA,'SHBrowseForFolderA',\
|
||||
SHBrowseForFolderW,'SHBrowseForFolderW',\
|
||||
SHChangeNotify,'SHChangeNotify',\
|
||||
SHEmptyRecycleBinA,'SHEmptyRecycleBinA',\
|
||||
SHEmptyRecycleBinW,'SHEmptyRecycleBinW',\
|
||||
SHFileOperationA,'SHFileOperationA',\
|
||||
SHFileOperationW,'SHFileOperationW',\
|
||||
SHFormatDrive,'SHFormatDrive',\
|
||||
SHFreeNameMappings,'SHFreeNameMappings',\
|
||||
SHGetDataFromIDListA,'SHGetDataFromIDListA',\
|
||||
SHGetDataFromIDListW,'SHGetDataFromIDListW',\
|
||||
SHGetDesktopFolder,'SHGetDesktopFolder',\
|
||||
SHGetDiskFreeSpaceA,'SHGetDiskFreeSpaceA',\
|
||||
SHGetDiskFreeSpaceW,'SHGetDiskFreeSpaceW',\
|
||||
SHGetFileInfoA,'SHGetFileInfoA',\
|
||||
SHGetFileInfoW,'SHGetFileInfoW',\
|
||||
SHGetInstanceExplorer,'SHGetInstanceExplorer',\
|
||||
SHGetMalloc,'SHGetMalloc',\
|
||||
SHGetNewLinkInfo,'SHGetNewLinkInfo',\
|
||||
SHGetPathFromIDListA,'SHGetPathFromIDListA',\
|
||||
SHGetPathFromIDListW,'SHGetPathFromIDListW',\
|
||||
SHGetSettings,'SHGetSettings',\
|
||||
SHGetSpecialFolderLocation,'SHGetSpecialFolderLocation',\
|
||||
SHGetSpecialFolderPathA,'SHGetSpecialFolderPathA',\
|
||||
SHGetSpecialFolderPathW,'SHGetSpecialFolderPathW',\
|
||||
SHInvokePrinterCommandA,'SHInvokePrinterCommandA',\
|
||||
SHInvokePrinterCommandW,'SHInvokePrinterCommandW',\
|
||||
SHLoadInProc,'SHLoadInProc',\
|
||||
SHQueryRecycleBinA,'SHQueryRecycleBinA',\
|
||||
SHQueryRecycleBinW,'SHQueryRecycleBinW',\
|
||||
SHUpdateRecycleBinIcon,'SHUpdateRecycleBinIcon',\
|
||||
SheChangeDirA,'SheChangeDirA',\
|
||||
SheChangeDirW,'SheChangeDirW',\
|
||||
SheChangeDirExA,'SheChangeDirExA',\
|
||||
SheChangeDirExW,'SheChangeDirExW',\
|
||||
SheFullPathA,'SheFullPathA',\
|
||||
SheFullPathW,'SheFullPathW',\
|
||||
SheGetCurDrive,'SheGetCurDrive',\
|
||||
SheGetDirA,'SheGetDirA',\
|
||||
SheGetDirW,'SheGetDirW',\
|
||||
SheRemoveQuotesA,'SheRemoveQuotesA',\
|
||||
SheRemoveQuotesW,'SheRemoveQuotesW',\
|
||||
SheSetCurDrive,'SheSetCurDrive',\
|
||||
SheShortenPathA,'SheShortenPathA',\
|
||||
SheShortenPathW,'SheShortenPathW',\
|
||||
ShellAboutA,'ShellAboutA',\
|
||||
ShellAboutW,'ShellAboutW',\
|
||||
ShellExecuteA,'ShellExecuteA',\
|
||||
ShellExecuteW,'ShellExecuteW',\
|
||||
ShellExecuteExA,'ShellExecuteExA',\
|
||||
ShellExecuteExW,'ShellExecuteExW',\
|
||||
ShellHookProc,'ShellHookProc',\
|
||||
Shell_NotifyIconA,'Shell_NotifyIconA',\
|
||||
Shell_NotifyIconW,'Shell_NotifyIconW',\
|
||||
StrChrA,'StrChrA',\
|
||||
StrChrW,'StrChrW',\
|
||||
StrChrIA,'StrChrIA',\
|
||||
StrChrIW,'StrChrIW',\
|
||||
StrCmpNA,'StrCmpNA',\
|
||||
StrCmpNW,'StrCmpNW',\
|
||||
StrCmpNIA,'StrCmpNIA',\
|
||||
StrCmpNIW,'StrCmpNIW',\
|
||||
StrCpyNA,'StrCpyNA',\
|
||||
StrCpyNW,'StrCpyNW',\
|
||||
StrNCmpA,'StrNCmpA',\
|
||||
StrNCmpW,'StrNCmpW',\
|
||||
StrNCmpIA,'StrNCmpIA',\
|
||||
StrNCmpIW,'StrNCmpIW',\
|
||||
StrNCpyA,'StrNCpyA',\
|
||||
StrNCpyW,'StrNCpyW',\
|
||||
StrRChrA,'StrRChrA',\
|
||||
StrRChrW,'StrRChrW',\
|
||||
StrRChrIA,'StrRChrIA',\
|
||||
StrRChrIW,'StrRChrIW',\
|
||||
StrRStrA,'StrRStrA',\
|
||||
StrRStrW,'StrRStrW',\
|
||||
StrRStrIA,'StrRStrIA',\
|
||||
StrRStrIW,'StrRStrIW',\
|
||||
StrStrA,'StrStrA',\
|
||||
StrStrW,'StrStrW',\
|
||||
StrStrIA,'StrStrIA',\
|
||||
StrStrIW,'StrStrIW',\
|
||||
WOWShellExecute,'WOWShellExecute'
|
||||
|
||||
api CheckEscapes,\
|
||||
DoEnvironmentSubst,\
|
||||
DragQueryFile,\
|
||||
ExtractAssociatedIcon,\
|
||||
ExtractAssociatedIconEx,\
|
||||
ExtractIcon,\
|
||||
ExtractIconEx,\
|
||||
ExtractIconResInfo,\
|
||||
FindExecutable,\
|
||||
InternalExtractIconList,\
|
||||
RealShellExecute,\
|
||||
RealShellExecuteEx,\
|
||||
SHBrowseForFolder,\
|
||||
SHEmptyRecycleBin,\
|
||||
SHFileOperation,\
|
||||
SHGetDataFromIDList,\
|
||||
SHGetDiskFreeSpace,\
|
||||
SHGetFileInfo,\
|
||||
SHGetPathFromIDList,\
|
||||
SHGetSpecialFolderPath,\
|
||||
SHInvokePrinterCommand,\
|
||||
SHQueryRecycleBin,\
|
||||
SheChangeDir,\
|
||||
SheChangeDirEx,\
|
||||
SheFullPath,\
|
||||
SheGetDir,\
|
||||
SheRemoveQuotes,\
|
||||
SheShortenPath,\
|
||||
ShellAbout,\
|
||||
ShellExecute,\
|
||||
ShellExecuteEx,\
|
||||
Shell_NotifyIcon,\
|
||||
StrChr,\
|
||||
StrChrI,\
|
||||
StrCmpN,\
|
||||
StrCmpNI,\
|
||||
StrCpyN,\
|
||||
StrNCmp,\
|
||||
StrNCmpI,\
|
||||
StrNCpy,\
|
||||
StrRChr,\
|
||||
StrRChrI,\
|
||||
StrRStr,\
|
||||
StrRStrI,\
|
||||
StrStr,\
|
||||
StrStrI
|
756
toolchain/fasm2/include/api/user32.inc
Normal file
756
toolchain/fasm2/include/api/user32.inc
Normal file
@ -0,0 +1,756 @@
|
||||
|
||||
; USER32 API calls
|
||||
|
||||
import user32,\
|
||||
ActivateKeyboardLayout,'ActivateKeyboardLayout',\
|
||||
AdjustWindowRect,'AdjustWindowRect',\
|
||||
AdjustWindowRectEx,'AdjustWindowRectEx',\
|
||||
AnimateWindow,'AnimateWindow',\
|
||||
AnyPopup,'AnyPopup',\
|
||||
AppendMenuA,'AppendMenuA',\
|
||||
AppendMenuW,'AppendMenuW',\
|
||||
ArrangeIconicWindows,'ArrangeIconicWindows',\
|
||||
AttachThreadInput,'AttachThreadInput',\
|
||||
BeginDeferWindowPos,'BeginDeferWindowPos',\
|
||||
BeginPaint,'BeginPaint',\
|
||||
BlockInput,'BlockInput',\
|
||||
BringWindowToTop,'BringWindowToTop',\
|
||||
BroadcastSystemMessageA,'BroadcastSystemMessageA',\
|
||||
BroadcastSystemMessageW,'BroadcastSystemMessageW',\
|
||||
CallMsgFilterA,'CallMsgFilterA',\
|
||||
CallMsgFilterW,'CallMsgFilterW',\
|
||||
CallNextHookEx,'CallNextHookEx',\
|
||||
CallWindowProcA,'CallWindowProcA',\
|
||||
CallWindowProcW,'CallWindowProcW',\
|
||||
CascadeChildWindows,'CascadeChildWindows',\
|
||||
CascadeWindows,'CascadeWindows',\
|
||||
ChangeClipboardChain,'ChangeClipboardChain',\
|
||||
ChangeDisplaySettingsA,'ChangeDisplaySettingsA',\
|
||||
ChangeDisplaySettingsW,'ChangeDisplaySettingsW',\
|
||||
ChangeDisplaySettingsExA,'ChangeDisplaySettingsExA',\
|
||||
ChangeDisplaySettingsExW,'ChangeDisplaySettingsExW',\
|
||||
ChangeMenuA,'ChangeMenuA',\
|
||||
ChangeMenuW,'ChangeMenuW',\
|
||||
CharLowerA,'CharLowerA',\
|
||||
CharLowerW,'CharLowerW',\
|
||||
CharLowerBuffA,'CharLowerBuffA',\
|
||||
CharLowerBuffW,'CharLowerBuffW',\
|
||||
CharNextA,'CharNextA',\
|
||||
CharNextW,'CharNextW',\
|
||||
CharNextExA,'CharNextExA',\
|
||||
CharNextExW,'CharNextExW',\
|
||||
CharPrevA,'CharPrevA',\
|
||||
CharPrevW,'CharPrevW',\
|
||||
CharPrevExA,'CharPrevExA',\
|
||||
CharPrevExW,'CharPrevExW',\
|
||||
CharToOemA,'CharToOemA',\
|
||||
CharToOemW,'CharToOemW',\
|
||||
CharToOemBuffA,'CharToOemBuffA',\
|
||||
CharToOemBuffW,'CharToOemBuffW',\
|
||||
CharUpperA,'CharUpperA',\
|
||||
CharUpperW,'CharUpperW',\
|
||||
CharUpperBuffA,'CharUpperBuffA',\
|
||||
CharUpperBuffW,'CharUpperBuffW',\
|
||||
CheckDlgButton,'CheckDlgButton',\
|
||||
CheckMenuItem,'CheckMenuItem',\
|
||||
CheckMenuRadioItem,'CheckMenuRadioItem',\
|
||||
CheckRadioButton,'CheckRadioButton',\
|
||||
ChildWindowFromPoint,'ChildWindowFromPoint',\
|
||||
ChildWindowFromPointEx,'ChildWindowFromPointEx',\
|
||||
ClientToScreen,'ClientToScreen',\
|
||||
ClipCursor,'ClipCursor',\
|
||||
CloseClipboard,'CloseClipboard',\
|
||||
CloseDesktop,'CloseDesktop',\
|
||||
CloseWindow,'CloseWindow',\
|
||||
CloseWindowStation,'CloseWindowStation',\
|
||||
CopyAcceleratorTableA,'CopyAcceleratorTableA',\
|
||||
CopyAcceleratorTableW,'CopyAcceleratorTableW',\
|
||||
CopyIcon,'CopyIcon',\
|
||||
CopyImage,'CopyImage',\
|
||||
CopyRect,'CopyRect',\
|
||||
CountClipboardFormats,'CountClipboardFormats',\
|
||||
CreateAcceleratorTableA,'CreateAcceleratorTableA',\
|
||||
CreateAcceleratorTableW,'CreateAcceleratorTableW',\
|
||||
CreateCaret,'CreateCaret',\
|
||||
CreateCursor,'CreateCursor',\
|
||||
CreateDesktopA,'CreateDesktopA',\
|
||||
CreateDesktopW,'CreateDesktopW',\
|
||||
CreateDialogIndirectParamA,'CreateDialogIndirectParamA',\
|
||||
CreateDialogIndirectParamW,'CreateDialogIndirectParamW',\
|
||||
CreateDialogParamA,'CreateDialogParamA',\
|
||||
CreateDialogParamW,'CreateDialogParamW',\
|
||||
CreateIcon,'CreateIcon',\
|
||||
CreateIconFromResource,'CreateIconFromResource',\
|
||||
CreateIconFromResourceEx,'CreateIconFromResourceEx',\
|
||||
CreateIconIndirect,'CreateIconIndirect',\
|
||||
CreateMDIWindowA,'CreateMDIWindowA',\
|
||||
CreateMDIWindowW,'CreateMDIWindowW',\
|
||||
CreateMenu,'CreateMenu',\
|
||||
CreatePopupMenu,'CreatePopupMenu',\
|
||||
CreateWindowExA,'CreateWindowExA',\
|
||||
CreateWindowExW,'CreateWindowExW',\
|
||||
CreateWindowStationA,'CreateWindowStationA',\
|
||||
CreateWindowStationW,'CreateWindowStationW',\
|
||||
DdeAbandonTransaction,'DdeAbandonTransaction',\
|
||||
DdeAccessData,'DdeAccessData',\
|
||||
DdeAddData,'DdeAddData',\
|
||||
DdeClientTransaction,'DdeClientTransaction',\
|
||||
DdeCmpStringHandles,'DdeCmpStringHandles',\
|
||||
DdeConnect,'DdeConnect',\
|
||||
DdeConnectList,'DdeConnectList',\
|
||||
DdeCreateDataHandle,'DdeCreateDataHandle',\
|
||||
DdeCreateStringHandleA,'DdeCreateStringHandleA',\
|
||||
DdeCreateStringHandleW,'DdeCreateStringHandleW',\
|
||||
DdeDisconnect,'DdeDisconnect',\
|
||||
DdeDisconnectList,'DdeDisconnectList',\
|
||||
DdeEnableCallback,'DdeEnableCallback',\
|
||||
DdeFreeDataHandle,'DdeFreeDataHandle',\
|
||||
DdeFreeStringHandle,'DdeFreeStringHandle',\
|
||||
DdeGetData,'DdeGetData',\
|
||||
DdeGetLastError,'DdeGetLastError',\
|
||||
DdeGetQualityOfService,'DdeGetQualityOfService',\
|
||||
DdeImpersonateClient,'DdeImpersonateClient',\
|
||||
DdeInitializeA,'DdeInitializeA',\
|
||||
DdeInitializeW,'DdeInitializeW',\
|
||||
DdeKeepStringHandle,'DdeKeepStringHandle',\
|
||||
DdeNameService,'DdeNameService',\
|
||||
DdePostAdvise,'DdePostAdvise',\
|
||||
DdeQueryConvInfo,'DdeQueryConvInfo',\
|
||||
DdeQueryNextServer,'DdeQueryNextServer',\
|
||||
DdeQueryStringA,'DdeQueryStringA',\
|
||||
DdeQueryStringW,'DdeQueryStringW',\
|
||||
DdeReconnect,'DdeReconnect',\
|
||||
DdeSetQualityOfService,'DdeSetQualityOfService',\
|
||||
DdeSetUserHandle,'DdeSetUserHandle',\
|
||||
DdeUnaccessData,'DdeUnaccessData',\
|
||||
DdeUninitialize,'DdeUninitialize',\
|
||||
DefDlgProcA,'DefDlgProcA',\
|
||||
DefDlgProcW,'DefDlgProcW',\
|
||||
DefFrameProcA,'DefFrameProcA',\
|
||||
DefFrameProcW,'DefFrameProcW',\
|
||||
DefMDIChildProcA,'DefMDIChildProcA',\
|
||||
DefMDIChildProcW,'DefMDIChildProcW',\
|
||||
DefWindowProcA,'DefWindowProcA',\
|
||||
DefWindowProcW,'DefWindowProcW',\
|
||||
DeferWindowPos,'DeferWindowPos',\
|
||||
DeleteMenu,'DeleteMenu',\
|
||||
DestroyAcceleratorTable,'DestroyAcceleratorTable',\
|
||||
DestroyCaret,'DestroyCaret',\
|
||||
DestroyCursor,'DestroyCursor',\
|
||||
DestroyIcon,'DestroyIcon',\
|
||||
DestroyMenu,'DestroyMenu',\
|
||||
DestroyWindow,'DestroyWindow',\
|
||||
DialogBoxIndirectParamA,'DialogBoxIndirectParamA',\
|
||||
DialogBoxIndirectParamW,'DialogBoxIndirectParamW',\
|
||||
DialogBoxParamA,'DialogBoxParamA',\
|
||||
DialogBoxParamW,'DialogBoxParamW',\
|
||||
DispatchMessageA,'DispatchMessageA',\
|
||||
DispatchMessageW,'DispatchMessageW',\
|
||||
DlgDirListA,'DlgDirListA',\
|
||||
DlgDirListW,'DlgDirListW',\
|
||||
DlgDirListComboBoxA,'DlgDirListComboBoxA',\
|
||||
DlgDirListComboBoxW,'DlgDirListComboBoxW',\
|
||||
DlgDirSelectComboBoxExA,'DlgDirSelectComboBoxExA',\
|
||||
DlgDirSelectComboBoxExW,'DlgDirSelectComboBoxExW',\
|
||||
DlgDirSelectExA,'DlgDirSelectExA',\
|
||||
DlgDirSelectExW,'DlgDirSelectExW',\
|
||||
DragDetect,'DragDetect',\
|
||||
DragObject,'DragObject',\
|
||||
DrawAnimatedRects,'DrawAnimatedRects',\
|
||||
DrawCaption,'DrawCaption',\
|
||||
DrawEdge,'DrawEdge',\
|
||||
DrawFocusRect,'DrawFocusRect',\
|
||||
DrawFrame,'DrawFrame',\
|
||||
DrawFrameControl,'DrawFrameControl',\
|
||||
DrawIcon,'DrawIcon',\
|
||||
DrawIconEx,'DrawIconEx',\
|
||||
DrawMenuBar,'DrawMenuBar',\
|
||||
DrawStateA,'DrawStateA',\
|
||||
DrawStateW,'DrawStateW',\
|
||||
DrawTextA,'DrawTextA',\
|
||||
DrawTextW,'DrawTextW',\
|
||||
DrawTextExA,'DrawTextExA',\
|
||||
DrawTextExW,'DrawTextExW',\
|
||||
EditWndProc,'EditWndProc',\
|
||||
EmptyClipboard,'EmptyClipboard',\
|
||||
EnableMenuItem,'EnableMenuItem',\
|
||||
EnableScrollBar,'EnableScrollBar',\
|
||||
EnableWindow,'EnableWindow',\
|
||||
EndDeferWindowPos,'EndDeferWindowPos',\
|
||||
EndDialog,'EndDialog',\
|
||||
EndMenu,'EndMenu',\
|
||||
EndPaint,'EndPaint',\
|
||||
EnumChildWindows,'EnumChildWindows',\
|
||||
EnumClipboardFormats,'EnumClipboardFormats',\
|
||||
EnumDesktopWindows,'EnumDesktopWindows',\
|
||||
EnumDesktopsA,'EnumDesktopsA',\
|
||||
EnumDesktopsW,'EnumDesktopsW',\
|
||||
EnumDisplayMonitors,'EnumDisplayMonitors',\
|
||||
EnumDisplaySettingsA,'EnumDisplaySettingsA',\
|
||||
EnumDisplaySettingsW,'EnumDisplaySettingsW',\
|
||||
EnumDisplaySettingsExA,'EnumDisplaySettingsExA',\
|
||||
EnumDisplaySettingsExW,'EnumDisplaySettingsExW',\
|
||||
EnumPropsA,'EnumPropsA',\
|
||||
EnumPropsW,'EnumPropsW',\
|
||||
EnumPropsExA,'EnumPropsExA',\
|
||||
EnumPropsExW,'EnumPropsExW',\
|
||||
EnumThreadWindows,'EnumThreadWindows',\
|
||||
EnumWindowStationsA,'EnumWindowStationsA',\
|
||||
EnumWindowStationsW,'EnumWindowStationsW',\
|
||||
EnumWindows,'EnumWindows',\
|
||||
EqualRect,'EqualRect',\
|
||||
ExcludeUpdateRgn,'ExcludeUpdateRgn',\
|
||||
ExitWindowsEx,'ExitWindowsEx',\
|
||||
FillRect,'FillRect',\
|
||||
FindWindowA,'FindWindowA',\
|
||||
FindWindowW,'FindWindowW',\
|
||||
FindWindowExA,'FindWindowExA',\
|
||||
FindWindowExW,'FindWindowExW',\
|
||||
FlashWindow,'FlashWindow',\
|
||||
FrameRect,'FrameRect',\
|
||||
FreeDDElParam,'FreeDDElParam',\
|
||||
GetActiveWindow,'GetActiveWindow',\
|
||||
GetAltTabInfoA,'GetAltTabInfoA',\
|
||||
GetAltTabInfoW,'GetAltTabInfoW',\
|
||||
GetAncestor,'GetAncestor',\
|
||||
GetAsyncKeyState,'GetAsyncKeyState',\
|
||||
GetCapture,'GetCapture',\
|
||||
GetCaretBlinkTime,'GetCaretBlinkTime',\
|
||||
GetCaretPos,'GetCaretPos',\
|
||||
GetClassInfoA,'GetClassInfoA',\
|
||||
GetClassInfoW,'GetClassInfoW',\
|
||||
GetClassInfoExA,'GetClassInfoExA',\
|
||||
GetClassInfoExW,'GetClassInfoExW',\
|
||||
GetClassLongA,'GetClassLongA',\
|
||||
GetClassLongW,'GetClassLongW',\
|
||||
GetClassNameA,'GetClassNameA',\
|
||||
GetClassNameW,'GetClassNameW',\
|
||||
GetClassWord,'GetClassWord',\
|
||||
GetClientRect,'GetClientRect',\
|
||||
GetClipCursor,'GetClipCursor',\
|
||||
GetClipboardData,'GetClipboardData',\
|
||||
GetClipboardFormatNameA,'GetClipboardFormatNameA',\
|
||||
GetClipboardFormatNameW,'GetClipboardFormatNameW',\
|
||||
GetClipboardSequenceNumberA,'GetClipboardSequenceNumberA',\
|
||||
GetClipboardSequenceNumberW,'GetClipboardSequenceNumberW',\
|
||||
GetClipboardViewer,'GetClipboardViewer',\
|
||||
GetComboBoxInfo,'GetComboBoxInfo',\
|
||||
GetCursor,'GetCursor',\
|
||||
GetCursorInfo,'GetCursorInfo',\
|
||||
GetCursorPos,'GetCursorPos',\
|
||||
GetDC,'GetDC',\
|
||||
GetDCEx,'GetDCEx',\
|
||||
GetDesktopWindow,'GetDesktopWindow',\
|
||||
GetDialogBaseUnits,'GetDialogBaseUnits',\
|
||||
GetDlgCtrlID,'GetDlgCtrlID',\
|
||||
GetDlgItem,'GetDlgItem',\
|
||||
GetDlgItemInt,'GetDlgItemInt',\
|
||||
GetDlgItemTextA,'GetDlgItemTextA',\
|
||||
GetDlgItemTextW,'GetDlgItemTextW',\
|
||||
GetDoubleClickTime,'GetDoubleClickTime',\
|
||||
GetFocus,'GetFocus',\
|
||||
GetForegroundWindow,'GetForegroundWindow',\
|
||||
GetGUIThreadInfo,'GetGUIThreadInfo',\
|
||||
GetGuiResources,'GetGuiResources',\
|
||||
GetIconInfo,'GetIconInfo',\
|
||||
GetInputDesktop,'GetInputDesktop',\
|
||||
GetInputState,'GetInputState',\
|
||||
GetKBCodePage,'GetKBCodePage',\
|
||||
GetKeyNameTextA,'GetKeyNameTextA',\
|
||||
GetKeyNameTextW,'GetKeyNameTextW',\
|
||||
GetKeyState,'GetKeyState',\
|
||||
GetKeyboardLayout,'GetKeyboardLayout',\
|
||||
GetKeyboardLayoutList,'GetKeyboardLayoutList',\
|
||||
GetKeyboardLayoutNameA,'GetKeyboardLayoutNameA',\
|
||||
GetKeyboardLayoutNameW,'GetKeyboardLayoutNameW',\
|
||||
GetKeyboardState,'GetKeyboardState',\
|
||||
GetKeyboardType,'GetKeyboardType',\
|
||||
GetLastActivePopup,'GetLastActivePopup',\
|
||||
GetLastInputInfo,'GetLastInputInfo',\
|
||||
GetLayeredWindowAttributes,'GetLayeredWindowAttributes',\
|
||||
GetListBoxInfo,'GetListBoxInfo',\
|
||||
GetMenu,'GetMenu',\
|
||||
GetMenuBarInfo,'GetMenuBarInfo',\
|
||||
GetMenuCheckMarkDimensions,'GetMenuCheckMarkDimensions',\
|
||||
GetMenuContextHelpId,'GetMenuContextHelpId',\
|
||||
GetMenuDefaultItem,'GetMenuDefaultItem',\
|
||||
GetMenuInfo,'GetMenuInfo',\
|
||||
GetMenuItemCount,'GetMenuItemCount',\
|
||||
GetMenuItemID,'GetMenuItemID',\
|
||||
GetMenuItemInfoA,'GetMenuItemInfoA',\
|
||||
GetMenuItemInfoW,'GetMenuItemInfoW',\
|
||||
GetMenuItemRect,'GetMenuItemRect',\
|
||||
GetMenuState,'GetMenuState',\
|
||||
GetMenuStringA,'GetMenuStringA',\
|
||||
GetMenuStringW,'GetMenuStringW',\
|
||||
GetMessageA,'GetMessageA',\
|
||||
GetMessageW,'GetMessageW',\
|
||||
GetMessageExtraInfo,'GetMessageExtraInfo',\
|
||||
GetMessagePos,'GetMessagePos',\
|
||||
GetMessageTime,'GetMessageTime',\
|
||||
GetMonitorInfoA,'GetMonitorInfoA',\
|
||||
GetMonitorInfoW,'GetMonitorInfoW',\
|
||||
GetMouseMovePoints,'GetMouseMovePoints',\
|
||||
GetNextDlgGroupItem,'GetNextDlgGroupItem',\
|
||||
GetNextDlgTabItem,'GetNextDlgTabItem',\
|
||||
GetOpenClipboardWindow,'GetOpenClipboardWindow',\
|
||||
GetParent,'GetParent',\
|
||||
GetPriorityClipboardFormat,'GetPriorityClipboardFormat',\
|
||||
GetProcessWindowStation,'GetProcessWindowStation',\
|
||||
GetPropA,'GetPropA',\
|
||||
GetPropW,'GetPropW',\
|
||||
GetQueueStatus,'GetQueueStatus',\
|
||||
GetScrollBarInfo,'GetScrollBarInfo',\
|
||||
GetScrollInfo,'GetScrollInfo',\
|
||||
GetScrollPos,'GetScrollPos',\
|
||||
GetScrollRange,'GetScrollRange',\
|
||||
GetShellWindow,'GetShellWindow',\
|
||||
GetSubMenu,'GetSubMenu',\
|
||||
GetSysColor,'GetSysColor',\
|
||||
GetSysColorBrush,'GetSysColorBrush',\
|
||||
GetSystemMenu,'GetSystemMenu',\
|
||||
GetSystemMetrics,'GetSystemMetrics',\
|
||||
GetTabbedTextExtentA,'GetTabbedTextExtentA',\
|
||||
GetTabbedTextExtentW,'GetTabbedTextExtentW',\
|
||||
GetThreadDesktop,'GetThreadDesktop',\
|
||||
GetTitleBarInfo,'GetTitleBarInfo',\
|
||||
GetTopWindow,'GetTopWindow',\
|
||||
GetUpdateRect,'GetUpdateRect',\
|
||||
GetUpdateRgn,'GetUpdateRgn',\
|
||||
GetUserObjectInformationA,'GetUserObjectInformationA',\
|
||||
GetUserObjectInformationW,'GetUserObjectInformationW',\
|
||||
GetUserObjectSecurity,'GetUserObjectSecurity',\
|
||||
GetWindow,'GetWindow',\
|
||||
GetWindowContextHelpId,'GetWindowContextHelpId',\
|
||||
GetWindowDC,'GetWindowDC',\
|
||||
GetWindowInfo,'GetWindowInfo',\
|
||||
GetWindowLongA,'GetWindowLongA',\
|
||||
GetWindowLongW,'GetWindowLongW',\
|
||||
GetWindowLongPtrA,'GetWindowLongPtrA',\
|
||||
GetWindowLongPtrW,'GetWindowLongPtrW',\
|
||||
GetWindowModuleFileNameA,'GetWindowModuleFileNameA',\
|
||||
GetWindowModuleFileNameW,'GetWindowModuleFileNameW',\
|
||||
GetWindowPlacement,'GetWindowPlacement',\
|
||||
GetWindowRect,'GetWindowRect',\
|
||||
GetWindowRgn,'GetWindowRgn',\
|
||||
GetWindowTextA,'GetWindowTextA',\
|
||||
GetWindowTextW,'GetWindowTextW',\
|
||||
GetWindowTextLengthA,'GetWindowTextLengthA',\
|
||||
GetWindowTextLengthW,'GetWindowTextLengthW',\
|
||||
GetWindowThreadProcessId,'GetWindowThreadProcessId',\
|
||||
GetWindowWord,'GetWindowWord',\
|
||||
GrayStringA,'GrayStringA',\
|
||||
GrayStringW,'GrayStringW',\
|
||||
HideCaret,'HideCaret',\
|
||||
HiliteMenuItem,'HiliteMenuItem',\
|
||||
IMPGetIMEA,'IMPGetIMEA',\
|
||||
IMPGetIMEW,'IMPGetIMEW',\
|
||||
IMPQueryIMEA,'IMPQueryIMEA',\
|
||||
IMPQueryIMEW,'IMPQueryIMEW',\
|
||||
IMPSetIMEA,'IMPSetIMEA',\
|
||||
IMPSetIMEW,'IMPSetIMEW',\
|
||||
ImpersonateDdeClientWindow,'ImpersonateDdeClientWindow',\
|
||||
InSendMessage,'InSendMessage',\
|
||||
InSendMessageEx,'InSendMessageEx',\
|
||||
InflateRect,'InflateRect',\
|
||||
InsertMenuA,'InsertMenuA',\
|
||||
InsertMenuW,'InsertMenuW',\
|
||||
InsertMenuItemA,'InsertMenuItemA',\
|
||||
InsertMenuItemW,'InsertMenuItemW',\
|
||||
IntersectRect,'IntersectRect',\
|
||||
InvalidateRect,'InvalidateRect',\
|
||||
InvalidateRgn,'InvalidateRgn',\
|
||||
InvertRect,'InvertRect',\
|
||||
IsCharAlphaA,'IsCharAlphaA',\
|
||||
IsCharAlphaW,'IsCharAlphaW',\
|
||||
IsCharAlphaNumericA,'IsCharAlphaNumericA',\
|
||||
IsCharAlphaNumericW,'IsCharAlphaNumericW',\
|
||||
IsCharLowerA,'IsCharLowerA',\
|
||||
IsCharLowerW,'IsCharLowerW',\
|
||||
IsCharUpperA,'IsCharUpperA',\
|
||||
IsCharUpperW,'IsCharUpperW',\
|
||||
IsChild,'IsChild',\
|
||||
IsClipboardFormatAvailable,'IsClipboardFormatAvailable',\
|
||||
IsDialogMessageA,'IsDialogMessageA',\
|
||||
IsDialogMessageW,'IsDialogMessageW',\
|
||||
IsDlgButtonChecked,'IsDlgButtonChecked',\
|
||||
IsIconic,'IsIconic',\
|
||||
IsMenu,'IsMenu',\
|
||||
IsRectEmpty,'IsRectEmpty',\
|
||||
IsWindow,'IsWindow',\
|
||||
IsWindowEnabled,'IsWindowEnabled',\
|
||||
IsWindowUnicode,'IsWindowUnicode',\
|
||||
IsWindowVisible,'IsWindowVisible',\
|
||||
IsZoomed,'IsZoomed',\
|
||||
KillSystemTimer,'KillSystemTimer',\
|
||||
KillTimer,'KillTimer',\
|
||||
LoadAcceleratorsA,'LoadAcceleratorsA',\
|
||||
LoadAcceleratorsW,'LoadAcceleratorsW',\
|
||||
LoadBitmapA,'LoadBitmapA',\
|
||||
LoadBitmapW,'LoadBitmapW',\
|
||||
LoadCursorA,'LoadCursorA',\
|
||||
LoadCursorW,'LoadCursorW',\
|
||||
LoadCursorFromFileA,'LoadCursorFromFileA',\
|
||||
LoadCursorFromFileW,'LoadCursorFromFileW',\
|
||||
LoadIconA,'LoadIconA',\
|
||||
LoadIconW,'LoadIconW',\
|
||||
LoadImageA,'LoadImageA',\
|
||||
LoadImageW,'LoadImageW',\
|
||||
LoadKeyboardLayoutA,'LoadKeyboardLayoutA',\
|
||||
LoadKeyboardLayoutW,'LoadKeyboardLayoutW',\
|
||||
LoadMenuA,'LoadMenuA',\
|
||||
LoadMenuW,'LoadMenuW',\
|
||||
LoadMenuIndirectA,'LoadMenuIndirectA',\
|
||||
LoadMenuIndirectW,'LoadMenuIndirectW',\
|
||||
LoadStringA,'LoadStringA',\
|
||||
LoadStringW,'LoadStringW',\
|
||||
LockWindowUpdate,'LockWindowUpdate',\
|
||||
LockWorkStation,'LockWorkStation',\
|
||||
LookupIconIdFromDirectory,'LookupIconIdFromDirectory',\
|
||||
LookupIconIdFromDirectoryEx,'LookupIconIdFromDirectoryEx',\
|
||||
MapDialogRect,'MapDialogRect',\
|
||||
MapVirtualKeyA,'MapVirtualKeyA',\
|
||||
MapVirtualKeyW,'MapVirtualKeyW',\
|
||||
MapVirtualKeyExA,'MapVirtualKeyExA',\
|
||||
MapVirtualKeyExW,'MapVirtualKeyExW',\
|
||||
MapWindowPoints,'MapWindowPoints',\
|
||||
MenuItemFromPoint,'MenuItemFromPoint',\
|
||||
MessageBeep,'MessageBeep',\
|
||||
MessageBoxA,'MessageBoxA',\
|
||||
MessageBoxW,'MessageBoxW',\
|
||||
MessageBoxExA,'MessageBoxExA',\
|
||||
MessageBoxExW,'MessageBoxExW',\
|
||||
MessageBoxIndirectA,'MessageBoxIndirectA',\
|
||||
MessageBoxIndirectW,'MessageBoxIndirectW',\
|
||||
ModifyMenuA,'ModifyMenuA',\
|
||||
ModifyMenuW,'ModifyMenuW',\
|
||||
MonitorFromPoint,'MonitorFromPoint',\
|
||||
MonitorFromRect,'MonitorFromRect',\
|
||||
MonitorFromWindow,'MonitorFromWindow',\
|
||||
MoveWindow,'MoveWindow',\
|
||||
MsgWaitForMultipleObjects,'MsgWaitForMultipleObjects',\
|
||||
MsgWaitForMultipleObjectsEx,'MsgWaitForMultipleObjectsEx',\
|
||||
NotifyWinEvent,'NotifyWinEvent',\
|
||||
OemKeyScan,'OemKeyScan',\
|
||||
OemToCharA,'OemToCharA',\
|
||||
OemToCharW,'OemToCharW',\
|
||||
OemToCharBuffA,'OemToCharBuffA',\
|
||||
OemToCharBuffW,'OemToCharBuffW',\
|
||||
OffsetRect,'OffsetRect',\
|
||||
OpenClipboard,'OpenClipboard',\
|
||||
OpenDesktopA,'OpenDesktopA',\
|
||||
OpenDesktopW,'OpenDesktopW',\
|
||||
OpenIcon,'OpenIcon',\
|
||||
OpenInputDesktop,'OpenInputDesktop',\
|
||||
OpenWindowStationA,'OpenWindowStationA',\
|
||||
OpenWindowStationW,'OpenWindowStationW',\
|
||||
PackDDElParam,'PackDDElParam',\
|
||||
PaintDesktop,'PaintDesktop',\
|
||||
PeekMessageA,'PeekMessageA',\
|
||||
PeekMessageW,'PeekMessageW',\
|
||||
PostMessageA,'PostMessageA',\
|
||||
PostMessageW,'PostMessageW',\
|
||||
PostQuitMessage,'PostQuitMessage',\
|
||||
PostThreadMessageA,'PostThreadMessageA',\
|
||||
PostThreadMessageW,'PostThreadMessageW',\
|
||||
PtInRect,'PtInRect',\
|
||||
RealChildWindowFromPoint,'RealChildWindowFromPoint',\
|
||||
RealGetWindowClassA,'RealGetWindowClassA',\
|
||||
RealGetWindowClassW,'RealGetWindowClassW',\
|
||||
RedrawWindow,'RedrawWindow',\
|
||||
RegisterClassA,'RegisterClassA',\
|
||||
RegisterClassW,'RegisterClassW',\
|
||||
RegisterClassExA,'RegisterClassExA',\
|
||||
RegisterClassExW,'RegisterClassExW',\
|
||||
RegisterClipboardFormatA,'RegisterClipboardFormatA',\
|
||||
RegisterClipboardFormatW,'RegisterClipboardFormatW',\
|
||||
RegisterDeviceNotificationA,'RegisterDeviceNotificationA',\
|
||||
RegisterDeviceNotificationW,'RegisterDeviceNotificationW',\
|
||||
RegisterHotKey,'RegisterHotKey',\
|
||||
RegisterWindowMessageA,'RegisterWindowMessageA',\
|
||||
RegisterWindowMessageW,'RegisterWindowMessageW',\
|
||||
ReleaseCapture,'ReleaseCapture',\
|
||||
ReleaseDC,'ReleaseDC',\
|
||||
RemoveMenu,'RemoveMenu',\
|
||||
RemovePropA,'RemovePropA',\
|
||||
RemovePropW,'RemovePropW',\
|
||||
ReplyMessage,'ReplyMessage',\
|
||||
ReuseDDElParam,'ReuseDDElParam',\
|
||||
ScreenToClient,'ScreenToClient',\
|
||||
ScrollChildren,'ScrollChildren',\
|
||||
ScrollDC,'ScrollDC',\
|
||||
ScrollWindow,'ScrollWindow',\
|
||||
ScrollWindowEx,'ScrollWindowEx',\
|
||||
SendDlgItemMessageA,'SendDlgItemMessageA',\
|
||||
SendDlgItemMessageW,'SendDlgItemMessageW',\
|
||||
SendIMEMessageExA,'SendIMEMessageExA',\
|
||||
SendIMEMessageExW,'SendIMEMessageExW',\
|
||||
SendInput,'SendInput',\
|
||||
SendMessageA,'SendMessageA',\
|
||||
SendMessageW,'SendMessageW',\
|
||||
SendMessageCallbackA,'SendMessageCallbackA',\
|
||||
SendMessageCallbackW,'SendMessageCallbackW',\
|
||||
SendMessageTimeoutA,'SendMessageTimeoutA',\
|
||||
SendMessageTimeoutW,'SendMessageTimeoutW',\
|
||||
SendNotifyMessageA,'SendNotifyMessageA',\
|
||||
SendNotifyMessageW,'SendNotifyMessageW',\
|
||||
SetActiveWindow,'SetActiveWindow',\
|
||||
SetCapture,'SetCapture',\
|
||||
SetCaretBlinkTime,'SetCaretBlinkTime',\
|
||||
SetCaretPos,'SetCaretPos',\
|
||||
SetClassLongA,'SetClassLongA',\
|
||||
SetClassLongW,'SetClassLongW',\
|
||||
SetClassWord,'SetClassWord',\
|
||||
SetClipboardData,'SetClipboardData',\
|
||||
SetClipboardViewer,'SetClipboardViewer',\
|
||||
SetCursor,'SetCursor',\
|
||||
SetCursorPos,'SetCursorPos',\
|
||||
SetDebugErrorLevel,'SetDebugErrorLevel',\
|
||||
SetDeskWallpaper,'SetDeskWallpaper',\
|
||||
SetDlgItemInt,'SetDlgItemInt',\
|
||||
SetDlgItemTextA,'SetDlgItemTextA',\
|
||||
SetDlgItemTextW,'SetDlgItemTextW',\
|
||||
SetDoubleClickTime,'SetDoubleClickTime',\
|
||||
SetFocus,'SetFocus',\
|
||||
SetForegroundWindow,'SetForegroundWindow',\
|
||||
SetKeyboardState,'SetKeyboardState',\
|
||||
SetLastErrorEx,'SetLastErrorEx',\
|
||||
SetLayeredWindowAttributes,'SetLayeredWindowAttributes',\
|
||||
SetMenu,'SetMenu',\
|
||||
SetMenuContextHelpId,'SetMenuContextHelpId',\
|
||||
SetMenuDefaultItem,'SetMenuDefaultItem',\
|
||||
SetMenuInfo,'SetMenuInfo',\
|
||||
SetMenuItemBitmaps,'SetMenuItemBitmaps',\
|
||||
SetMenuItemInfoA,'SetMenuItemInfoA',\
|
||||
SetMenuItemInfoW,'SetMenuItemInfoW',\
|
||||
SetMessageExtraInfo,'SetMessageExtraInfo',\
|
||||
SetMessageQueue,'SetMessageQueue',\
|
||||
SetParent,'SetParent',\
|
||||
SetProcessWindowStation,'SetProcessWindowStation',\
|
||||
SetPropA,'SetPropA',\
|
||||
SetPropW,'SetPropW',\
|
||||
SetRect,'SetRect',\
|
||||
SetRectEmpty,'SetRectEmpty',\
|
||||
SetScrollInfo,'SetScrollInfo',\
|
||||
SetScrollPos,'SetScrollPos',\
|
||||
SetScrollRange,'SetScrollRange',\
|
||||
SetShellWindow,'SetShellWindow',\
|
||||
SetSysColors,'SetSysColors',\
|
||||
SetSystemCursor,'SetSystemCursor',\
|
||||
SetSystemMenu,'SetSystemMenu',\
|
||||
SetSystemTimer,'SetSystemTimer',\
|
||||
SetThreadDesktop,'SetThreadDesktop',\
|
||||
SetTimer,'SetTimer',\
|
||||
SetUserObjectInformationA,'SetUserObjectInformationA',\
|
||||
SetUserObjectInformationW,'SetUserObjectInformationW',\
|
||||
SetUserObjectSecurity,'SetUserObjectSecurity',\
|
||||
SetWinEventHook,'SetWinEventHook',\
|
||||
SetWindowContextHelpId,'SetWindowContextHelpId',\
|
||||
SetWindowLongA,'SetWindowLongA',\
|
||||
SetWindowLongW,'SetWindowLongW',\
|
||||
SetWindowPlacement,'SetWindowPlacement',\
|
||||
SetWindowPos,'SetWindowPos',\
|
||||
SetWindowRgn,'SetWindowRgn',\
|
||||
SetWindowTextA,'SetWindowTextA',\
|
||||
SetWindowTextW,'SetWindowTextW',\
|
||||
SetWindowWord,'SetWindowWord',\
|
||||
SetWindowsHookA,'SetWindowsHookA',\
|
||||
SetWindowsHookW,'SetWindowsHookW',\
|
||||
SetWindowsHookExA,'SetWindowsHookExA',\
|
||||
SetWindowsHookExW,'SetWindowsHookExW',\
|
||||
ShowCaret,'ShowCaret',\
|
||||
ShowCursor,'ShowCursor',\
|
||||
ShowOwnedPopups,'ShowOwnedPopups',\
|
||||
ShowScrollBar,'ShowScrollBar',\
|
||||
ShowWindow,'ShowWindow',\
|
||||
ShowWindowAsync,'ShowWindowAsync',\
|
||||
SubtractRect,'SubtractRect',\
|
||||
SwapMouseButton,'SwapMouseButton',\
|
||||
SwitchDesktop,'SwitchDesktop',\
|
||||
SystemParametersInfoA,'SystemParametersInfoA',\
|
||||
SystemParametersInfoW,'SystemParametersInfoW',\
|
||||
TabbedTextOutA,'TabbedTextOutA',\
|
||||
TabbedTextOutW,'TabbedTextOutW',\
|
||||
TileChildWindows,'TileChildWindows',\
|
||||
TileWindows,'TileWindows',\
|
||||
ToAscii,'ToAscii',\
|
||||
ToAsciiEx,'ToAsciiEx',\
|
||||
ToUnicode,'ToUnicode',\
|
||||
ToUnicodeEx,'ToUnicodeEx',\
|
||||
TrackMouseEvent,'TrackMouseEvent',\
|
||||
TrackPopupMenu,'TrackPopupMenu',\
|
||||
TrackPopupMenuEx,'TrackPopupMenuEx',\
|
||||
TranslateAcceleratorA,'TranslateAcceleratorA',\
|
||||
TranslateAcceleratorW,'TranslateAcceleratorW',\
|
||||
TranslateMDISysAccel,'TranslateMDISysAccel',\
|
||||
TranslateMessage,'TranslateMessage',\
|
||||
UnhookWinEvent,'UnhookWinEvent',\
|
||||
UnhookWindowsHook,'UnhookWindowsHook',\
|
||||
UnhookWindowsHookEx,'UnhookWindowsHookEx',\
|
||||
UnionRect,'UnionRect',\
|
||||
UnloadKeyboardLayout,'UnloadKeyboardLayout',\
|
||||
UnpackDDElParam,'UnpackDDElParam',\
|
||||
UnregisterClassA,'UnregisterClassA',\
|
||||
UnregisterClassW,'UnregisterClassW',\
|
||||
UnregisterDeviceNotification,'UnregisterDeviceNotification',\
|
||||
UnregisterHotKey,'UnregisterHotKey',\
|
||||
UpdateWindow,'UpdateWindow',\
|
||||
UserHandleGrantAccess,'UserHandleGrantAccess',\
|
||||
ValidateRect,'ValidateRect',\
|
||||
ValidateRgn,'ValidateRgn',\
|
||||
VkKeyScanA,'VkKeyScanA',\
|
||||
VkKeyScanW,'VkKeyScanW',\
|
||||
VkKeyScanExA,'VkKeyScanExA',\
|
||||
VkKeyScanExW,'VkKeyScanExW',\
|
||||
WINNLSEnableIME,'WINNLSEnableIME',\
|
||||
WINNLSGetEnableStatus,'WINNLSGetEnableStatus',\
|
||||
WINNLSGetIMEHotkey,'WINNLSGetIMEHotkey',\
|
||||
WaitForInputIdle,'WaitForInputIdle',\
|
||||
WaitMessage,'WaitMessage',\
|
||||
WinHelpA,'WinHelpA',\
|
||||
WinHelpW,'WinHelpW',\
|
||||
WindowFromDC,'WindowFromDC',\
|
||||
WindowFromPoint,'WindowFromPoint',\
|
||||
keybd_event,'keybd_event',\
|
||||
mouse_event,'mouse_event',\
|
||||
wsprintfA,'wsprintfA',\
|
||||
wsprintfW,'wsprintfW',\
|
||||
wvsprintfA,'wvsprintfA',\
|
||||
wvsprintfW,'wvsprintfW'
|
||||
|
||||
api AppendMenu,\
|
||||
BroadcastSystemMessage,\
|
||||
CallMsgFilter,\
|
||||
CallWindowProc,\
|
||||
ChangeDisplaySettings,\
|
||||
ChangeDisplaySettingsEx,\
|
||||
ChangeMenu,\
|
||||
CharLower,\
|
||||
CharLowerBuff,\
|
||||
CharNext,\
|
||||
CharNextEx,\
|
||||
CharPrev,\
|
||||
CharPrevEx,\
|
||||
CharToOem,\
|
||||
CharToOemBuff,\
|
||||
CharUpper,\
|
||||
CharUpperBuff,\
|
||||
CopyAcceleratorTable,\
|
||||
CreateAcceleratorTable,\
|
||||
CreateDesktop,\
|
||||
CreateDialogIndirectParam,\
|
||||
CreateDialogParam,\
|
||||
CreateMDIWindow,\
|
||||
CreateWindowEx,\
|
||||
CreateWindowStation,\
|
||||
DdeCreateStringHandle,\
|
||||
DdeInitialize,\
|
||||
DdeQueryString,\
|
||||
DefDlgProc,\
|
||||
DefFrameProc,\
|
||||
DefMDIChildProc,\
|
||||
DefWindowProc,\
|
||||
DialogBoxIndirectParam,\
|
||||
DialogBoxParam,\
|
||||
DispatchMessage,\
|
||||
DlgDirList,\
|
||||
DlgDirListComboBox,\
|
||||
DlgDirSelectComboBoxEx,\
|
||||
DlgDirSelectEx,\
|
||||
DrawState,\
|
||||
DrawText,\
|
||||
DrawTextEx,\
|
||||
EnumDesktops,\
|
||||
EnumDisplaySettings,\
|
||||
EnumDisplaySettingsEx,\
|
||||
EnumProps,\
|
||||
EnumPropsEx,\
|
||||
EnumWindowStations,\
|
||||
FindWindow,\
|
||||
FindWindowEx,\
|
||||
GetAltTabInfo,\
|
||||
GetClassInfo,\
|
||||
GetClassInfoEx,\
|
||||
GetClassLong,\
|
||||
GetClassName,\
|
||||
GetClipboardFormatName,\
|
||||
GetClipboardSequenceNumber,\
|
||||
GetDlgItemText,\
|
||||
GetKeyNameText,\
|
||||
GetKeyboardLayoutName,\
|
||||
GetMenuItemInfo,\
|
||||
GetMenuString,\
|
||||
GetMessage,\
|
||||
GetMonitorInfo,\
|
||||
GetProp,\
|
||||
GetTabbedTextExtent,\
|
||||
GetUserObjectInformation,\
|
||||
GetWindowLong,\
|
||||
GetWindowModuleFileName,\
|
||||
GetWindowText,\
|
||||
GetWindowTextLength,\
|
||||
GrayString,\
|
||||
IMPGetIME,\
|
||||
IMPQueryIME,\
|
||||
IMPSetIME,\
|
||||
InsertMenu,\
|
||||
InsertMenuItem,\
|
||||
IsCharAlpha,\
|
||||
IsCharAlphaNumeric,\
|
||||
IsCharLower,\
|
||||
IsCharUpper,\
|
||||
IsDialogMessage,\
|
||||
LoadAccelerators,\
|
||||
LoadBitmap,\
|
||||
LoadCursor,\
|
||||
LoadCursorFromFile,\
|
||||
LoadIcon,\
|
||||
LoadImage,\
|
||||
LoadKeyboardLayout,\
|
||||
LoadMenu,\
|
||||
LoadMenuIndirect,\
|
||||
LoadString,\
|
||||
MapVirtualKey,\
|
||||
MapVirtualKeyEx,\
|
||||
MessageBox,\
|
||||
MessageBoxEx,\
|
||||
MessageBoxIndirect,\
|
||||
ModifyMenu,\
|
||||
OemToChar,\
|
||||
OemToCharBuff,\
|
||||
OpenDesktop,\
|
||||
OpenWindowStation,\
|
||||
PeekMessage,\
|
||||
PostMessage,\
|
||||
PostThreadMessage,\
|
||||
RealGetWindowClass,\
|
||||
RegisterClass,\
|
||||
RegisterClassEx,\
|
||||
RegisterClipboardFormat,\
|
||||
RegisterDeviceNotification,\
|
||||
RegisterWindowMessage,\
|
||||
RemoveProp,\
|
||||
SendDlgItemMessage,\
|
||||
SendIMEMessageEx,\
|
||||
SendMessage,\
|
||||
SendMessageCallback,\
|
||||
SendMessageTimeout,\
|
||||
SendNotifyMessage,\
|
||||
SetClassLong,\
|
||||
SetDlgItemText,\
|
||||
SetMenuItemInfo,\
|
||||
SetProp,\
|
||||
SetUserObjectInformation,\
|
||||
SetWindowLong,\
|
||||
SetWindowText,\
|
||||
SetWindowsHook,\
|
||||
SetWindowsHookEx,\
|
||||
SystemParametersInfo,\
|
||||
TabbedTextOut,\
|
||||
TranslateAccelerator,\
|
||||
UnregisterClass,\
|
||||
VkKeyScan,\
|
||||
VkKeyScanEx,\
|
||||
WinHelp,\
|
||||
wsprintf,\
|
||||
wvsprintf
|
85
toolchain/fasm2/include/api/wsock32.inc
Normal file
85
toolchain/fasm2/include/api/wsock32.inc
Normal file
@ -0,0 +1,85 @@
|
||||
|
||||
; WSOCK32 API calls
|
||||
|
||||
import wsock32,\
|
||||
AcceptEx,'AcceptEx',\
|
||||
EnumProtocolsA,'EnumProtocolsA',\
|
||||
EnumProtocolsW,'EnumProtocolsW',\
|
||||
GetAcceptExSockaddrs,'GetAcceptExSockaddrs',\
|
||||
GetAddressByNameA,'GetAddressByNameA',\
|
||||
GetAddressByNameW,'GetAddressByNameW',\
|
||||
GetNameByTypeA,'GetNameByTypeA',\
|
||||
GetNameByTypeW,'GetNameByTypeW',\
|
||||
GetServiceA,'GetServiceA',\
|
||||
GetServiceW,'GetServiceW',\
|
||||
GetTypeByNameA,'GetTypeByNameA',\
|
||||
GetTypeByNameW,'GetTypeByNameW',\
|
||||
MigrateWinsockConfiguration,'MigrateWinsockConfiguration',\
|
||||
NPLoadNameSpaces,'NPLoadNameSpaces',\
|
||||
SetServiceA,'SetServiceA',\
|
||||
SetServiceW,'SetServiceW',\
|
||||
TransmitFile,'TransmitFile',\
|
||||
WEP,'WEP',\
|
||||
WSAAsyncGetHostByAddr,'WSAAsyncGetHostByAddr',\
|
||||
WSAAsyncGetHostByName,'WSAAsyncGetHostByName',\
|
||||
WSAAsyncGetProtoByName,'WSAAsyncGetProtoByName',\
|
||||
WSAAsyncGetProtoByNumber,'WSAAsyncGetProtoByNumber',\
|
||||
WSAAsyncGetServByName,'WSAAsyncGetServByName',\
|
||||
WSAAsyncGetServByPort,'WSAAsyncGetServByPort',\
|
||||
WSAAsyncSelect,'WSAAsyncSelect',\
|
||||
WSACancelAsyncRequest,'WSACancelAsyncRequest',\
|
||||
WSACancelBlockingCall,'WSACancelBlockingCall',\
|
||||
WSACleanup,'WSACleanup',\
|
||||
WSAGetLastError,'WSAGetLastError',\
|
||||
WSAIsBlocking,'WSAIsBlocking',\
|
||||
WSARecvEx,'WSARecvEx',\
|
||||
WSASetBlockingHook,'WSASetBlockingHook',\
|
||||
WSASetLastError,'WSASetLastError',\
|
||||
WSAStartup,'WSAStartup',\
|
||||
WSAUnhookBlockingHook,'WSAUnhookBlockingHook',\
|
||||
__WSAFDIsSet,'__WSAFDIsSet',\
|
||||
accept,'accept',\
|
||||
bind,'bind',\
|
||||
closesocket,'closesocket',\
|
||||
connect,'connect',\
|
||||
dn_expand,'dn_expand',\
|
||||
gethostbyaddr,'gethostbyaddr',\
|
||||
gethostbyname,'gethostbyname',\
|
||||
gethostname,'gethostname',\
|
||||
getnetbyname,'getnetbyname',\
|
||||
getpeername,'getpeername',\
|
||||
getprotobyname,'getprotobyname',\
|
||||
getprotobynumber,'getprotobynumber',\
|
||||
getservbyname,'getservbyname',\
|
||||
getservbyport,'getservbyport',\
|
||||
getsockname,'getsockname',\
|
||||
getsockopt,'getsockopt',\
|
||||
htonl,'htonl',\
|
||||
htons,'htons',\
|
||||
inet_addr,'inet_addr',\
|
||||
inet_network,'inet_network',\
|
||||
inet_ntoa,'inet_ntoa',\
|
||||
ioctlsocket,'ioctlsocket',\
|
||||
listen,'listen',\
|
||||
ntohl,'ntohl',\
|
||||
ntohs,'ntohs',\
|
||||
rcmd,'rcmd',\
|
||||
recv,'recv',\
|
||||
recvfrom,'recvfrom',\
|
||||
rexec,'rexec',\
|
||||
rresvport,'rresvport',\
|
||||
s_perror,'s_perror',\
|
||||
select,'select',\
|
||||
send,'send',\
|
||||
sendto,'sendto',\
|
||||
sethostname,'sethostname',\
|
||||
setsockopt,'setsockopt',\
|
||||
shutdown,'shutdown',\
|
||||
socket,'socket'
|
||||
|
||||
api EnumProtocols,\
|
||||
GetAddressByName,\
|
||||
GetNameByType,\
|
||||
GetService,\
|
||||
GetTypeByName,\
|
||||
SetService
|
125
toolchain/fasm2/include/dd.inc
Normal file
125
toolchain/fasm2/include/dd.inc
Normal file
@ -0,0 +1,125 @@
|
||||
|
||||
; x86 data directives with customizable backend.
|
||||
|
||||
iterate <word>, word, qword
|
||||
|
||||
calminstruction word? value*
|
||||
emit word, value
|
||||
end calminstruction
|
||||
|
||||
macro calminstruction?.word? var*
|
||||
call word, var
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <fword,dword>, dword,word, pword,dword, tword,qword
|
||||
|
||||
calminstruction fword? value*
|
||||
emit fword, value
|
||||
end calminstruction
|
||||
|
||||
macro calminstruction?.fword? var*
|
||||
local seg, off
|
||||
match seg:off, var
|
||||
jyes far
|
||||
plain:
|
||||
call fword, var
|
||||
jump ok
|
||||
far:
|
||||
call dword, off
|
||||
call word, seg
|
||||
ok:
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
macro calminstruction?.byte? var*
|
||||
compute var, var
|
||||
check var eqtype ''
|
||||
jyes string
|
||||
emit byte, var
|
||||
jump ok
|
||||
string:
|
||||
emit lengthof var, var
|
||||
ok:
|
||||
end macro
|
||||
|
||||
define WCHAR? 2
|
||||
|
||||
calminstruction wchar? value*
|
||||
compute value, value
|
||||
check value eqtype ''
|
||||
jno plain
|
||||
local n
|
||||
compute n, lengthof value
|
||||
string:
|
||||
check n
|
||||
jno done
|
||||
emit WCHAR, value and 0FFh
|
||||
compute value, value shr 8
|
||||
compute n, n - 1
|
||||
jump string
|
||||
plain:
|
||||
emit WCHAR, value
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
macro calminstruction?.wchar? var*
|
||||
arrange var, =WCHAR var
|
||||
assemble var
|
||||
end macro
|
||||
|
||||
iterate <dw,word>, db,byte, dw,word, du,wchar, dd,dword, dp,pword, df,pword, dq,qword, dt,tword
|
||||
|
||||
calminstruction dw? definitions*&
|
||||
local value, n
|
||||
unroll:
|
||||
transform definitions
|
||||
jyes unroll
|
||||
start:
|
||||
match value=,definitions, definitions, ()
|
||||
jyes recognize
|
||||
match value, definitions
|
||||
arrange definitions,
|
||||
recognize:
|
||||
match n =dup? value, value, ()
|
||||
jyes duplicate
|
||||
match ?, value
|
||||
jyes reserve
|
||||
word value
|
||||
next:
|
||||
match , definitions
|
||||
jno start
|
||||
take , definitions
|
||||
take definitions, definitions
|
||||
jyes next
|
||||
exit
|
||||
reserve:
|
||||
emit word
|
||||
jump next
|
||||
duplicate:
|
||||
match (value), value
|
||||
check n < 0
|
||||
jyes negative
|
||||
stack:
|
||||
check n
|
||||
jno next
|
||||
take definitions, value
|
||||
arrange value, definitions
|
||||
compute n, n - 1
|
||||
jump stack
|
||||
negative:
|
||||
err 'the number of copies must be positive'
|
||||
jump next
|
||||
end calminstruction
|
||||
|
||||
calminstruction (label) dw? &definitions*&
|
||||
local cmd
|
||||
arrange cmd, =label label : word
|
||||
assemble cmd
|
||||
arrange cmd, =dw definitions
|
||||
assemble cmd
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
79
toolchain/fasm2/include/encoding/utf8.inc
Normal file
79
toolchain/fasm2/include/encoding/utf8.inc
Normal file
@ -0,0 +1,79 @@
|
||||
|
||||
; UTF-8
|
||||
|
||||
macro WCHAR arg
|
||||
local count,current,__input,char,wide
|
||||
if arg eqtype ''
|
||||
virtual at 0
|
||||
__input::
|
||||
db arg
|
||||
count = $
|
||||
end virtual
|
||||
current = 0
|
||||
while current < count
|
||||
load char byte from __input:current
|
||||
wide = char
|
||||
current = current + 1
|
||||
if char > 0C0h
|
||||
if char < 0E0h
|
||||
wide = char and 11111b
|
||||
load char byte from __input:current
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
current = current + 1
|
||||
else if char < 0F0h
|
||||
wide = char and 1111b
|
||||
load char byte from __input:current
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+1
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
current = current + 2
|
||||
else if char < 0F8h
|
||||
wide = char and 111b
|
||||
load char byte from __input:current
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+1
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+2
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
current = current + 3
|
||||
else if char < 0FCh
|
||||
wide = char and 11b
|
||||
load char byte from __input:current
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+1
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+2
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+3
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
current = current + 4
|
||||
else
|
||||
wide = char and 1
|
||||
load char byte from __input:current
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+1
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+2
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+3
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
load char byte from __input:current+4
|
||||
wide = wide shl 6 + (char and 111111b)
|
||||
current = current + 5
|
||||
end if
|
||||
end if
|
||||
if wide < 10000h
|
||||
dw wide
|
||||
else
|
||||
dw 0D7C0h + wide shr 10,0DC00h or (wide and 3FFh)
|
||||
end if
|
||||
end while
|
||||
else
|
||||
wide = arg
|
||||
if wide < 10000h
|
||||
dw wide
|
||||
else
|
||||
dw 0D7C0h + wide shr 10,0DC00h or (wide and 3FFh)
|
||||
end if
|
||||
end if
|
||||
end macro
|
37
toolchain/fasm2/include/encoding/win1250.inc
Normal file
37
toolchain/fasm2/include/encoding/win1250.inc
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
; Windows 1250
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,?,201Eh,2026h,2020h,2021h,?,2030h,160h,2039h,15Ah,164h,17Dh,179h
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,?,2122h,161h,203Ah,15Bh,165h,17Eh,17Ah
|
||||
dw 0A0h,2C7h,2D8h,141h,0A4h,104h,0A6h,0A7h,0A8h,0A9h,15Eh,0ABh,0ACh,0ADh,0AEh,17Bh
|
||||
dw 0B0h,0B1h,2DBh,142h,0B4h,0B5h,0B6h,0B7h,0B8h,105h,15Fh,0BBh,13Dh,2DDh,13Eh,17Ch
|
||||
dw 154h,0C1h,0C2h,102h,0C4h,139h,106h,0C7h,10Ch,0C9h,118h,0CBh,11Ah,0CDh,0CEh,10Eh
|
||||
dw 110h,143h,147h,0D3h,0D4h,150h,0D6h,0D7h,158h,16Eh,0DAh,170h,0DCh,0DDh,162h,0DFh
|
||||
dw 155h,0E1h,0E2h,103h,0E4h,13Ah,107h,0E7h,10Dh,0E9h,119h,0EBh,11Bh,0EDh,0EEh,10Fh
|
||||
dw 111h,144h,148h,0F3h,0F4h,151h,0F6h,0F7h,159h,16Fh,0FAh,171h,0FCh,0FDh,163h,2D9h
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
36
toolchain/fasm2/include/encoding/win1251.inc
Normal file
36
toolchain/fasm2/include/encoding/win1251.inc
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
; Windows 1251
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 401h,403h,201Ah,453h,201Eh,2026h,2020h,2021h,20ACh,2030h,409h,2039h,40Ah,40Ch,40Bh,40Fh
|
||||
dw 452h,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,?,2122h,459h,203Ah,45Ah,45Ch,45Bh,45Fh
|
||||
dw 0A0h,40Eh,45Eh,408h,0A4h,490h,0A6h,0A7h,401h,0A9h,404h,0ABh,0ACh,0ADh,0AEh,407h
|
||||
dw 0B0h,0B1h,406h,456h,491h,0B5h,0B6h,0B7h,451h,2116h,454h,0BBh,458h,405h,455h,457h
|
||||
repeat 40h
|
||||
dw 410h+%-1
|
||||
end repeat
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
34
toolchain/fasm2/include/encoding/win1252.inc
Normal file
34
toolchain/fasm2/include/encoding/win1252.inc
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
; Windows 1252
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,192h,201Eh,2026h,2020h,2021h,2C6h,2030h,160h,2039h,152h,?,17D,?
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,2DCh,2122h,161h,203Ah,153h,?,17Eh,178h
|
||||
repeat 60h
|
||||
dw 0A0h+%-1
|
||||
end repeat
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
36
toolchain/fasm2/include/encoding/win1253.inc
Normal file
36
toolchain/fasm2/include/encoding/win1253.inc
Normal file
@ -0,0 +1,36 @@
|
||||
|
||||
; Windows 1253
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,192h,201Eh,2026h,2020h,2021h,?,2030h,?,2039h,?,?,?,?
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,?,2122h,?,203Ah,?,?,?,?
|
||||
dw 0A0h,385h,386h,0A3h,0A4h,0A5h,0A6h,0A7h,0A8h,0A9h,?,0ABh,0ACh,0ADh,0AEh,2015h
|
||||
dw 0B0h,0B1h,0B2h,0B3h,384h,0B5h,0B6h,0B7h,288h,389h,38Ah,0BBh,38Ch,0BDh,38Eh,38Fh
|
||||
repeat 40h
|
||||
dw 390h+%-1
|
||||
end repeat
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
39
toolchain/fasm2/include/encoding/win1254.inc
Normal file
39
toolchain/fasm2/include/encoding/win1254.inc
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
; Windows 1254
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,192h,201Eh,2026h,2020h,2021h,2C6h,2030h,160h,2039h,152h,?,?,?
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,2DCh,2122h,161h,203Ah,153h,?,?,178h
|
||||
repeat 30h
|
||||
dw 0A0h+%-1
|
||||
end repeat
|
||||
dw 11Eh,0D1h,0D2h,0D3h,0D4h,0D5h,0D6h,0D7h,0D8h,0D9h,0DAh,0DBh,0DCh,130h,15Eh,0DFh
|
||||
repeat 10h
|
||||
dw 0E0h+%-1
|
||||
end repeat
|
||||
dw 11Fh,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h,0F8h,0F9h,0FAh,0FBh,0FCh,131h,15Fh,0FFh
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
37
toolchain/fasm2/include/encoding/win1255.inc
Normal file
37
toolchain/fasm2/include/encoding/win1255.inc
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
; Windows 1255
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,192h,201Eh,2026h,2020h,2021h,2C6h,2030h,?,2039h,?,?,?,?
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,2DCh,2122h,?,203Ah,?,?,?,?
|
||||
dw 0A0h,0A1h,0A2h,0A3h,20AAh,0A5h,0A6h,0A7h,0A8h,0A9h,0D7h,0ABh,0ACh,0ADh,0AEh,0AFh
|
||||
dw 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h,0B8h,0B9h,0F7h,0BBh,0BCh,0BDh,0BEh,0BFh
|
||||
dw 5B0h,5B1h,5B2h,5B3h,5B4h,5B5h,5B6h,5B7h,5B8h,5B9h,?,5BBh,5BCh,5BDh,5BEh,5BFh
|
||||
dw 5C0h,5C1h,5C2h,5C3h,5F0h,5F1h,5F2h,5F3h,5F4h,?,?,?,?,?,?,?
|
||||
dw 5D0h,5D1h,5D2h,5D3h,5D4h,5D5h,5D6h,5D7h,5D8h,5D9h,5DAh,5DBh,5DCh,5DDh,5DEh,5DFh
|
||||
dw 5E0h,5E1h,5E2h,5E3h,5E4h,5E5h,5E6h,5E7h,5E8h,5E9h,5EAh,?,?,200Eh,200Fh,?
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
37
toolchain/fasm2/include/encoding/win1256.inc
Normal file
37
toolchain/fasm2/include/encoding/win1256.inc
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
; Windows 1256
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,67Eh,201Ah,192h,201Eh,2026h,2020h,2021h,2C6h,2030h,679h,2039h,152h,686h,698h,688h
|
||||
dw 6AFh,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,6A9h,2122h,691h,203Ah,153h,200Ch,200Dh,6BAh
|
||||
dw 0A0h,60Ch,0A2h,0A3h,0A4h,0A5h,0A6h,0A7h,0A8h,0A9h,6BEh,0ABh,0ACh,0ADh,0AEh,0AFh
|
||||
dw 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h,0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh
|
||||
dw 6C1h,621h,622h,623h,624h,625h,626h,627h,628h,629h,62Ah,62Bh,62Ch,62Dh,62Eh,62Fh
|
||||
dw 630h,631h,632h,633h,634h,635h,636h,0D7h,637h,638h,639h,63Ah,640h,641h,642h,643h
|
||||
dw 0E0h,644h,0E2h,645h,646h,647h,648h,0E7h,0E8h,0E9h,0EAh,0EBh,649h,64Ah,0EEh,0EFh
|
||||
dw 64Bh,64Ch,64Dh,64Eh,0F4h,64Fh,650h,0F7h,651h,0F9h,652h,0FBh,0FCh,200Eh,200Fh,6D2h
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
37
toolchain/fasm2/include/encoding/win1257.inc
Normal file
37
toolchain/fasm2/include/encoding/win1257.inc
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
; Windows 1257
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,?,201Eh,2026h,2020h,2021h,?,2030h,?,2039h,?,0A8h,2C7h,0B8h
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,?,2122h,?,203Ah,?,0AFh,2DBh,?
|
||||
dw 0A0h,?,0A2h,0A3h,0A4h,?,0A6h,0A7h,0D8h,0A9h,156h,0ABh,0ACh,0ADh,0AEh,0C6h
|
||||
dw 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h,0F8h,0B9h,157h,0BBh,0BCh,0BDh,0BEh,0E6h
|
||||
dw 104h,12Eh,100h,106h,0C4h,0C5h,118h,112h,10Ch,0C9h,179h,116h,122h,136h,12Ah,13Bh
|
||||
dw 160h,143h,145h,0D3h,14Ch,0D5h,0D6h,0D7h,172h,141h,15Ah,16Ah,0DCh,17Bh,17Dh,0DFh
|
||||
dw 105h,12Fh,101h,107h,0E4h,0E5h,119h,113h,10Dh,0E9h,17Ah,117h,123h,137h,12Bh,13Ch
|
||||
dw 161h,144h,146h,0F3h,14Dh,0F5h,0F6h,0F7h,173h,142h,15Bh,16Bh,0FCh,17Ch,17Eh,2D9h
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
37
toolchain/fasm2/include/encoding/win1258.inc
Normal file
37
toolchain/fasm2/include/encoding/win1258.inc
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
; Windows 1258
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,201Ah,192h,201Eh,2026h,2020h,2021h,2C6h,2030h,?,2039h,152h,?,?,?
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,2DCh,2122h,?,203Ah,153h,?,?,178h
|
||||
dw 0A0h,0A1h,0A2h,0A3h,0A4h,0A5h,0A6h,0A7h,0A8h,0A9h,0AAh,0ABh,0ACh,0ADh,0AEh,0AFh
|
||||
dw 0B0h,0B1h,0B2h,0B3h,0B4h,0B5h,0B6h,0B7h,0B8h,0B9h,0BAh,0BBh,0BCh,0BDh,0BEh,0BFh
|
||||
dw 0C0h,0C1h,0C2h,102h,0C4h,0C5h,0C6h,0C7h,0C8h,0C9h,0CAh,0CBh,300h,0CDh,0CEh,0CFh
|
||||
dw 110h,0D1h,309h,0D3h,0D4h,1A0h,0D6h,0D7h,0D8h,0D9h,0DAh,0DBh,0DCh,1AFh,303h,0DFh
|
||||
dw 0E0h,0E1h,0E2h,103h,0E4h,0E5h,0E6h,0E7h,0E8h,0E9h,0EAh,0EBh,301h,0EDh,0EEh,0EFh
|
||||
dw 111h,0F1h,323h,0F3h,0F4h,1A1h,0F6h,0F7h,0F8h,0F9h,0FAh,0FBh,0FCh,1B0h,20ABh,0FFh
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
34
toolchain/fasm2/include/encoding/win874.inc
Normal file
34
toolchain/fasm2/include/encoding/win874.inc
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
; Windows 874
|
||||
|
||||
macro define
|
||||
local encoding
|
||||
virtual at 0
|
||||
encoding::
|
||||
repeat 80h
|
||||
dw %-1
|
||||
end repeat
|
||||
dw 20ACh,?,?,?,?,2026h,?,?,?,?,?,?,?,?,?,?
|
||||
dw ?,2018h,2019h,201Ch,201Dh,2022h,2013h,2014h,?,?,?,?,?,?,?,?
|
||||
repeat 60h
|
||||
dw 0E00h+%-1
|
||||
end repeat
|
||||
end virtual
|
||||
macro WCHAR arg
|
||||
if arg eqtype ''
|
||||
local data,char
|
||||
data db arg
|
||||
rb ($-data)
|
||||
repeat ($-data)/2
|
||||
load char:byte from data+%%-%
|
||||
load char:word from encoding:char*2
|
||||
store char:word at data+(%%-%)*2
|
||||
end repeat
|
||||
else
|
||||
dw arg
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
define
|
||||
purge define
|
1869
toolchain/fasm2/include/equates/comctl32.inc
Normal file
1869
toolchain/fasm2/include/equates/comctl32.inc
Normal file
File diff suppressed because it is too large
Load Diff
1899
toolchain/fasm2/include/equates/comctl64.inc
Normal file
1899
toolchain/fasm2/include/equates/comctl64.inc
Normal file
File diff suppressed because it is too large
Load Diff
333
toolchain/fasm2/include/equates/comdlg32.inc
Normal file
333
toolchain/fasm2/include/equates/comdlg32.inc
Normal file
@ -0,0 +1,333 @@
|
||||
|
||||
; COMDLG32.DLL structures and constants
|
||||
|
||||
struct OPENFILENAME
|
||||
lStructSize dd ?
|
||||
hwndOwner dd ?
|
||||
hInstance dd ?
|
||||
lpstrFilter dd ?
|
||||
lpstrCustomFilter dd ?
|
||||
nMaxCustFilter dd ?
|
||||
nFilterIndex dd ?
|
||||
lpstrFile dd ?
|
||||
nMaxFile dd ?
|
||||
lpstrFileTitle dd ?
|
||||
nMaxFileTitle dd ?
|
||||
lpstrInitialDir dd ?
|
||||
lpstrTitle dd ?
|
||||
Flags dd ?
|
||||
nFileOffset dw ?
|
||||
nFileExtension dw ?
|
||||
lpstrDefExt dd ?
|
||||
lCustData dd ?
|
||||
lpfnHook dd ?
|
||||
lpTemplateName dd ?
|
||||
ends
|
||||
|
||||
struct CHOOSECOLOR
|
||||
lStructSize dd ?
|
||||
hwndOwner dd ?
|
||||
hInstance dd ?
|
||||
rgbResult dd ?
|
||||
lpCustColors dd ?
|
||||
Flags dd ?
|
||||
lCustData dd ?
|
||||
lpfnHook dd ?
|
||||
lpTemplateName dd ?
|
||||
ends
|
||||
|
||||
struct FINDREPLACE
|
||||
lStructSize dd ?
|
||||
hwndOwner dd ?
|
||||
hInstance dd ?
|
||||
Flags dd ?
|
||||
lpstrFindWhat dd ?
|
||||
lpstrReplaceWith dd ?
|
||||
wFindWhatLen dw ?
|
||||
wReplaceWithLen dw ?
|
||||
lCustData dd ?
|
||||
lpfnHook dd ?
|
||||
lpTemplateName dd ?
|
||||
ends
|
||||
|
||||
struct CHOOSEFONT
|
||||
lStructSize dd ?
|
||||
hwndOwner dd ?
|
||||
hDC dd ?
|
||||
lpLogFont dd ?
|
||||
iPointSize dd ?
|
||||
Flags dd ?
|
||||
rgbColors dd ?
|
||||
lCustData dd ?
|
||||
lpfnHook dd ?
|
||||
lpTemplateName dd ?
|
||||
hInstance dd ?
|
||||
lpszStyle dd ?
|
||||
nFontType dw ?
|
||||
wReserved dw ?
|
||||
nSizeMin dd ?
|
||||
nSizeMax dd ?
|
||||
ends
|
||||
|
||||
struct PRINTDLG
|
||||
lStructSize dd ?
|
||||
hwndOwner dd ?
|
||||
hDevMode dd ?
|
||||
hDevNames dd ?
|
||||
hDC dd ?
|
||||
Flags dd ?
|
||||
nFromPage dw ?
|
||||
nToPage dw ?
|
||||
nMinPage dw ?
|
||||
nMaxPage dw ?
|
||||
nCopies dw ?
|
||||
hInstance dd ?
|
||||
lCustData dd ?
|
||||
lpfnPrintHook dd ?
|
||||
lpfnSetupHook dd ?
|
||||
lpPrintTemplateName dd ?
|
||||
lpSetupTemplateName dd ?
|
||||
hPrintTemplate dd ?
|
||||
hSetupTemplate dd ?
|
||||
ends
|
||||
|
||||
struct DEVNAMES
|
||||
wDriverOffset dw ?
|
||||
wDeviceOffset dw ?
|
||||
wOutputOffset dw ?
|
||||
wDefault dw ?
|
||||
ends
|
||||
|
||||
struct PAGESETUPDLG
|
||||
lStructSize dd ?
|
||||
hwndOwner dd ?
|
||||
hDevMode dd ?
|
||||
hDevNames dd ?
|
||||
Flags dd ?
|
||||
ptPaperSize POINT
|
||||
rtMinMargin RECT
|
||||
rtMargin RECT
|
||||
hInstance dd ?
|
||||
lCustData dd ?
|
||||
lpfnPageSetupHook dd ?
|
||||
lpfnPagePaintHook dd ?
|
||||
lpPageSetupTemplateName dd ?
|
||||
hPageSetupTemplate dd ?
|
||||
ends
|
||||
|
||||
; OPENFILENAME flags
|
||||
|
||||
OFN_READONLY = 000001h
|
||||
OFN_OVERWRITEPROMPT = 000002h
|
||||
OFN_HIDEREADONLY = 000004h
|
||||
OFN_NOCHANGEDIR = 000008h
|
||||
OFN_SHOWHELP = 000010h
|
||||
OFN_ENABLEHOOK = 000020h
|
||||
OFN_ENABLETEMPLATE = 000040h
|
||||
OFN_ENABLETEMPLATEHANDLE = 000080h
|
||||
OFN_NOVALIDATE = 000100h
|
||||
OFN_ALLOWMULTISELECT = 000200h
|
||||
OFN_EXTENSIONDIFFERENT = 000400h
|
||||
OFN_PATHMUSTEXIST = 000800h
|
||||
OFN_FILEMUSTEXIST = 001000h
|
||||
OFN_CREATEPROMPT = 002000h
|
||||
OFN_SHAREAWARE = 004000h
|
||||
OFN_NOREADONLYRETURN = 008000h
|
||||
OFN_NOTESTFILECREATE = 010000h
|
||||
OFN_NONETWORKBUTTON = 020000h
|
||||
OFN_NOLONGNAMES = 040000h
|
||||
OFN_EXPLORER = 080000h
|
||||
OFN_NODEREFERENCELINKS = 100000h
|
||||
OFN_LONGNAMES = 200000h
|
||||
|
||||
; Common dialog notifications
|
||||
|
||||
CDN_FIRST = -601
|
||||
CDN_LAST = -699
|
||||
CDN_INITDONE = CDN_FIRST - 0
|
||||
CDN_SELCHANGE = CDN_FIRST - 1
|
||||
CDN_FOLDERCHANGE = CDN_FIRST - 2
|
||||
CDN_SHAREVIOLATION = CDN_FIRST - 3
|
||||
CDN_HELP = CDN_FIRST - 4
|
||||
CDN_FILEOK = CDN_FIRST - 5
|
||||
CDN_TYPECHANGE = CDN_FIRST - 6
|
||||
|
||||
; Common dialog messages
|
||||
|
||||
CDM_FIRST = WM_USER + 100
|
||||
CDM_LAST = WM_USER + 200
|
||||
CDM_GETSPEC = CDM_FIRST + 0
|
||||
CDM_GETFILEPATH = CDM_FIRST + 1
|
||||
CDM_GETFOLDERPATH = CDM_FIRST + 2
|
||||
CDM_GETFOLDERIDLIST = CDM_FIRST + 3
|
||||
CDM_SETCONTROLTEXT = CDM_FIRST + 4
|
||||
CDM_HIDECONTROL = CDM_FIRST + 5
|
||||
CDM_SETDEFEXT = CDM_FIRST + 6
|
||||
|
||||
; CHOOSECOLOR flags
|
||||
|
||||
CC_RGBINIT = 001h
|
||||
CC_FULLOPEN = 002h
|
||||
CC_PREVENTFULLOPEN = 004h
|
||||
CC_SHOWHELP = 008h
|
||||
CC_ENABLEHOOK = 010h
|
||||
CC_ENABLETEMPLATE = 020h
|
||||
CC_ENABLETEMPLATEHANDLE = 040h
|
||||
CC_SOLIDCOLOR = 080h
|
||||
CC_ANYCOLOR = 100h
|
||||
|
||||
; FINDREPLACE flags
|
||||
|
||||
FR_DOWN = 00001h
|
||||
FR_WHOLEWORD = 00002h
|
||||
FR_MATCHCASE = 00004h
|
||||
FR_FINDNEXT = 00008h
|
||||
FR_REPLACE = 00010h
|
||||
FR_REPLACEALL = 00020h
|
||||
FR_DIALOGTERM = 00040h
|
||||
FR_SHOWHELP = 00080h
|
||||
FR_ENABLEHOOK = 00100h
|
||||
FR_ENABLETEMPLATE = 00200h
|
||||
FR_NOUPDOWN = 00400h
|
||||
FR_NOMATCHCASE = 00800h
|
||||
FR_NOWHOLEWORD = 01000h
|
||||
FR_ENABLETEMPLATEHANDLE = 02000h
|
||||
FR_HIDEUPDOWN = 04000h
|
||||
FR_HIDEMATCHCASE = 08000h
|
||||
FR_HIDEWHOLEWORD = 10000h
|
||||
|
||||
; CHOOSEFONT flags
|
||||
|
||||
CF_SCREENFONTS = 0000001h
|
||||
CF_PRINTERFONTS = 0000002h
|
||||
CF_BOTH = CF_SCREENFONTS or CF_PRINTERFONTS
|
||||
CF_SHOWHELP = 0000004h
|
||||
CF_ENABLEHOOK = 0000008h
|
||||
CF_ENABLETEMPLATE = 0000010h
|
||||
CF_ENABLETEMPLATEHANDLE = 0000020h
|
||||
CF_INITTOLOGFONTSTRUCT = 0000040h
|
||||
CF_USESTYLE = 0000080h
|
||||
CF_EFFECTS = 0000100h
|
||||
CF_APPLY = 0000200h
|
||||
CF_ANSIONLY = 0000400h
|
||||
CF_SCRIPTSONLY = CF_ANSIONLY
|
||||
CF_NOVECTORFONTS = 0000800h
|
||||
CF_NOOEMFONTS = CF_NOVECTORFONTS
|
||||
CF_NOSIMULATIONS = 0001000h
|
||||
CF_LIMITSIZE = 0002000h
|
||||
CF_FIXEDPITCHONLY = 0004000h
|
||||
CF_WYSIWYG = 0008000h
|
||||
CF_FORCEFONTEXIST = 0010000h
|
||||
CF_SCALABLEONLY = 0020000h
|
||||
CF_TTONLY = 0040000h
|
||||
CF_NOFACESEL = 0080000h
|
||||
CF_NOSTYLESEL = 0100000h
|
||||
CF_NOSIZESEL = 0200000h
|
||||
CF_SELECTSCRIPT = 0400000h
|
||||
CF_NOSCRIPTSEL = 0800000h
|
||||
CF_NOVERTFONTS = 1000000h
|
||||
|
||||
; ChooseFont messages
|
||||
|
||||
WM_CHOOSEFONT_GETLOGFONT = WM_USER + 1
|
||||
WM_CHOOSEFONT_SETLOGFONT = WM_USER + 101
|
||||
WM_CHOOSEFONT_SETFLAGS = WM_USER + 102
|
||||
|
||||
; PRINTDLG flags
|
||||
|
||||
PD_ALLPAGES = 000000h
|
||||
PD_SELECTION = 000001h
|
||||
PD_PAGENUMS = 000002h
|
||||
PD_NOSELECTION = 000004h
|
||||
PD_NOPAGENUMS = 000008h
|
||||
PD_COLLATE = 000010h
|
||||
PD_PRINTTOFILE = 000020h
|
||||
PD_PRINTSETUP = 000040h
|
||||
PD_NOWARNING = 000080h
|
||||
PD_RETURNDC = 000100h
|
||||
PD_RETURNIC = 000200h
|
||||
PD_RETURNDEFAULT = 000400h
|
||||
PD_SHOWHELP = 000800h
|
||||
PD_ENABLEPRINTHOOK = 001000h
|
||||
PD_ENABLESETUPHOOK = 002000h
|
||||
PD_ENABLEPRINTTEMPLATE = 004000h
|
||||
PD_ENABLESETUPTEMPLATE = 008000h
|
||||
PD_ENABLEPRINTTEMPLATEHANDLE = 010000h
|
||||
PD_ENABLESETUPTEMPLATEHANDLE = 020000h
|
||||
PD_USEDEVMODECOPIES = 040000h
|
||||
PD_USEDEVMODECOPIESANDCOLLATE = 040000h
|
||||
PD_DISABLEPRINTTOFILE = 080000h
|
||||
PD_HIDEPRINTTOFILE = 100000h
|
||||
PD_NONETWORKBUTTON = 200000h
|
||||
|
||||
; PAGESETUPDLG flags
|
||||
|
||||
PSD_DEFAULTMINMARGINS = 000000h
|
||||
PSD_INWININIINTLMEASURE = 000000h
|
||||
PSD_MINMARGINS = 000001h
|
||||
PSD_MARGINS = 000002h
|
||||
PSD_INTHOUSANDTHSOFINCHES = 000004h
|
||||
PSD_INHUNDREDTHSOFMILLIMETERS = 000008h
|
||||
PSD_DISABLEMARGINS = 000010h
|
||||
PSD_DISABLEPRINTER = 000020h
|
||||
PSD_NOWARNING = 000080h
|
||||
PSD_DISABLEORIENTATION = 000100h
|
||||
PSD_RETURNDEFAULT = 000400h
|
||||
PSD_DISABLEPAPER = 000200h
|
||||
PSD_SHOWHELP = 000800h
|
||||
PSD_ENABLEPAGESETUPHOOK = 002000h
|
||||
PSD_ENABLEPAGESETUPTEMPLATE = 008000h
|
||||
PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 020000h
|
||||
PSD_ENABLEPAGEPAINTHOOK = 040000h
|
||||
PSD_DISABLEPAGEPAINTING = 080000h
|
||||
PSD_NONETWORKBUTTON = 200000h
|
||||
|
||||
; PageSetupDlg messages
|
||||
|
||||
WM_PSD_PAGESETUPDLG = WM_USER
|
||||
WM_PSD_FULLPAGERECT = WM_USER + 1
|
||||
WM_PSD_MINMARGINRECT = WM_USER + 2
|
||||
WM_PSD_MARGINRECT = WM_USER + 3
|
||||
WM_PSD_GREEKTEXTRECT = WM_USER + 4
|
||||
WM_PSD_ENVSTAMPRECT = WM_USER + 5
|
||||
WM_PSD_YAFULLPAGERECT = WM_USER + 6
|
||||
|
||||
; Common dialog error codes
|
||||
|
||||
CDERR_DIALOGFAILURE = 0FFFFh
|
||||
CDERR_GENERALCODES = 00000h
|
||||
CDERR_STRUCTSIZE = 00001h
|
||||
CDERR_INITIALIZATION = 00002h
|
||||
CDERR_NOTEMPLATE = 00003h
|
||||
CDERR_NOHINSTANCE = 00004h
|
||||
CDERR_LOADSTRFAILURE = 00005h
|
||||
CDERR_FINDRESFAILURE = 00006h
|
||||
CDERR_LOADRESFAILURE = 00007h
|
||||
CDERR_LOCKRESFAILURE = 00008h
|
||||
CDERR_MEMALLOCFAILURE = 00009h
|
||||
CDERR_MEMLOCKFAILURE = 0000Ah
|
||||
CDERR_NOHOOK = 0000Bh
|
||||
CDERR_REGISTERMSGFAIL = 0000Ch
|
||||
PDERR_PRINTERCODES = 01000h
|
||||
PDERR_SETUPFAILURE = 01001h
|
||||
PDERR_PARSEFAILURE = 01002h
|
||||
PDERR_RETDEFFAILURE = 01003h
|
||||
PDERR_LOADDRVFAILURE = 01004h
|
||||
PDERR_GETDEVMODEFAIL = 01005h
|
||||
PDERR_INITFAILURE = 01006h
|
||||
PDERR_NODEVICES = 01007h
|
||||
PDERR_NODEFAULTPRN = 01008h
|
||||
PDERR_DNDMMISMATCH = 01009h
|
||||
PDERR_CREATEICFAILURE = 0100Ah
|
||||
PDERR_PRINTERNOTFOUND = 0100Bh
|
||||
PDERR_DEFAULTDIFFERENT = 0100Ch
|
||||
CFERR_CHOOSEFONTCODES = 02000h
|
||||
CFERR_NOFONTS = 02001h
|
||||
CFERR_MAXLESSTHANMIN = 02002h
|
||||
FNERR_FILENAMECODES = 03000h
|
||||
FNERR_SUBCLASSFAILURE = 03001h
|
||||
FNERR_INVALIDFILENAME = 03002h
|
||||
FNERR_BUFFERTOOSMALL = 03003h
|
||||
FRERR_FINDREPLACECODES = 04000h
|
||||
FRERR_BUFFERLENGTHZERO = 04001h
|
||||
CCERR_CHOOSECOLORCODES = 05000h
|
343
toolchain/fasm2/include/equates/comdlg64.inc
Normal file
343
toolchain/fasm2/include/equates/comdlg64.inc
Normal file
@ -0,0 +1,343 @@
|
||||
|
||||
; COMDLG32.DLL structures and constants
|
||||
|
||||
struct OPENFILENAME
|
||||
lStructSize dq ?
|
||||
hwndOwner dq ?
|
||||
hInstance dq ?
|
||||
lpstrFilter dq ?
|
||||
lpstrCustomFilter dq ?
|
||||
nMaxCustFilter dd ?
|
||||
nFilterIndex dd ?
|
||||
lpstrFile dq ?
|
||||
nMaxFile dd ?
|
||||
dd ?
|
||||
lpstrFileTitle dq ?
|
||||
nMaxFileTitle dd ?
|
||||
dd ?
|
||||
lpstrInitialDir dq ?
|
||||
lpstrTitle dq ?
|
||||
Flags dd ?
|
||||
nFileOffset dw ?
|
||||
nFileExtension dw ?
|
||||
lpstrDefExt dq ?
|
||||
lCustData dq ?
|
||||
lpfnHook dq ?
|
||||
lpTemplateName dq ?
|
||||
ends
|
||||
|
||||
struct CHOOSECOLOR
|
||||
lStructSize dq ?
|
||||
hwndOwner dq ?
|
||||
hInstance dq ?
|
||||
rgbResult dd ?
|
||||
dd ?
|
||||
lpCustColors dq ?
|
||||
Flags dd ?
|
||||
dd ?
|
||||
lCustData dq ?
|
||||
lpfnHook dq ?
|
||||
lpTemplateName dq ?
|
||||
ends
|
||||
|
||||
struct FINDREPLACE
|
||||
lStructSize dq ?
|
||||
hwndOwner dq ?
|
||||
hInstance dq ?
|
||||
Flags dd ?
|
||||
dd ?
|
||||
lpstrFindWhat dq ?
|
||||
lpstrReplaceWith dq ?
|
||||
wFindWhatLen dw ?
|
||||
wReplaceWithLen dw ?
|
||||
dd ?
|
||||
lCustData dq ?
|
||||
lpfnHook dq ?
|
||||
lpTemplateName dq ?
|
||||
ends
|
||||
|
||||
struct CHOOSEFONT
|
||||
lStructSize dq ?
|
||||
hwndOwner dq ?
|
||||
hDC dq ?
|
||||
lpLogFont dq ?
|
||||
iPointSize dd ?
|
||||
Flags dd ?
|
||||
rgbColors dd ?
|
||||
dd ?
|
||||
lCustData dq ?
|
||||
lpfnHook dq ?
|
||||
lpTemplateName dq ?
|
||||
hInstance dq ?
|
||||
lpszStyle dq ?
|
||||
nFontType dw ?
|
||||
wReserved dw ?
|
||||
nSizeMin dd ?
|
||||
nSizeMax dd ?
|
||||
dd ?
|
||||
ends
|
||||
|
||||
struct PRINTDLG
|
||||
lStructSize dq ?
|
||||
hwndOwner dq ?
|
||||
hDevMode dq ?
|
||||
hDevNames dq ?
|
||||
hDC dq ?
|
||||
Flags dd ?
|
||||
nFromPage dw ?
|
||||
nToPage dw ?
|
||||
nMinPage dw ?
|
||||
nMaxPage dw ?
|
||||
nCopies dw ?
|
||||
dw ?
|
||||
hInstance dq ?
|
||||
lCustData dq ?
|
||||
lpfnPrintHook dq ?
|
||||
lpfnSetupHook dq ?
|
||||
lpPrintTemplateName dq ?
|
||||
lpSetupTemplateName dq ?
|
||||
hPrintTemplate dq ?
|
||||
hSetupTemplate dq ?
|
||||
ends
|
||||
|
||||
struct DEVNAMES
|
||||
wDriverOffset dw ?
|
||||
wDeviceOffset dw ?
|
||||
wOutputOffset dw ?
|
||||
wDefault dw ?
|
||||
ends
|
||||
|
||||
struct PAGESETUPDLG
|
||||
lStructSize dq ?
|
||||
hwndOwner dq ?
|
||||
hDevMode dq ?
|
||||
hDevNames dq ?
|
||||
Flags dd ?
|
||||
ptPaperSize POINT
|
||||
rtMinMargin RECT
|
||||
rtMargin RECT
|
||||
dd ?
|
||||
hInstance dq ?
|
||||
lCustData dq ?
|
||||
lpfnPageSetupHook dq ?
|
||||
lpfnPagePaintHook dq ?
|
||||
lpPageSetupTemplateName dq ?
|
||||
hPageSetupTemplate dq ?
|
||||
ends
|
||||
|
||||
; OPENFILENAME flags
|
||||
|
||||
OFN_READONLY = 000001h
|
||||
OFN_OVERWRITEPROMPT = 000002h
|
||||
OFN_HIDEREADONLY = 000004h
|
||||
OFN_NOCHANGEDIR = 000008h
|
||||
OFN_SHOWHELP = 000010h
|
||||
OFN_ENABLEHOOK = 000020h
|
||||
OFN_ENABLETEMPLATE = 000040h
|
||||
OFN_ENABLETEMPLATEHANDLE = 000080h
|
||||
OFN_NOVALIDATE = 000100h
|
||||
OFN_ALLOWMULTISELECT = 000200h
|
||||
OFN_EXTENSIONDIFFERENT = 000400h
|
||||
OFN_PATHMUSTEXIST = 000800h
|
||||
OFN_FILEMUSTEXIST = 001000h
|
||||
OFN_CREATEPROMPT = 002000h
|
||||
OFN_SHAREAWARE = 004000h
|
||||
OFN_NOREADONLYRETURN = 008000h
|
||||
OFN_NOTESTFILECREATE = 010000h
|
||||
OFN_NONETWORKBUTTON = 020000h
|
||||
OFN_NOLONGNAMES = 040000h
|
||||
OFN_EXPLORER = 080000h
|
||||
OFN_NODEREFERENCELINKS = 100000h
|
||||
OFN_LONGNAMES = 200000h
|
||||
|
||||
; Common dialog notifications
|
||||
|
||||
CDN_FIRST = -601
|
||||
CDN_LAST = -699
|
||||
CDN_INITDONE = CDN_FIRST - 0
|
||||
CDN_SELCHANGE = CDN_FIRST - 1
|
||||
CDN_FOLDERCHANGE = CDN_FIRST - 2
|
||||
CDN_SHAREVIOLATION = CDN_FIRST - 3
|
||||
CDN_HELP = CDN_FIRST - 4
|
||||
CDN_FILEOK = CDN_FIRST - 5
|
||||
CDN_TYPECHANGE = CDN_FIRST - 6
|
||||
|
||||
; Common dialog messages
|
||||
|
||||
CDM_FIRST = WM_USER + 100
|
||||
CDM_LAST = WM_USER + 200
|
||||
CDM_GETSPEC = CDM_FIRST + 0
|
||||
CDM_GETFILEPATH = CDM_FIRST + 1
|
||||
CDM_GETFOLDERPATH = CDM_FIRST + 2
|
||||
CDM_GETFOLDERIDLIST = CDM_FIRST + 3
|
||||
CDM_SETCONTROLTEXT = CDM_FIRST + 4
|
||||
CDM_HIDECONTROL = CDM_FIRST + 5
|
||||
CDM_SETDEFEXT = CDM_FIRST + 6
|
||||
|
||||
; CHOOSECOLOR flags
|
||||
|
||||
CC_RGBINIT = 001h
|
||||
CC_FULLOPEN = 002h
|
||||
CC_PREVENTFULLOPEN = 004h
|
||||
CC_SHOWHELP = 008h
|
||||
CC_ENABLEHOOK = 010h
|
||||
CC_ENABLETEMPLATE = 020h
|
||||
CC_ENABLETEMPLATEHANDLE = 040h
|
||||
CC_SOLIDCOLOR = 080h
|
||||
CC_ANYCOLOR = 100h
|
||||
|
||||
; FINDREPLACE flags
|
||||
|
||||
FR_DOWN = 00001h
|
||||
FR_WHOLEWORD = 00002h
|
||||
FR_MATCHCASE = 00004h
|
||||
FR_FINDNEXT = 00008h
|
||||
FR_REPLACE = 00010h
|
||||
FR_REPLACEALL = 00020h
|
||||
FR_DIALOGTERM = 00040h
|
||||
FR_SHOWHELP = 00080h
|
||||
FR_ENABLEHOOK = 00100h
|
||||
FR_ENABLETEMPLATE = 00200h
|
||||
FR_NOUPDOWN = 00400h
|
||||
FR_NOMATCHCASE = 00800h
|
||||
FR_NOWHOLEWORD = 01000h
|
||||
FR_ENABLETEMPLATEHANDLE = 02000h
|
||||
FR_HIDEUPDOWN = 04000h
|
||||
FR_HIDEMATCHCASE = 08000h
|
||||
FR_HIDEWHOLEWORD = 10000h
|
||||
|
||||
; CHOOSEFONT flags
|
||||
|
||||
CF_SCREENFONTS = 0000001h
|
||||
CF_PRINTERFONTS = 0000002h
|
||||
CF_BOTH = CF_SCREENFONTS or CF_PRINTERFONTS
|
||||
CF_SHOWHELP = 0000004h
|
||||
CF_ENABLEHOOK = 0000008h
|
||||
CF_ENABLETEMPLATE = 0000010h
|
||||
CF_ENABLETEMPLATEHANDLE = 0000020h
|
||||
CF_INITTOLOGFONTSTRUCT = 0000040h
|
||||
CF_USESTYLE = 0000080h
|
||||
CF_EFFECTS = 0000100h
|
||||
CF_APPLY = 0000200h
|
||||
CF_ANSIONLY = 0000400h
|
||||
CF_SCRIPTSONLY = CF_ANSIONLY
|
||||
CF_NOVECTORFONTS = 0000800h
|
||||
CF_NOOEMFONTS = CF_NOVECTORFONTS
|
||||
CF_NOSIMULATIONS = 0001000h
|
||||
CF_LIMITSIZE = 0002000h
|
||||
CF_FIXEDPITCHONLY = 0004000h
|
||||
CF_WYSIWYG = 0008000h
|
||||
CF_FORCEFONTEXIST = 0010000h
|
||||
CF_SCALABLEONLY = 0020000h
|
||||
CF_TTONLY = 0040000h
|
||||
CF_NOFACESEL = 0080000h
|
||||
CF_NOSTYLESEL = 0100000h
|
||||
CF_NOSIZESEL = 0200000h
|
||||
CF_SELECTSCRIPT = 0400000h
|
||||
CF_NOSCRIPTSEL = 0800000h
|
||||
CF_NOVERTFONTS = 1000000h
|
||||
|
||||
; ChooseFont messages
|
||||
|
||||
WM_CHOOSEFONT_GETLOGFONT = WM_USER + 1
|
||||
WM_CHOOSEFONT_SETLOGFONT = WM_USER + 101
|
||||
WM_CHOOSEFONT_SETFLAGS = WM_USER + 102
|
||||
|
||||
; PRINTDLG flags
|
||||
|
||||
PD_ALLPAGES = 000000h
|
||||
PD_SELECTION = 000001h
|
||||
PD_PAGENUMS = 000002h
|
||||
PD_NOSELECTION = 000004h
|
||||
PD_NOPAGENUMS = 000008h
|
||||
PD_COLLATE = 000010h
|
||||
PD_PRINTTOFILE = 000020h
|
||||
PD_PRINTSETUP = 000040h
|
||||
PD_NOWARNING = 000080h
|
||||
PD_RETURNDC = 000100h
|
||||
PD_RETURNIC = 000200h
|
||||
PD_RETURNDEFAULT = 000400h
|
||||
PD_SHOWHELP = 000800h
|
||||
PD_ENABLEPRINTHOOK = 001000h
|
||||
PD_ENABLESETUPHOOK = 002000h
|
||||
PD_ENABLEPRINTTEMPLATE = 004000h
|
||||
PD_ENABLESETUPTEMPLATE = 008000h
|
||||
PD_ENABLEPRINTTEMPLATEHANDLE = 010000h
|
||||
PD_ENABLESETUPTEMPLATEHANDLE = 020000h
|
||||
PD_USEDEVMODECOPIES = 040000h
|
||||
PD_USEDEVMODECOPIESANDCOLLATE = 040000h
|
||||
PD_DISABLEPRINTTOFILE = 080000h
|
||||
PD_HIDEPRINTTOFILE = 100000h
|
||||
PD_NONETWORKBUTTON = 200000h
|
||||
|
||||
; PAGESETUPDLG flags
|
||||
|
||||
PSD_DEFAULTMINMARGINS = 000000h
|
||||
PSD_INWININIINTLMEASURE = 000000h
|
||||
PSD_MINMARGINS = 000001h
|
||||
PSD_MARGINS = 000002h
|
||||
PSD_INTHOUSANDTHSOFINCHES = 000004h
|
||||
PSD_INHUNDREDTHSOFMILLIMETERS = 000008h
|
||||
PSD_DISABLEMARGINS = 000010h
|
||||
PSD_DISABLEPRINTER = 000020h
|
||||
PSD_NOWARNING = 000080h
|
||||
PSD_DISABLEORIENTATION = 000100h
|
||||
PSD_RETURNDEFAULT = 000400h
|
||||
PSD_DISABLEPAPER = 000200h
|
||||
PSD_SHOWHELP = 000800h
|
||||
PSD_ENABLEPAGESETUPHOOK = 002000h
|
||||
PSD_ENABLEPAGESETUPTEMPLATE = 008000h
|
||||
PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 020000h
|
||||
PSD_ENABLEPAGEPAINTHOOK = 040000h
|
||||
PSD_DISABLEPAGEPAINTING = 080000h
|
||||
PSD_NONETWORKBUTTON = 200000h
|
||||
|
||||
; PageSetupDlg messages
|
||||
|
||||
WM_PSD_PAGESETUPDLG = WM_USER
|
||||
WM_PSD_FULLPAGERECT = WM_USER + 1
|
||||
WM_PSD_MINMARGINRECT = WM_USER + 2
|
||||
WM_PSD_MARGINRECT = WM_USER + 3
|
||||
WM_PSD_GREEKTEXTRECT = WM_USER + 4
|
||||
WM_PSD_ENVSTAMPRECT = WM_USER + 5
|
||||
WM_PSD_YAFULLPAGERECT = WM_USER + 6
|
||||
|
||||
; Common dialog error codes
|
||||
|
||||
CDERR_DIALOGFAILURE = 0FFFFh
|
||||
CDERR_GENERALCODES = 00000h
|
||||
CDERR_STRUCTSIZE = 00001h
|
||||
CDERR_INITIALIZATION = 00002h
|
||||
CDERR_NOTEMPLATE = 00003h
|
||||
CDERR_NOHINSTANCE = 00004h
|
||||
CDERR_LOADSTRFAILURE = 00005h
|
||||
CDERR_FINDRESFAILURE = 00006h
|
||||
CDERR_LOADRESFAILURE = 00007h
|
||||
CDERR_LOCKRESFAILURE = 00008h
|
||||
CDERR_MEMALLOCFAILURE = 00009h
|
||||
CDERR_MEMLOCKFAILURE = 0000Ah
|
||||
CDERR_NOHOOK = 0000Bh
|
||||
CDERR_REGISTERMSGFAIL = 0000Ch
|
||||
PDERR_PRINTERCODES = 01000h
|
||||
PDERR_SETUPFAILURE = 01001h
|
||||
PDERR_PARSEFAILURE = 01002h
|
||||
PDERR_RETDEFFAILURE = 01003h
|
||||
PDERR_LOADDRVFAILURE = 01004h
|
||||
PDERR_GETDEVMODEFAIL = 01005h
|
||||
PDERR_INITFAILURE = 01006h
|
||||
PDERR_NODEVICES = 01007h
|
||||
PDERR_NODEFAULTPRN = 01008h
|
||||
PDERR_DNDMMISMATCH = 01009h
|
||||
PDERR_CREATEICFAILURE = 0100Ah
|
||||
PDERR_PRINTERNOTFOUND = 0100Bh
|
||||
PDERR_DEFAULTDIFFERENT = 0100Ch
|
||||
CFERR_CHOOSEFONTCODES = 02000h
|
||||
CFERR_NOFONTS = 02001h
|
||||
CFERR_MAXLESSTHANMIN = 02002h
|
||||
FNERR_FILENAMECODES = 03000h
|
||||
FNERR_SUBCLASSFAILURE = 03001h
|
||||
FNERR_INVALIDFILENAME = 03002h
|
||||
FNERR_BUFFERTOOSMALL = 03003h
|
||||
FRERR_FINDREPLACECODES = 04000h
|
||||
FRERR_BUFFERLENGTHZERO = 04001h
|
||||
CCERR_CHOOSECOLORCODES = 05000h
|
480
toolchain/fasm2/include/equates/gdi32.inc
Normal file
480
toolchain/fasm2/include/equates/gdi32.inc
Normal file
@ -0,0 +1,480 @@
|
||||
|
||||
; GDI32.DLL structures and constants
|
||||
|
||||
struct SIZE
|
||||
cx dd ?
|
||||
cy dd ?
|
||||
ends
|
||||
|
||||
struct BITMAP
|
||||
bmType dd ?
|
||||
bmWidth dd ?
|
||||
bmHeight dd ?
|
||||
bmWidthBytes dd ?
|
||||
bmPlanes dw ?
|
||||
bmBitsPixel dw ?
|
||||
bmBits dd ?
|
||||
ends
|
||||
|
||||
struct BITMAPCOREHEADER
|
||||
bcSize dd ?
|
||||
bcWidth dw ?
|
||||
bcHeight dw ?
|
||||
bcPlanes dw ?
|
||||
bcBitCount dw ?
|
||||
ends
|
||||
|
||||
struct BITMAPINFOHEADER
|
||||
biSize dd ?
|
||||
biWidth dd ?
|
||||
biHeight dd ?
|
||||
biPlanes dw ?
|
||||
biBitCount dw ?
|
||||
biCompression dd ?
|
||||
biSizeImage dd ?
|
||||
biXPelsPerMeter dd ?
|
||||
biYPelsPerMeter dd ?
|
||||
biClrUsed dd ?
|
||||
biClrImportant dd ?
|
||||
ends
|
||||
|
||||
struct BITMAPFILEHEADER
|
||||
bfType dw ?
|
||||
bfSize dd ?
|
||||
bfReserved1 dw ?
|
||||
bfReserved2 dw ?
|
||||
bfOffBits dd ?
|
||||
ends
|
||||
|
||||
struct TEXTMETRIC
|
||||
tmHeight dd ?
|
||||
tmAscent dd ?
|
||||
tmDescent dd ?
|
||||
tmInternalLeading dd ?
|
||||
tmExternalLeading dd ?
|
||||
tmAveCharWidth dd ?
|
||||
tmMaxCharWidth dd ?
|
||||
tmWeight dd ?
|
||||
tmOverhang dd ?
|
||||
tmDigitizedAspectX dd ?
|
||||
tmDigitizedAspectY dd ?
|
||||
tmFirstChar TCHAR ?
|
||||
tmLastChar TCHAR ?
|
||||
tmDefaultChar TCHAR ?
|
||||
tmBreakChar TCHAR ?
|
||||
tmItalic db ?
|
||||
tmUnderlined db ?
|
||||
tmStruckOut db ?
|
||||
tmPitchAndFamily db ?
|
||||
tmCharSet db ?
|
||||
ends
|
||||
|
||||
struct LOGBRUSH
|
||||
lbStyle dd ?
|
||||
lbColor dd ?
|
||||
lbHatch dd ?
|
||||
ends
|
||||
|
||||
struct LOGPEN
|
||||
lopnStyle dd ?
|
||||
lopnWidth POINT
|
||||
lopnColor dd ?
|
||||
ends
|
||||
|
||||
struct EXTLOGPEN
|
||||
elpPenStyle dd ?
|
||||
elpWidth dd ?
|
||||
elpBrushStyle dd ?
|
||||
elpColor dd ?
|
||||
elpHatch dd ?
|
||||
elpNumEntries dd ?
|
||||
elpStyleEntry dd ?
|
||||
ends
|
||||
|
||||
struct LOGFONT
|
||||
lfHeight dd ?
|
||||
lfWidth dd ?
|
||||
lfEscapement dd ?
|
||||
lfOrientation dd ?
|
||||
lfWeight dd ?
|
||||
lfItalic db ?
|
||||
lfUnderline db ?
|
||||
lfStrikeOut db ?
|
||||
lfCharSet db ?
|
||||
lfOutPrecision db ?
|
||||
lfClipPrecision db ?
|
||||
lfQuality db ?
|
||||
lfPitchAndFamily db ?
|
||||
lfFaceName TCHAR 32 dup (?)
|
||||
ends
|
||||
|
||||
struct ENUMLOGFONT
|
||||
elfLogFont LOGFONT
|
||||
elfFullName TCHAR 64 dup (?)
|
||||
elfStyle TCHAR 32 dup (?)
|
||||
ends
|
||||
|
||||
struct ENUMLOGFONTEX
|
||||
elfLogFont LOGFONT
|
||||
elfFullName TCHAR 64 dup (?)
|
||||
elfStyle TCHAR 32 dup (?)
|
||||
elfScript TCHAR 32 dup (?)
|
||||
ends
|
||||
|
||||
struct PIXELFORMATDESCRIPTOR
|
||||
nSize dw ?
|
||||
nVersion dw ?
|
||||
dwFlags dd ?
|
||||
iPixelType db ?
|
||||
cColorBits db ?
|
||||
cRedBits db ?
|
||||
cRedShift db ?
|
||||
cGreenBits db ?
|
||||
cGreenShift db ?
|
||||
cBlueBits db ?
|
||||
cBlueShift db ?
|
||||
cAlphaBits db ?
|
||||
cAlphaShift db ?
|
||||
cAccumBits db ?
|
||||
cAccumRedBits db ?
|
||||
cAccumGreenBits db ?
|
||||
cAccumBlueBits db ?
|
||||
cAccumAlphaBits db ?
|
||||
cDepthBits db ?
|
||||
cStencilBits db ?
|
||||
cAuxBuffers db ?
|
||||
iLayerType db ?
|
||||
bReserved db ?
|
||||
dwLayerMask dd ?
|
||||
dwVisibleMask dd ?
|
||||
dwDamageMask dd ?
|
||||
ends
|
||||
|
||||
struct TRIVERTEX
|
||||
x dd ?
|
||||
y dd ?
|
||||
Red dw ?
|
||||
Green dw ?
|
||||
Blue dw ?
|
||||
Alpha dw ?
|
||||
ends
|
||||
|
||||
; General constants
|
||||
|
||||
GDI_ERROR = 0FFFFFFFFh
|
||||
HGDI_ERROR = 0FFFFFFFFh
|
||||
|
||||
; Binary raster operations
|
||||
|
||||
R2_BLACK = 1
|
||||
R2_NOTMERGEPEN = 2
|
||||
R2_MASKNOTPEN = 3
|
||||
R2_NOTCOPYPEN = 4
|
||||
R2_MASKPENNOT = 5
|
||||
R2_NOT = 6
|
||||
R2_XORPEN = 7
|
||||
R2_NOTMASKPEN = 8
|
||||
R2_MASKPEN = 9
|
||||
R2_NOTXORPEN = 10
|
||||
R2_NOP = 11
|
||||
R2_MERGENOTPEN = 12
|
||||
R2_COPYPEN = 13
|
||||
R2_MERGEPENNOT = 14
|
||||
R2_MERGEPEN = 15
|
||||
R2_WHITE = 16
|
||||
|
||||
; Raster operations
|
||||
|
||||
SRCCOPY = 00CC0020h
|
||||
SRCPAINT = 00EE0086h
|
||||
SRCAND = 008800C6h
|
||||
SRCINVERT = 00660046h
|
||||
SRCERASE = 00440328h
|
||||
NOTSRCCOPY = 00330008h
|
||||
NOTSRCERASE = 001100A6h
|
||||
MERGECOPY = 00C000CAh
|
||||
MERGEPAINT = 00BB0226h
|
||||
PATCOPY = 00F00021h
|
||||
PATPAINT = 00FB0A09h
|
||||
PATINVERT = 005A0049h
|
||||
DSTINVERT = 00550009h
|
||||
BLACKNESS = 00000042h
|
||||
WHITENESS = 00FF0062h
|
||||
|
||||
; Region flags
|
||||
|
||||
ERROR = 0
|
||||
NULLREGION = 1
|
||||
SIMPLEREGION = 2
|
||||
COMPLEXREGION = 3
|
||||
|
||||
; CombineRgn styles
|
||||
|
||||
RGN_AND = 1
|
||||
RGN_OR = 2
|
||||
RGN_XOR = 3
|
||||
RGN_DIFF = 4
|
||||
RGN_COPY = 5
|
||||
|
||||
; StretchBlt modes
|
||||
|
||||
BLACKONWHITE = 1
|
||||
WHITEONBLACK = 2
|
||||
COLORONCOLOR = 3
|
||||
HALFTONE = 4
|
||||
STRETCH_ANDSCANS = BLACKONWHITE
|
||||
STRETCH_ORSCANS = WHITEONBLACK
|
||||
STRETCH_DELETESCANS = COLORONCOLOR
|
||||
STRETCH_HALFTONE = HALFTONE
|
||||
|
||||
; PolyFill modes
|
||||
|
||||
ALTERNATE = 1
|
||||
WINDING = 2
|
||||
|
||||
; Background modes
|
||||
|
||||
TRANSPARENT = 1
|
||||
OPAQUE = 2
|
||||
|
||||
; Point types
|
||||
|
||||
PT_CLOSEFIGURE = 1
|
||||
PT_LINETO = 2
|
||||
PT_BEZIERTO = 4
|
||||
PT_MOVETO = 6
|
||||
|
||||
; Mapping modes
|
||||
|
||||
MM_TEXT = 1
|
||||
MM_LOMETRIC = 2
|
||||
MM_HIMETRIC = 3
|
||||
MM_LOENGLISH = 4
|
||||
MM_HIENGLISH = 5
|
||||
MM_TWIPS = 6
|
||||
MM_ISOTROPIC = 7
|
||||
MM_ANISOTROPIC = 8
|
||||
|
||||
; Coordinate modes
|
||||
|
||||
ABSOLUTE = 1
|
||||
RELATIVE = 2
|
||||
|
||||
; Stock logical objects
|
||||
|
||||
WHITE_BRUSH = 0
|
||||
LTGRAY_BRUSH = 1
|
||||
GRAY_BRUSH = 2
|
||||
DKGRAY_BRUSH = 3
|
||||
BLACK_BRUSH = 4
|
||||
NULL_BRUSH = 5
|
||||
HOLLOW_BRUSH = NULL_BRUSH
|
||||
WHITE_PEN = 6
|
||||
BLACK_PEN = 7
|
||||
NULL_PEN = 8
|
||||
OEM_FIXED_FONT = 10
|
||||
ANSI_FIXED_FONT = 11
|
||||
ANSI_VAR_FONT = 12
|
||||
SYSTEM_FONT = 13
|
||||
DEVICE_DEFAULT_FONT = 14
|
||||
DEFAULT_PALETTE = 15
|
||||
SYSTEM_FIXED_FONT = 16
|
||||
DEFAULT_GUI_FONT = 17
|
||||
|
||||
; Brush styles
|
||||
|
||||
BS_SOLID = 0
|
||||
BS_NULL = 1
|
||||
BS_HOLLOW = BS_NULL
|
||||
BS_HATCHED = 2
|
||||
BS_PATTERN = 3
|
||||
BS_INDEXED = 4
|
||||
BS_DIBPATTERN = 5
|
||||
BS_DIBPATTERNPT = 6
|
||||
BS_PATTERN8X8 = 7
|
||||
BS_DIBPATTERN8X8 = 8
|
||||
BS_MONOPATTERN = 9
|
||||
|
||||
; Hatch styles
|
||||
|
||||
HS_HORIZONTAL = 0
|
||||
HS_VERTICAL = 1
|
||||
HS_FDIAGONAL = 2
|
||||
HS_BDIAGONAL = 3
|
||||
HS_CROSS = 4
|
||||
HS_DIAGCROSS = 5
|
||||
|
||||
; Pen styles
|
||||
|
||||
PS_SOLID = 0
|
||||
PS_DASH = 1
|
||||
PS_DOT = 2
|
||||
PS_DASHDOT = 3
|
||||
PS_DASHDOTDOT = 4
|
||||
PS_NULL = 5
|
||||
PS_INSIDEFRAME = 6
|
||||
PS_USERSTYLE = 7
|
||||
PS_ALTERNATE = 8
|
||||
PS_ENDCAP_ROUND = 0
|
||||
PS_ENDCAP_SQUARE = 100h
|
||||
PS_ENDCAP_FLAT = 200h
|
||||
PS_JOIN_ROUND = 0
|
||||
PS_JOIN_BEVEL = 1000h
|
||||
PS_JOIN_MITER = 2000h
|
||||
PS_COSMETIC = 0
|
||||
PS_GEOMETRIC = 010000h
|
||||
|
||||
; Arc directions
|
||||
|
||||
AD_COUNTERCLOCKWISE = 1
|
||||
AD_CLOCKWISE = 2
|
||||
|
||||
; Text alignment options
|
||||
|
||||
TA_NOUPDATECP = 0
|
||||
TA_UPDATECP = 1
|
||||
TA_LEFT = 0
|
||||
TA_RIGHT = 2
|
||||
TA_CENTER = 6
|
||||
TA_TOP = 0
|
||||
TA_BOTTOM = 8
|
||||
TA_BASELINE = 24
|
||||
TA_RTLREADING = 100h
|
||||
VTA_BASELINE = TA_BASELINE
|
||||
VTA_LEFT = TA_BOTTOM
|
||||
VTA_RIGHT = TA_TOP
|
||||
VTA_CENTER = TA_CENTER
|
||||
VTA_BOTTOM = TA_RIGHT
|
||||
VTA_TOP = TA_LEFT
|
||||
|
||||
; ExtTextOut options
|
||||
|
||||
ETO_OPAQUE = 0002h
|
||||
ETO_CLIPPED = 0004h
|
||||
ETO_GLYPH_INDEX = 0010h
|
||||
ETO_RTLREADING = 0080h
|
||||
ETO_IGNORELANGUAGE = 1000h
|
||||
|
||||
; Bitmap compression types
|
||||
|
||||
BI_RGB = 0
|
||||
BI_RLE8 = 1
|
||||
BI_RLE4 = 2
|
||||
BI_BITFIELDS = 3
|
||||
|
||||
; tmPitchAndFamily flags
|
||||
|
||||
TMPF_FIXED_PITCH = 1
|
||||
TMPF_VECTOR = 2
|
||||
TMPF_TRUETYPE = 4
|
||||
TMPF_DEVICE = 8
|
||||
|
||||
; Font output precision values
|
||||
|
||||
OUT_DEFAULT_PRECIS = 0
|
||||
OUT_STRING_PRECIS = 1
|
||||
OUT_CHARACTER_PRECIS = 2
|
||||
OUT_STROKE_PRECIS = 3
|
||||
OUT_TT_PRECIS = 4
|
||||
OUT_DEVICE_PRECIS = 5
|
||||
OUT_RASTER_PRECIS = 6
|
||||
OUT_TT_ONLY_PRECIS = 7
|
||||
OUT_OUTLINE_PRECIS = 8
|
||||
OUT_SCREEN_OUTLINE_PRECIS = 9
|
||||
|
||||
; Font clipping precision values
|
||||
|
||||
CLIP_DEFAULT_PRECIS = 0
|
||||
CLIP_CHARACTER_PRECIS = 1
|
||||
CLIP_STROKE_PRECIS = 2
|
||||
CLIP_LH_ANGLES = 10h
|
||||
CLIP_TT_ALWAYS = 20h
|
||||
CLIP_EMBEDDED = 80h
|
||||
|
||||
; Font output quality values
|
||||
|
||||
DEFAULT_QUALITY = 0
|
||||
DRAFT_QUALITY = 1
|
||||
PROOF_QUALITY = 2
|
||||
NONANTIALIASED_QUALITY = 3
|
||||
ANTIALIASED_QUALITY = 4
|
||||
|
||||
; Font pitch values
|
||||
|
||||
DEFAULT_PITCH = 0
|
||||
FIXED_PITCH = 1
|
||||
VARIABLE_PITCH = 2
|
||||
MONO_FONT = 8
|
||||
|
||||
; Font families
|
||||
|
||||
FF_DONTCARE = 00h
|
||||
FF_ROMAN = 10h
|
||||
FF_SWISS = 20h
|
||||
FF_MODERN = 30h
|
||||
FF_SCRIPT = 40h
|
||||
FF_DECORATIVE = 50h
|
||||
|
||||
; Font weights
|
||||
|
||||
FW_DONTCARE = 0
|
||||
FW_THIN = 100
|
||||
FW_EXTRALIGHT = 200
|
||||
FW_LIGHT = 300
|
||||
FW_NORMAL = 400
|
||||
FW_MEDIUM = 500
|
||||
FW_SEMIBOLD = 600
|
||||
FW_BOLD = 700
|
||||
FW_EXTRABOLD = 800
|
||||
FW_HEAVY = 900
|
||||
FW_ULTRALIGHT = FW_EXTRALIGHT
|
||||
FW_REGULAR = FW_NORMAL
|
||||
FW_DEMIBOLD = FW_SEMIBOLD
|
||||
FW_ULTRABOLD = FW_EXTRABOLD
|
||||
FW_BLACK = FW_HEAVY
|
||||
|
||||
; Character set values
|
||||
|
||||
ANSI_CHARSET = 0
|
||||
DEFAULT_CHARSET = 1
|
||||
SYMBOL_CHARSET = 2
|
||||
SHIFTJIS_CHARSET = 128
|
||||
HANGEUL_CHARSET = 129
|
||||
GB2312_CHARSET = 134
|
||||
CHINESEBIG5_CHARSET = 136
|
||||
OEM_CHARSET = 255
|
||||
JOHAB_CHARSET = 130
|
||||
HEBREW_CHARSET = 177
|
||||
ARABIC_CHARSET = 178
|
||||
GREEK_CHARSET = 161
|
||||
TURKISH_CHARSET = 162
|
||||
VIETNAMESE_CHARSET = 163
|
||||
THAI_CHARSET = 222
|
||||
EASTEUROPE_CHARSET = 238
|
||||
RUSSIAN_CHARSET = 204
|
||||
MAC_CHARSET = 77
|
||||
BALTIC_CHARSET = 186
|
||||
|
||||
; Pixel format constants
|
||||
|
||||
PFD_TYPE_RGBA = 0
|
||||
PFD_TYPE_COLORINDEX = 1
|
||||
PFD_MAIN_PLANE = 0
|
||||
PFD_OVERLAY_PLANE = 1
|
||||
PFD_UNDERLAY_PLANE = -1
|
||||
PFD_DOUBLEBUFFER = 1
|
||||
PFD_STEREO = 2
|
||||
PFD_DRAW_TO_WINDOW = 4
|
||||
PFD_DRAW_TO_BITMAP = 8
|
||||
PFD_SUPPORT_GDI = 10h
|
||||
PFD_SUPPORT_OPENGL = 20h
|
||||
PFD_GENERIC_FORMAT = 40h
|
||||
PFD_NEED_PALETTE = 80h
|
||||
PFD_NEED_SYSTEM_PALETTE = 100h
|
||||
PFD_SWAP_EXCHANGE = 200h
|
||||
PFD_SWAP_COPY = 400h
|
||||
PFD_SWAP_LAYER_BUFFERS = 800h
|
||||
PFD_GENERIC_ACCELERATED = 1000h
|
||||
PFD_DEPTH_DONTCARE = 20000000h
|
||||
PFD_DOUBLEBUFFER_DONTCARE = 40000000h
|
||||
PFD_STEREO_DONTCARE = 80000000h
|
482
toolchain/fasm2/include/equates/gdi64.inc
Normal file
482
toolchain/fasm2/include/equates/gdi64.inc
Normal file
@ -0,0 +1,482 @@
|
||||
|
||||
; GDI32.DLL structures and constants
|
||||
|
||||
struct SIZE
|
||||
cx dd ?
|
||||
cy dd ?
|
||||
ends
|
||||
|
||||
struct BITMAP
|
||||
bmType dd ?
|
||||
bmWidth dd ?
|
||||
bmHeight dd ?
|
||||
bmWidthBytes dd ?
|
||||
bmPlanes dw ?
|
||||
bmBitsPixel dw ?
|
||||
dd ?
|
||||
bmBits dq ?
|
||||
ends
|
||||
|
||||
struct BITMAPCOREHEADER
|
||||
bcSize dd ?
|
||||
bcWidth dw ?
|
||||
bcHeight dw ?
|
||||
bcPlanes dw ?
|
||||
bcBitCount dw ?
|
||||
ends
|
||||
|
||||
struct BITMAPINFOHEADER
|
||||
biSize dd ?
|
||||
biWidth dd ?
|
||||
biHeight dd ?
|
||||
biPlanes dw ?
|
||||
biBitCount dw ?
|
||||
biCompression dd ?
|
||||
biSizeImage dd ?
|
||||
biXPelsPerMeter dd ?
|
||||
biYPelsPerMeter dd ?
|
||||
biClrUsed dd ?
|
||||
biClrImportant dd ?
|
||||
ends
|
||||
|
||||
struct BITMAPFILEHEADER, packed
|
||||
bfType dw ?
|
||||
bfSize dd ?
|
||||
bfReserved1 dw ?
|
||||
bfReserved2 dw ?
|
||||
bfOffBits dd ?
|
||||
ends
|
||||
|
||||
struct TEXTMETRIC
|
||||
tmHeight dd ?
|
||||
tmAscent dd ?
|
||||
tmDescent dd ?
|
||||
tmInternalLeading dd ?
|
||||
tmExternalLeading dd ?
|
||||
tmAveCharWidth dd ?
|
||||
tmMaxCharWidth dd ?
|
||||
tmWeight dd ?
|
||||
tmOverhang dd ?
|
||||
tmDigitizedAspectX dd ?
|
||||
tmDigitizedAspectY dd ?
|
||||
tmFirstChar TCHAR ?
|
||||
tmLastChar TCHAR ?
|
||||
tmDefaultChar TCHAR ?
|
||||
tmBreakChar TCHAR ?
|
||||
tmItalic db ?
|
||||
tmUnderlined db ?
|
||||
tmStruckOut db ?
|
||||
tmPitchAndFamily db ?
|
||||
tmCharSet db ?
|
||||
align 4
|
||||
ends
|
||||
|
||||
struct LOGBRUSH
|
||||
lbStyle dd ?
|
||||
lbColor dd ?
|
||||
lbHatch dd ?
|
||||
ends
|
||||
|
||||
struct LOGPEN
|
||||
lopnStyle dd ?
|
||||
lopnWidth POINT
|
||||
lopnColor dd ?
|
||||
ends
|
||||
|
||||
struct EXTLOGPEN
|
||||
elpPenStyle dd ?
|
||||
elpWidth dd ?
|
||||
elpBrushStyle dd ?
|
||||
elpColor dd ?
|
||||
elpHatch dd ?
|
||||
elpNumEntries dd ?
|
||||
elpStyleEntry dd ?
|
||||
ends
|
||||
|
||||
struct LOGFONT
|
||||
lfHeight dd ?
|
||||
lfWidth dd ?
|
||||
lfEscapement dd ?
|
||||
lfOrientation dd ?
|
||||
lfWeight dd ?
|
||||
lfItalic db ?
|
||||
lfUnderline db ?
|
||||
lfStrikeOut db ?
|
||||
lfCharSet db ?
|
||||
lfOutPrecision db ?
|
||||
lfClipPrecision db ?
|
||||
lfQuality db ?
|
||||
lfPitchAndFamily db ?
|
||||
lfFaceName TCHAR 32 dup (?)
|
||||
ends
|
||||
|
||||
struct ENUMLOGFONT
|
||||
elfLogFont LOGFONT
|
||||
elfFullName TCHAR 64 dup (?)
|
||||
elfStyle TCHAR 32 dup (?)
|
||||
ends
|
||||
|
||||
struct ENUMLOGFONTEX
|
||||
elfLogFont LOGFONT
|
||||
elfFullName TCHAR 64 dup (?)
|
||||
elfStyle TCHAR 32 dup (?)
|
||||
elfScript TCHAR 32 dup (?)
|
||||
ends
|
||||
|
||||
struct PIXELFORMATDESCRIPTOR
|
||||
nSize dw ?
|
||||
nVersion dw ?
|
||||
dwFlags dd ?
|
||||
iPixelType db ?
|
||||
cColorBits db ?
|
||||
cRedBits db ?
|
||||
cRedShift db ?
|
||||
cGreenBits db ?
|
||||
cGreenShift db ?
|
||||
cBlueBits db ?
|
||||
cBlueShift db ?
|
||||
cAlphaBits db ?
|
||||
cAlphaShift db ?
|
||||
cAccumBits db ?
|
||||
cAccumRedBits db ?
|
||||
cAccumGreenBits db ?
|
||||
cAccumBlueBits db ?
|
||||
cAccumAlphaBits db ?
|
||||
cDepthBits db ?
|
||||
cStencilBits db ?
|
||||
cAuxBuffers db ?
|
||||
iLayerType db ?
|
||||
bReserved db ?
|
||||
dwLayerMask dd ?
|
||||
dwVisibleMask dd ?
|
||||
dwDamageMask dd ?
|
||||
ends
|
||||
|
||||
struct TRIVERTEX
|
||||
x dd ?
|
||||
y dd ?
|
||||
Red dw ?
|
||||
Green dw ?
|
||||
Blue dw ?
|
||||
Alpha dw ?
|
||||
ends
|
||||
|
||||
; General constants
|
||||
|
||||
GDI_ERROR = 0FFFFFFFFh
|
||||
HGDI_ERROR = 0FFFFFFFFh
|
||||
|
||||
; Binary raster operations
|
||||
|
||||
R2_BLACK = 1
|
||||
R2_NOTMERGEPEN = 2
|
||||
R2_MASKNOTPEN = 3
|
||||
R2_NOTCOPYPEN = 4
|
||||
R2_MASKPENNOT = 5
|
||||
R2_NOT = 6
|
||||
R2_XORPEN = 7
|
||||
R2_NOTMASKPEN = 8
|
||||
R2_MASKPEN = 9
|
||||
R2_NOTXORPEN = 10
|
||||
R2_NOP = 11
|
||||
R2_MERGENOTPEN = 12
|
||||
R2_COPYPEN = 13
|
||||
R2_MERGEPENNOT = 14
|
||||
R2_MERGEPEN = 15
|
||||
R2_WHITE = 16
|
||||
|
||||
; Raster operations
|
||||
|
||||
SRCCOPY = 00CC0020h
|
||||
SRCPAINT = 00EE0086h
|
||||
SRCAND = 008800C6h
|
||||
SRCINVERT = 00660046h
|
||||
SRCERASE = 00440328h
|
||||
NOTSRCCOPY = 00330008h
|
||||
NOTSRCERASE = 001100A6h
|
||||
MERGECOPY = 00C000CAh
|
||||
MERGEPAINT = 00BB0226h
|
||||
PATCOPY = 00F00021h
|
||||
PATPAINT = 00FB0A09h
|
||||
PATINVERT = 005A0049h
|
||||
DSTINVERT = 00550009h
|
||||
BLACKNESS = 00000042h
|
||||
WHITENESS = 00FF0062h
|
||||
|
||||
; Region flags
|
||||
|
||||
ERROR = 0
|
||||
NULLREGION = 1
|
||||
SIMPLEREGION = 2
|
||||
COMPLEXREGION = 3
|
||||
|
||||
; CombineRgn styles
|
||||
|
||||
RGN_AND = 1
|
||||
RGN_OR = 2
|
||||
RGN_XOR = 3
|
||||
RGN_DIFF = 4
|
||||
RGN_COPY = 5
|
||||
|
||||
; StretchBlt modes
|
||||
|
||||
BLACKONWHITE = 1
|
||||
WHITEONBLACK = 2
|
||||
COLORONCOLOR = 3
|
||||
HALFTONE = 4
|
||||
STRETCH_ANDSCANS = BLACKONWHITE
|
||||
STRETCH_ORSCANS = WHITEONBLACK
|
||||
STRETCH_DELETESCANS = COLORONCOLOR
|
||||
STRETCH_HALFTONE = HALFTONE
|
||||
|
||||
; PolyFill modes
|
||||
|
||||
ALTERNATE = 1
|
||||
WINDING = 2
|
||||
|
||||
; Background modes
|
||||
|
||||
TRANSPARENT = 1
|
||||
OPAQUE = 2
|
||||
|
||||
; Point types
|
||||
|
||||
PT_CLOSEFIGURE = 1
|
||||
PT_LINETO = 2
|
||||
PT_BEZIERTO = 4
|
||||
PT_MOVETO = 6
|
||||
|
||||
; Mapping modes
|
||||
|
||||
MM_TEXT = 1
|
||||
MM_LOMETRIC = 2
|
||||
MM_HIMETRIC = 3
|
||||
MM_LOENGLISH = 4
|
||||
MM_HIENGLISH = 5
|
||||
MM_TWIPS = 6
|
||||
MM_ISOTROPIC = 7
|
||||
MM_ANISOTROPIC = 8
|
||||
|
||||
; Coordinate modes
|
||||
|
||||
ABSOLUTE = 1
|
||||
RELATIVE = 2
|
||||
|
||||
; Stock logical objects
|
||||
|
||||
WHITE_BRUSH = 0
|
||||
LTGRAY_BRUSH = 1
|
||||
GRAY_BRUSH = 2
|
||||
DKGRAY_BRUSH = 3
|
||||
BLACK_BRUSH = 4
|
||||
NULL_BRUSH = 5
|
||||
HOLLOW_BRUSH = NULL_BRUSH
|
||||
WHITE_PEN = 6
|
||||
BLACK_PEN = 7
|
||||
NULL_PEN = 8
|
||||
OEM_FIXED_FONT = 10
|
||||
ANSI_FIXED_FONT = 11
|
||||
ANSI_VAR_FONT = 12
|
||||
SYSTEM_FONT = 13
|
||||
DEVICE_DEFAULT_FONT = 14
|
||||
DEFAULT_PALETTE = 15
|
||||
SYSTEM_FIXED_FONT = 16
|
||||
DEFAULT_GUI_FONT = 17
|
||||
|
||||
; Brush styles
|
||||
|
||||
BS_SOLID = 0
|
||||
BS_NULL = 1
|
||||
BS_HOLLOW = BS_NULL
|
||||
BS_HATCHED = 2
|
||||
BS_PATTERN = 3
|
||||
BS_INDEXED = 4
|
||||
BS_DIBPATTERN = 5
|
||||
BS_DIBPATTERNPT = 6
|
||||
BS_PATTERN8X8 = 7
|
||||
BS_DIBPATTERN8X8 = 8
|
||||
BS_MONOPATTERN = 9
|
||||
|
||||
; Hatch styles
|
||||
|
||||
HS_HORIZONTAL = 0
|
||||
HS_VERTICAL = 1
|
||||
HS_FDIAGONAL = 2
|
||||
HS_BDIAGONAL = 3
|
||||
HS_CROSS = 4
|
||||
HS_DIAGCROSS = 5
|
||||
|
||||
; Pen styles
|
||||
|
||||
PS_SOLID = 0
|
||||
PS_DASH = 1
|
||||
PS_DOT = 2
|
||||
PS_DASHDOT = 3
|
||||
PS_DASHDOTDOT = 4
|
||||
PS_NULL = 5
|
||||
PS_INSIDEFRAME = 6
|
||||
PS_USERSTYLE = 7
|
||||
PS_ALTERNATE = 8
|
||||
PS_ENDCAP_ROUND = 0
|
||||
PS_ENDCAP_SQUARE = 100h
|
||||
PS_ENDCAP_FLAT = 200h
|
||||
PS_JOIN_ROUND = 0
|
||||
PS_JOIN_BEVEL = 1000h
|
||||
PS_JOIN_MITER = 2000h
|
||||
PS_COSMETIC = 0
|
||||
PS_GEOMETRIC = 010000h
|
||||
|
||||
; Arc directions
|
||||
|
||||
AD_COUNTERCLOCKWISE = 1
|
||||
AD_CLOCKWISE = 2
|
||||
|
||||
; Text alignment options
|
||||
|
||||
TA_NOUPDATECP = 0
|
||||
TA_UPDATECP = 1
|
||||
TA_LEFT = 0
|
||||
TA_RIGHT = 2
|
||||
TA_CENTER = 6
|
||||
TA_TOP = 0
|
||||
TA_BOTTOM = 8
|
||||
TA_BASELINE = 24
|
||||
TA_RTLREADING = 100h
|
||||
VTA_BASELINE = TA_BASELINE
|
||||
VTA_LEFT = TA_BOTTOM
|
||||
VTA_RIGHT = TA_TOP
|
||||
VTA_CENTER = TA_CENTER
|
||||
VTA_BOTTOM = TA_RIGHT
|
||||
VTA_TOP = TA_LEFT
|
||||
|
||||
; ExtTextOut options
|
||||
|
||||
ETO_OPAQUE = 0002h
|
||||
ETO_CLIPPED = 0004h
|
||||
ETO_GLYPH_INDEX = 0010h
|
||||
ETO_RTLREADING = 0080h
|
||||
ETO_IGNORELANGUAGE = 1000h
|
||||
|
||||
; Bitmap compression types
|
||||
|
||||
BI_RGB = 0
|
||||
BI_RLE8 = 1
|
||||
BI_RLE4 = 2
|
||||
BI_BITFIELDS = 3
|
||||
|
||||
; tmPitchAndFamily flags
|
||||
|
||||
TMPF_FIXED_PITCH = 1
|
||||
TMPF_VECTOR = 2
|
||||
TMPF_TRUETYPE = 4
|
||||
TMPF_DEVICE = 8
|
||||
|
||||
; Font output precision values
|
||||
|
||||
OUT_DEFAULT_PRECIS = 0
|
||||
OUT_STRING_PRECIS = 1
|
||||
OUT_CHARACTER_PRECIS = 2
|
||||
OUT_STROKE_PRECIS = 3
|
||||
OUT_TT_PRECIS = 4
|
||||
OUT_DEVICE_PRECIS = 5
|
||||
OUT_RASTER_PRECIS = 6
|
||||
OUT_TT_ONLY_PRECIS = 7
|
||||
OUT_OUTLINE_PRECIS = 8
|
||||
OUT_SCREEN_OUTLINE_PRECIS = 9
|
||||
|
||||
; Font clipping precision values
|
||||
|
||||
CLIP_DEFAULT_PRECIS = 0
|
||||
CLIP_CHARACTER_PRECIS = 1
|
||||
CLIP_STROKE_PRECIS = 2
|
||||
CLIP_LH_ANGLES = 10h
|
||||
CLIP_TT_ALWAYS = 20h
|
||||
CLIP_EMBEDDED = 80h
|
||||
|
||||
; Font output quality values
|
||||
|
||||
DEFAULT_QUALITY = 0
|
||||
DRAFT_QUALITY = 1
|
||||
PROOF_QUALITY = 2
|
||||
NONANTIALIASED_QUALITY = 3
|
||||
ANTIALIASED_QUALITY = 4
|
||||
|
||||
; Font pitch values
|
||||
|
||||
DEFAULT_PITCH = 0
|
||||
FIXED_PITCH = 1
|
||||
VARIABLE_PITCH = 2
|
||||
MONO_FONT = 8
|
||||
|
||||
; Font families
|
||||
|
||||
FF_DONTCARE = 00h
|
||||
FF_ROMAN = 10h
|
||||
FF_SWISS = 20h
|
||||
FF_MODERN = 30h
|
||||
FF_SCRIPT = 40h
|
||||
FF_DECORATIVE = 50h
|
||||
|
||||
; Font weights
|
||||
|
||||
FW_DONTCARE = 0
|
||||
FW_THIN = 100
|
||||
FW_EXTRALIGHT = 200
|
||||
FW_LIGHT = 300
|
||||
FW_NORMAL = 400
|
||||
FW_MEDIUM = 500
|
||||
FW_SEMIBOLD = 600
|
||||
FW_BOLD = 700
|
||||
FW_EXTRABOLD = 800
|
||||
FW_HEAVY = 900
|
||||
FW_ULTRALIGHT = FW_EXTRALIGHT
|
||||
FW_REGULAR = FW_NORMAL
|
||||
FW_DEMIBOLD = FW_SEMIBOLD
|
||||
FW_ULTRABOLD = FW_EXTRABOLD
|
||||
FW_BLACK = FW_HEAVY
|
||||
|
||||
; Character set values
|
||||
|
||||
ANSI_CHARSET = 0
|
||||
DEFAULT_CHARSET = 1
|
||||
SYMBOL_CHARSET = 2
|
||||
SHIFTJIS_CHARSET = 128
|
||||
HANGEUL_CHARSET = 129
|
||||
GB2312_CHARSET = 134
|
||||
CHINESEBIG5_CHARSET = 136
|
||||
OEM_CHARSET = 255
|
||||
JOHAB_CHARSET = 130
|
||||
HEBREW_CHARSET = 177
|
||||
ARABIC_CHARSET = 178
|
||||
GREEK_CHARSET = 161
|
||||
TURKISH_CHARSET = 162
|
||||
VIETNAMESE_CHARSET = 163
|
||||
THAI_CHARSET = 222
|
||||
EASTEUROPE_CHARSET = 238
|
||||
RUSSIAN_CHARSET = 204
|
||||
MAC_CHARSET = 77
|
||||
BALTIC_CHARSET = 186
|
||||
|
||||
; Pixel format constants
|
||||
|
||||
PFD_TYPE_RGBA = 0
|
||||
PFD_TYPE_COLORINDEX = 1
|
||||
PFD_MAIN_PLANE = 0
|
||||
PFD_OVERLAY_PLANE = 1
|
||||
PFD_UNDERLAY_PLANE = -1
|
||||
PFD_DOUBLEBUFFER = 1
|
||||
PFD_STEREO = 2
|
||||
PFD_DRAW_TO_WINDOW = 4
|
||||
PFD_DRAW_TO_BITMAP = 8
|
||||
PFD_SUPPORT_GDI = 10h
|
||||
PFD_SUPPORT_OPENGL = 20h
|
||||
PFD_GENERIC_FORMAT = 40h
|
||||
PFD_NEED_PALETTE = 80h
|
||||
PFD_NEED_SYSTEM_PALETTE = 100h
|
||||
PFD_SWAP_EXCHANGE = 200h
|
||||
PFD_SWAP_COPY = 400h
|
||||
PFD_SWAP_LAYER_BUFFERS = 800h
|
||||
PFD_GENERIC_ACCELERATED = 1000h
|
||||
PFD_DEPTH_DONTCARE = 20000000h
|
||||
PFD_DOUBLEBUFFER_DONTCARE = 40000000h
|
||||
PFD_STEREO_DONTCARE = 80000000h
|
812
toolchain/fasm2/include/equates/kernel32.inc
Normal file
812
toolchain/fasm2/include/equates/kernel32.inc
Normal file
@ -0,0 +1,812 @@
|
||||
|
||||
; KERNEL32.DLL structures and constants
|
||||
|
||||
struct SYSTEM_INFO
|
||||
wProcessorArchitecture dw ?
|
||||
wReserved dw ?
|
||||
dwPageSize dd ?
|
||||
lpMinimumApplicationAddress dd ?
|
||||
lpMaximumApplicationAddress dd ?
|
||||
dwActiveProcessorMask dd ?
|
||||
dwNumberOfProcessors dd ?
|
||||
dwProcessorType dd ?
|
||||
dwAllocationGranularity dd ?
|
||||
wProcessorLevel dw ?
|
||||
wProcessorRevision dw ?
|
||||
ends
|
||||
|
||||
struct OSVERSIONINFO
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion TCHAR 128 dup (?)
|
||||
ends
|
||||
|
||||
struct OSVERSIONINFOA
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion db 128 dup (?)
|
||||
ends
|
||||
|
||||
struct OSVERSIONINFOW
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion du 128 dup (?)
|
||||
ends
|
||||
|
||||
struct MEMORYSTATUS
|
||||
dwLength dd ?
|
||||
dwMemoryLoad dd ?
|
||||
dwTotalPhys dd ?
|
||||
dwAvailPhys dd ?
|
||||
dwTotalPageFile dd ?
|
||||
dwAvailPageFile dd ?
|
||||
dwTotalVirtual dd ?
|
||||
dwAvailVirtual dd ?
|
||||
ends
|
||||
|
||||
struct STARTUPINFO
|
||||
cb dd ?
|
||||
lpReserved dd ?
|
||||
lpDesktop dd ?
|
||||
lpTitle dd ?
|
||||
dwX dd ?
|
||||
dwY dd ?
|
||||
dwXSize dd ?
|
||||
dwYSize dd ?
|
||||
dwXCountChars dd ?
|
||||
dwYCountChars dd ?
|
||||
dwFillAttribute dd ?
|
||||
dwFlags dd ?
|
||||
wShowWindow dw ?
|
||||
cbReserved2 dw ?
|
||||
lpReserved2 dd ?
|
||||
hStdInput dd ?
|
||||
hStdOutput dd ?
|
||||
hStdError dd ?
|
||||
ends
|
||||
|
||||
struct PROCESS_INFORMATION
|
||||
hProcess dd ?
|
||||
hThread dd ?
|
||||
dwProcessId dd ?
|
||||
dwThreadId dd ?
|
||||
ends
|
||||
|
||||
struct FILETIME
|
||||
dwLowDateTime dd ?
|
||||
dwHighDateTime dd ?
|
||||
ends
|
||||
|
||||
struct SYSTEMTIME
|
||||
wYear dw ?
|
||||
wMonth dw ?
|
||||
wDayOfWeek dw ?
|
||||
wDay dw ?
|
||||
wHour dw ?
|
||||
wMinute dw ?
|
||||
wSecond dw ?
|
||||
wMilliseconds dw ?
|
||||
ends
|
||||
|
||||
struct BY_HANDLE_FILE_INFORMATION
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
dwVolumeSerialNumber dd ?
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
nNumberOfLinks dd ?
|
||||
nFileIndexHigh dd ?
|
||||
nFileIndexLow dd ?
|
||||
ends
|
||||
|
||||
struct WIN32_FIND_DATA
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName TCHAR MAX_PATH dup (?)
|
||||
cAlternateFileName TCHAR 14 dup (?)
|
||||
ends
|
||||
|
||||
struct WIN32_FIND_DATAA
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName db MAX_PATH dup (?)
|
||||
cAlternateFileName db 14 dup (?)
|
||||
ends
|
||||
|
||||
struct WIN32_FIND_DATAW
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName du MAX_PATH dup (?)
|
||||
cAlternateFileName du 14 dup (?)
|
||||
ends
|
||||
|
||||
; General constants
|
||||
|
||||
NULL = 0
|
||||
TRUE = 1
|
||||
FALSE = 0
|
||||
|
||||
; Maximum path length in characters
|
||||
|
||||
MAX_PATH = 260
|
||||
|
||||
; Access rights
|
||||
|
||||
DELETE_RIGHT = 00010000h
|
||||
READ_CONTROL = 00020000h
|
||||
WRITE_DAC = 00040000h
|
||||
WRITE_OWNER = 00080000h
|
||||
SYNCHRONIZE = 00100000h
|
||||
STANDARD_RIGHTS_READ = READ_CONTROL
|
||||
STANDARD_RIGHTS_WRITE = READ_CONTROL
|
||||
STANDARD_RIGHTS_EXECUTE = READ_CONTROL
|
||||
STANDARD_RIGHTS_REQUIRED = 000F0000h
|
||||
STANDARD_RIGHTS_ALL = 001F0000h
|
||||
SPECIFIC_RIGHTS_ALL = 0000FFFFh
|
||||
ACCESS_SYSTEM_SECURITY = 01000000h
|
||||
MAXIMUM_ALLOWED = 02000000h
|
||||
GENERIC_READ = 80000000h
|
||||
GENERIC_WRITE = 40000000h
|
||||
GENERIC_EXECUTE = 20000000h
|
||||
GENERIC_ALL = 10000000h
|
||||
PROCESS_TERMINATE = 00000001h
|
||||
PROCESS_CREATE_THREAD = 00000002h
|
||||
PROCESS_VM_OPERATION = 00000008h
|
||||
PROCESS_VM_READ = 00000010h
|
||||
PROCESS_VM_WRITE = 00000020h
|
||||
PROCESS_DUP_HANDLE = 00000040h
|
||||
PROCESS_CREATE_PROCESS = 00000080h
|
||||
PROCESS_SET_QUOTA = 00000100h
|
||||
PROCESS_SET_INFORMATION = 00000200h
|
||||
PROCESS_QUERY_INFORMATION = 00000400h
|
||||
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 0FFFh
|
||||
FILE_SHARE_READ = 00000001h
|
||||
FILE_SHARE_WRITE = 00000002h
|
||||
FILE_SHARE_DELETE = 00000004h
|
||||
|
||||
; CreateFile actions
|
||||
|
||||
CREATE_NEW = 1
|
||||
CREATE_ALWAYS = 2
|
||||
OPEN_EXISTING = 3
|
||||
OPEN_ALWAYS = 4
|
||||
TRUNCATE_EXISTING = 5
|
||||
|
||||
; OpenFile modes
|
||||
|
||||
OF_READ = 0000h
|
||||
OF_WRITE = 0001h
|
||||
OF_READWRITE = 0002h
|
||||
OF_SHARE_COMPAT = 0000h
|
||||
OF_SHARE_EXCLUSIVE = 0010h
|
||||
OF_SHARE_DENY_WRITE = 0020h
|
||||
OF_SHARE_DENY_READ = 0030h
|
||||
OF_SHARE_DENY_NONE = 0040h
|
||||
OF_PARSE = 0100h
|
||||
OF_DELETE = 0200h
|
||||
OF_VERIFY = 0400h
|
||||
OF_CANCEL = 0800h
|
||||
OF_CREATE = 1000h
|
||||
OF_PROMPT = 2000h
|
||||
OF_EXIST = 4000h
|
||||
OF_REOPEN = 8000h
|
||||
|
||||
; SetFilePointer methods
|
||||
|
||||
FILE_BEGIN = 0
|
||||
FILE_CURRENT = 1
|
||||
FILE_END = 2
|
||||
|
||||
; File attributes
|
||||
|
||||
FILE_ATTRIBUTE_READONLY = 001h
|
||||
FILE_ATTRIBUTE_HIDDEN = 002h
|
||||
FILE_ATTRIBUTE_SYSTEM = 004h
|
||||
FILE_ATTRIBUTE_DIRECTORY = 010h
|
||||
FILE_ATTRIBUTE_ARCHIVE = 020h
|
||||
FILE_ATTRIBUTE_NORMAL = 080h
|
||||
FILE_ATTRIBUTE_TEMPORARY = 100h
|
||||
FILE_ATTRIBUTE_COMPRESSED = 800h
|
||||
|
||||
; File flags
|
||||
|
||||
FILE_FLAG_WRITE_THROUGH = 80000000h
|
||||
FILE_FLAG_OVERLAPPED = 40000000h
|
||||
FILE_FLAG_NO_BUFFERING = 20000000h
|
||||
FILE_FLAG_RANDOM_ACCESS = 10000000h
|
||||
FILE_FLAG_SEQUENTIAL_SCAN = 08000000h
|
||||
FILE_FLAG_DELETE_ON_CLOSE = 04000000h
|
||||
FILE_FLAG_BACKUP_SEMANTICS = 02000000h
|
||||
FILE_FLAG_POSIX_SEMANTICS = 01000000h
|
||||
|
||||
; Notify filters
|
||||
|
||||
FILE_NOTIFY_CHANGE_FILE_NAME = 001h
|
||||
FILE_NOTIFY_CHANGE_DIR_NAME = 002h
|
||||
FILE_NOTIFY_CHANGE_ATTRIBUTES = 004h
|
||||
FILE_NOTIFY_CHANGE_SIZE = 008h
|
||||
FILE_NOTIFY_CHANGE_LAST_WRITE = 010h
|
||||
FILE_NOTIFY_CHANGE_SECURITY = 100h
|
||||
|
||||
; File types
|
||||
|
||||
FILE_TYPE_UNKNOWN = 0
|
||||
FILE_TYPE_DISK = 1
|
||||
FILE_TYPE_CHAR = 2
|
||||
FILE_TYPE_PIPE = 3
|
||||
FILE_TYPE_REMOTE = 8000h
|
||||
|
||||
; LockFileEx flags
|
||||
|
||||
LOCKFILE_FAIL_IMMEDIATELY = 1
|
||||
LOCKFILE_EXCLUSIVE_LOCK = 2
|
||||
|
||||
; MoveFileEx flags
|
||||
|
||||
MOVEFILE_REPLACE_EXISTING = 1
|
||||
MOVEFILE_COPY_ALLOWED = 2
|
||||
MOVEFILE_DELAY_UNTIL_REBOOT = 4
|
||||
MOVEFILE_WRITE_THROUGH = 8
|
||||
|
||||
; FindFirstFileEx flags
|
||||
|
||||
FIND_FIRST_EX_CASE_SENSITIVE = 1
|
||||
|
||||
; Device handles
|
||||
|
||||
INVALID_HANDLE_VALUE = -1
|
||||
STD_INPUT_HANDLE = -10
|
||||
STD_OUTPUT_HANDLE = -11
|
||||
STD_ERROR_HANDLE = -12
|
||||
|
||||
; DuplicateHandle options
|
||||
|
||||
DUPLICATE_CLOSE_SOURCE = 1
|
||||
DUPLICATE_SAME_ACCESS = 2
|
||||
|
||||
; File mapping acccess rights
|
||||
|
||||
SECTION_QUERY = 01h
|
||||
SECTION_MAP_WRITE = 02h
|
||||
SECTION_MAP_READ = 04h
|
||||
SECTION_MAP_EXECUTE = 08h
|
||||
SECTION_EXTEND_SIZE = 10h
|
||||
SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SECTION_QUERY or SECTION_MAP_WRITE or SECTION_MAP_READ or SECTION_MAP_EXECUTE or SECTION_EXTEND_SIZE
|
||||
FILE_MAP_COPY = SECTION_QUERY
|
||||
FILE_MAP_WRITE = SECTION_MAP_WRITE
|
||||
FILE_MAP_READ = SECTION_MAP_READ
|
||||
FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS
|
||||
|
||||
; File system flags
|
||||
|
||||
FILE_CASE_SENSITIVE_SEARCH = 0001h
|
||||
FILE_CASE_PRESERVED_NAMES = 0002h
|
||||
FILE_UNICODE_ON_DISK = 0004h
|
||||
FILE_PERSISTENT_ACLS = 0008h
|
||||
FILE_FILE_COMPRESSION = 0010h
|
||||
FILE_VOLUME_IS_COMPRESSED = 8000h
|
||||
FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMES
|
||||
FS_CASE_SENSITIVE = FILE_CASE_SENSITIVE_SEARCH
|
||||
FS_UNICODE_STORED_ON_DISK = FILE_UNICODE_ON_DISK
|
||||
FS_PERSISTENT_ACLS = FILE_PERSISTENT_ACLS
|
||||
|
||||
; Drive types
|
||||
|
||||
DRIVE_UNKNOWN = 0
|
||||
DRIVE_NO_ROOT_DIR = 1
|
||||
DRIVE_REMOVABLE = 2
|
||||
DRIVE_FIXED = 3
|
||||
DRIVE_REMOTE = 4
|
||||
DRIVE_CDROM = 5
|
||||
DRIVE_RAMDISK = 6
|
||||
|
||||
; Pipe modes
|
||||
|
||||
PIPE_ACCESS_INBOUND = 1
|
||||
PIPE_ACCESS_OUTBOUND = 2
|
||||
PIPE_ACCESS_DUPLEX = 3
|
||||
PIPE_CLIENT_END = 0
|
||||
PIPE_SERVER_END = 1
|
||||
PIPE_WAIT = 0
|
||||
PIPE_NOWAIT = 1
|
||||
PIPE_READMODE_BYTE = 0
|
||||
PIPE_READMODE_MESSAGE = 2
|
||||
PIPE_TYPE_BYTE = 0
|
||||
PIPE_TYPE_MESSAGE = 4
|
||||
PIPE_UNLIMITED_INSTANCES = 255
|
||||
|
||||
; Global memory flags
|
||||
|
||||
GMEM_FIXED = 0000h
|
||||
GMEM_MOVEABLE = 0002h
|
||||
GMEM_NOCOMPACT = 0010h
|
||||
GMEM_NODISCARD = 0020h
|
||||
GMEM_ZEROINIT = 0040h
|
||||
GMEM_MODIFY = 0080h
|
||||
GMEM_DISCARDABLE = 0100h
|
||||
GMEM_NOT_BANKED = 1000h
|
||||
GMEM_SHARE = 2000h
|
||||
GMEM_DDESHARE = 2000h
|
||||
GMEM_NOTIFY = 4000h
|
||||
GMEM_LOWER = GMEM_NOT_BANKED
|
||||
GMEM_VALID_FLAGS = 7F72h
|
||||
GMEM_INVALID_HANDLE = 8000h
|
||||
GMEM_DISCARDED = 4000h
|
||||
GMEM_LOCKCOUNT = 0FFh
|
||||
GHND = GMEM_MOVEABLE + GMEM_ZEROINIT
|
||||
GPTR = GMEM_FIXED + GMEM_ZEROINIT
|
||||
|
||||
; Local memory flags
|
||||
|
||||
LMEM_FIXED = 0000h
|
||||
LMEM_MOVEABLE = 0002h
|
||||
LMEM_NOCOMPACT = 0010h
|
||||
LMEM_NODISCARD = 0020h
|
||||
LMEM_ZEROINIT = 0040h
|
||||
LMEM_MODIFY = 0080h
|
||||
LMEM_DISCARDABLE = 0F00h
|
||||
LMEM_VALID_FLAGS = 0F72h
|
||||
LMEM_INVALID_HANDLE = 8000h
|
||||
LHND = LMEM_MOVEABLE + LMEM_ZEROINIT
|
||||
LPTR = LMEM_FIXED + LMEM_ZEROINIT
|
||||
LMEM_DISCARDED = 4000h
|
||||
LMEM_LOCKCOUNT = 00FFh
|
||||
|
||||
; Page access flags
|
||||
|
||||
PAGE_NOACCESS = 001h
|
||||
PAGE_READONLY = 002h
|
||||
PAGE_READWRITE = 004h
|
||||
PAGE_WRITECOPY = 008h
|
||||
PAGE_EXECUTE = 010h
|
||||
PAGE_EXECUTE_READ = 020h
|
||||
PAGE_EXECUTE_READWRITE = 040h
|
||||
PAGE_EXECUTE_WRITECOPY = 080h
|
||||
PAGE_GUARD = 100h
|
||||
PAGE_NOCACHE = 200h
|
||||
|
||||
; Memory allocation flags
|
||||
|
||||
MEM_COMMIT = 001000h
|
||||
MEM_RESERVE = 002000h
|
||||
MEM_DECOMMIT = 004000h
|
||||
MEM_RELEASE = 008000h
|
||||
MEM_FREE = 010000h
|
||||
MEM_PRIVATE = 020000h
|
||||
MEM_MAPPED = 040000h
|
||||
MEM_RESET = 080000h
|
||||
MEM_TOP_DOWN = 100000h
|
||||
|
||||
; Heap allocation flags
|
||||
|
||||
HEAP_NO_SERIALIZE = 1
|
||||
HEAP_GENERATE_EXCEPTIONS = 4
|
||||
HEAP_ZERO_MEMORY = 8
|
||||
|
||||
; Platform identifiers
|
||||
|
||||
VER_PLATFORM_WIN32s = 0
|
||||
VER_PLATFORM_WIN32_WINDOWS = 1
|
||||
VER_PLATFORM_WIN32_NT = 2
|
||||
|
||||
; GetBinaryType return values
|
||||
|
||||
SCS_32BIT_BINARY = 0
|
||||
SCS_DOS_BINARY = 1
|
||||
SCS_WOW_BINARY = 2
|
||||
SCS_PIF_BINARY = 3
|
||||
SCS_POSIX_BINARY = 4
|
||||
SCS_OS216_BINARY = 5
|
||||
|
||||
; CreateProcess flags
|
||||
|
||||
DEBUG_PROCESS = 001h
|
||||
DEBUG_ONLY_THIS_PROCESS = 002h
|
||||
CREATE_SUSPENDED = 004h
|
||||
DETACHED_PROCESS = 008h
|
||||
CREATE_NEW_CONSOLE = 010h
|
||||
NORMAL_PRIORITY_CLASS = 020h
|
||||
IDLE_PRIORITY_CLASS = 040h
|
||||
HIGH_PRIORITY_CLASS = 080h
|
||||
REALTIME_PRIORITY_CLASS = 100h
|
||||
CREATE_NEW_PROCESS_GROUP = 200h
|
||||
CREATE_SEPARATE_WOW_VDM = 800h
|
||||
|
||||
; Thread priority values
|
||||
|
||||
THREAD_BASE_PRIORITY_MIN = -2
|
||||
THREAD_BASE_PRIORITY_MAX = 2
|
||||
THREAD_BASE_PRIORITY_LOWRT = 15
|
||||
THREAD_BASE_PRIORITY_IDLE = -15
|
||||
THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
|
||||
THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST + 1
|
||||
THREAD_PRIORITY_NORMAL = 0
|
||||
THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
|
||||
THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST - 1
|
||||
THREAD_PRIORITY_ERROR_RETURN = 7FFFFFFFh
|
||||
THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
|
||||
THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
|
||||
|
||||
; Startup flags
|
||||
|
||||
STARTF_USESHOWWINDOW = 001h
|
||||
STARTF_USESIZE = 002h
|
||||
STARTF_USEPOSITION = 004h
|
||||
STARTF_USECOUNTCHARS = 008h
|
||||
STARTF_USEFILLATTRIBUTE = 010h
|
||||
STARTF_RUNFULLSCREEN = 020h
|
||||
STARTF_FORCEONFEEDBACK = 040h
|
||||
STARTF_FORCEOFFFEEDBACK = 080h
|
||||
STARTF_USESTDHANDLES = 100h
|
||||
|
||||
; Shutdown flags
|
||||
|
||||
SHUTDOWN_NORETRY = 1h
|
||||
|
||||
; LoadLibraryEx flags
|
||||
|
||||
DONT_RESOLVE_DLL_REFERENCES = 1
|
||||
LOAD_LIBRARY_AS_DATAFILE = 2
|
||||
LOAD_WITH_ALTERED_SEARCH_PATH = 8
|
||||
|
||||
; DLL entry-point calls
|
||||
|
||||
DLL_PROCESS_DETACH = 0
|
||||
DLL_PROCESS_ATTACH = 1
|
||||
DLL_THREAD_ATTACH = 2
|
||||
DLL_THREAD_DETACH = 3
|
||||
|
||||
; Status codes
|
||||
|
||||
STATUS_WAIT_0 = 000000000h
|
||||
STATUS_ABANDONED_WAIT_0 = 000000080h
|
||||
STATUS_USER_APC = 0000000C0h
|
||||
STATUS_TIMEOUT = 000000102h
|
||||
STATUS_PENDING = 000000103h
|
||||
STATUS_DATATYPE_MISALIGNMENT = 080000002h
|
||||
STATUS_BREAKPOINT = 080000003h
|
||||
STATUS_SINGLE_STEP = 080000004h
|
||||
STATUS_ACCESS_VIOLATION = 0C0000005h
|
||||
STATUS_IN_PAGE_ERROR = 0C0000006h
|
||||
STATUS_NO_MEMORY = 0C0000017h
|
||||
STATUS_ILLEGAL_INSTRUCTION = 0C000001Dh
|
||||
STATUS_NONCONTINUABLE_EXCEPTION = 0C0000025h
|
||||
STATUS_INVALID_DISPOSITION = 0C0000026h
|
||||
STATUS_ARRAY_BOUNDS_EXCEEDED = 0C000008Ch
|
||||
STATUS_FLOAT_DENORMAL_OPERAND = 0C000008Dh
|
||||
STATUS_FLOAT_DIVIDE_BY_ZERO = 0C000008Eh
|
||||
STATUS_FLOAT_INEXACT_RESULT = 0C000008Fh
|
||||
STATUS_FLOAT_INVALID_OPERATION = 0C0000090h
|
||||
STATUS_FLOAT_OVERFLOW = 0C0000091h
|
||||
STATUS_FLOAT_STACK_CHECK = 0C0000092h
|
||||
STATUS_FLOAT_UNDERFLOW = 0C0000093h
|
||||
STATUS_INTEGER_DIVIDE_BY_ZERO = 0C0000094h
|
||||
STATUS_INTEGER_OVERFLOW = 0C0000095h
|
||||
STATUS_PRIVILEGED_INSTRUCTION = 0C0000096h
|
||||
STATUS_STACK_OVERFLOW = 0C00000FDh
|
||||
STATUS_CONTROL_C_EXIT = 0C000013Ah
|
||||
WAIT_FAILED = -1
|
||||
WAIT_OBJECT_0 = STATUS_WAIT_0
|
||||
WAIT_ABANDONED = STATUS_ABANDONED_WAIT_0
|
||||
WAIT_ABANDONED_0 = STATUS_ABANDONED_WAIT_0
|
||||
WAIT_TIMEOUT = STATUS_TIMEOUT
|
||||
WAIT_IO_COMPLETION = STATUS_USER_APC
|
||||
STILL_ACTIVE = STATUS_PENDING
|
||||
|
||||
; Exception codes
|
||||
|
||||
EXCEPTION_CONTINUABLE = 0
|
||||
EXCEPTION_NONCONTINUABLE = 1
|
||||
EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION
|
||||
EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT
|
||||
EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT
|
||||
EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP
|
||||
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED
|
||||
EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND
|
||||
EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO
|
||||
EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT
|
||||
EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION
|
||||
EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW
|
||||
EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK
|
||||
EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW
|
||||
EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO
|
||||
EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW
|
||||
EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION
|
||||
EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION
|
||||
EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR
|
||||
|
||||
; Registry options
|
||||
|
||||
REG_OPTION_RESERVED = 0
|
||||
REG_OPTION_NON_VOLATILE = 0
|
||||
REG_OPTION_VOLATILE = 1
|
||||
REG_OPTION_CREATE_LINK = 2
|
||||
REG_OPTION_BACKUP_RESTORE = 4
|
||||
REG_CREATED_NEW_KEY = 1
|
||||
REG_OPENED_EXISTING_KEY = 2
|
||||
REG_WHOLE_HIVE_VOLATILE = 1
|
||||
REG_REFRESH_HIVE = 2
|
||||
REG_NOTIFY_CHANGE_NAME = 1
|
||||
REG_NOTIFY_CHANGE_ATTRIBUTES = 2
|
||||
REG_NOTIFY_CHANGE_LAST_SET = 4
|
||||
REG_NOTIFY_CHANGE_SECURITY = 8
|
||||
REG_LEGAL_CHANGE_FILTER = REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_ATTRIBUTES or REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_SECURITY
|
||||
REG_LEGAL_OPTION = REG_OPTION_RESERVED or REG_OPTION_NON_VOLATILE or REG_OPTION_VOLATILE or REG_OPTION_CREATE_LINK or REG_OPTION_BACKUP_RESTORE
|
||||
REG_NONE = 0
|
||||
REG_SZ = 1
|
||||
REG_EXPAND_SZ = 2
|
||||
REG_BINARY = 3
|
||||
REG_DWORD = 4
|
||||
REG_DWORD_LITTLE_ENDIAN = 4
|
||||
REG_DWORD_BIG_ENDIAN = 5
|
||||
REG_LINK = 6
|
||||
REG_MULTI_SZ = 7
|
||||
REG_RESOURCE_LIST = 8
|
||||
REG_FULL_RESOURCE_DESCRIPTOR = 9
|
||||
REG_RESOURCE_REQUIREMENTS_LIST = 10
|
||||
|
||||
; Registry access modes
|
||||
|
||||
KEY_QUERY_VALUE = 1
|
||||
KEY_SET_VALUE = 2
|
||||
KEY_CREATE_SUB_KEY = 4
|
||||
KEY_ENUMERATE_SUB_KEYS = 8
|
||||
KEY_NOTIFY = 10h
|
||||
KEY_CREATE_LINK = 20h
|
||||
KEY_READ = STANDARD_RIGHTS_READ or KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS or KEY_NOTIFY and not SYNCHRONIZE
|
||||
KEY_WRITE = STANDARD_RIGHTS_WRITE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY and not SYNCHRONIZE
|
||||
KEY_EXECUTE = KEY_READ
|
||||
KEY_ALL_ACCESS = STANDARD_RIGHTS_ALL or KEY_QUERY_VALUE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY or KEY_ENUMERATE_SUB_KEYS or KEY_NOTIFY or KEY_CREATE_LINK and not SYNCHRONIZE
|
||||
|
||||
; Predefined registry keys
|
||||
|
||||
HKEY_CLASSES_ROOT = 80000000h
|
||||
HKEY_CURRENT_USER = 80000001h
|
||||
HKEY_LOCAL_MACHINE = 80000002h
|
||||
HKEY_USERS = 80000003h
|
||||
HKEY_PERFORMANCE_DATA = 80000004h
|
||||
HKEY_CURRENT_CONFIG = 80000005h
|
||||
HKEY_DYN_DATA = 80000006h
|
||||
|
||||
; FormatMessage flags
|
||||
|
||||
FORMAT_MESSAGE_ALLOCATE_BUFFER = 0100h
|
||||
FORMAT_MESSAGE_IGNORE_INSERTS = 0200h
|
||||
FORMAT_MESSAGE_FROM_STRING = 0400h
|
||||
FORMAT_MESSAGE_FROM_HMODULE = 0800h
|
||||
FORMAT_MESSAGE_FROM_SYSTEM = 1000h
|
||||
FORMAT_MESSAGE_ARGUMENT_ARRAY = 2000h
|
||||
FORMAT_MESSAGE_MAX_WIDTH_MASK = 00FFh
|
||||
|
||||
; Language identifiers
|
||||
|
||||
LANG_NEUTRAL = 00h
|
||||
LANG_BULGARIAN = 02h
|
||||
LANG_CHINESE = 04h
|
||||
LANG_CROATIAN = 1Ah
|
||||
LANG_CZECH = 05h
|
||||
LANG_DANISH = 06h
|
||||
LANG_DUTCH = 13h
|
||||
LANG_ENGLISH = 09h
|
||||
LANG_FINNISH = 0Bh
|
||||
LANG_FRENCH = 0Ch
|
||||
LANG_GERMAN = 07h
|
||||
LANG_GREEK = 08h
|
||||
LANG_HUNGARIAN = 0Eh
|
||||
LANG_ICELANDIC = 0Fh
|
||||
LANG_ITALIAN = 10h
|
||||
LANG_JAPANESE = 11h
|
||||
LANG_KOREAN = 12h
|
||||
LANG_NORWEGIAN = 14h
|
||||
LANG_POLISH = 15h
|
||||
LANG_PORTUGUESE = 16h
|
||||
LANG_ROMANIAN = 18h
|
||||
LANG_RUSSIAN = 19h
|
||||
LANG_SLOVAK = 1Bh
|
||||
LANG_SLOVENIAN = 24h
|
||||
LANG_SPANISH = 0Ah
|
||||
LANG_SWEDISH = 1Dh
|
||||
LANG_THAI = 1Eh
|
||||
LANG_TURKISH = 1Fh
|
||||
|
||||
; Sublanguage identifiers
|
||||
|
||||
SUBLANG_NEUTRAL = 00h shl 10
|
||||
SUBLANG_DEFAULT = 01h shl 10
|
||||
SUBLANG_SYS_DEFAULT = 02h shl 10
|
||||
SUBLANG_CHINESE_TRADITIONAL = 01h shl 10
|
||||
SUBLANG_CHINESE_SIMPLIFIED = 02h shl 10
|
||||
SUBLANG_CHINESE_HONGKONG = 03h shl 10
|
||||
SUBLANG_CHINESE_SINGAPORE = 04h shl 10
|
||||
SUBLANG_DUTCH = 01h shl 10
|
||||
SUBLANG_DUTCH_BELGIAN = 02h shl 10
|
||||
SUBLANG_ENGLISH_US = 01h shl 10
|
||||
SUBLANG_ENGLISH_UK = 02h shl 10
|
||||
SUBLANG_ENGLISH_AUS = 03h shl 10
|
||||
SUBLANG_ENGLISH_CAN = 04h shl 10
|
||||
SUBLANG_ENGLISH_NZ = 05h shl 10
|
||||
SUBLANG_ENGLISH_EIRE = 06h shl 10
|
||||
SUBLANG_FRENCH = 01h shl 10
|
||||
SUBLANG_FRENCH_BELGIAN = 02h shl 10
|
||||
SUBLANG_FRENCH_CANADIAN = 03h shl 10
|
||||
SUBLANG_FRENCH_SWISS = 04h shl 10
|
||||
SUBLANG_GERMAN = 01h shl 10
|
||||
SUBLANG_GERMAN_SWISS = 02h shl 10
|
||||
SUBLANG_GERMAN_AUSTRIAN = 03h shl 10
|
||||
SUBLANG_ITALIAN = 01h shl 10
|
||||
SUBLANG_ITALIAN_SWISS = 02h shl 10
|
||||
SUBLANG_NORWEGIAN_BOKMAL = 01h shl 10
|
||||
SUBLANG_NORWEGIAN_NYNORSK = 02h shl 10
|
||||
SUBLANG_PORTUGUESE = 02h shl 10
|
||||
SUBLANG_PORTUGUESE_BRAZILIAN = 01h shl 10
|
||||
SUBLANG_SPANISH = 01h shl 10
|
||||
SUBLANG_SPANISH_MEXICAN = 02h shl 10
|
||||
SUBLANG_SPANISH_MODERN = 03h shl 10
|
||||
|
||||
; Sorting identifiers
|
||||
|
||||
SORT_DEFAULT = 0 shl 16
|
||||
SORT_JAPANESE_XJIS = 0 shl 16
|
||||
SORT_JAPANESE_UNICODE = 1 shl 16
|
||||
SORT_CHINESE_BIG5 = 0 shl 16
|
||||
SORT_CHINESE_PRCP = 0 shl 16
|
||||
SORT_CHINESE_UNICODE = 1 shl 16
|
||||
SORT_CHINESE_PRC = 2 shl 16
|
||||
SORT_CHINESE_BOPOMOFO = 3 shl 16
|
||||
SORT_KOREAN_KSC = 0 shl 16
|
||||
SORT_KOREAN_UNICODE = 1 shl 16
|
||||
SORT_GERMAN_PHONE_BOOK = 1 shl 16
|
||||
SORT_HUNGARIAN_DEFAULT = 0 shl 16
|
||||
SORT_HUNGARIAN_TECHNICAL = 1 shl 16
|
||||
|
||||
; Code pages
|
||||
|
||||
CP_ACP = 0 ; default to ANSI code page
|
||||
CP_OEMCP = 1 ; default to OEM code page
|
||||
CP_MACCP = 2 ; default to MAC code page
|
||||
CP_THREAD_ACP = 3 ; current thread's ANSI code page
|
||||
CP_SYMBOL = 42 ; SYMBOL translations
|
||||
CP_UTF7 = 65000 ; UTF-7 translation
|
||||
CP_UTF8 = 65001 ; UTF-8 translation
|
||||
|
||||
; Resource types
|
||||
|
||||
RT_CURSOR = 1
|
||||
RT_BITMAP = 2
|
||||
RT_ICON = 3
|
||||
RT_MENU = 4
|
||||
RT_DIALOG = 5
|
||||
RT_STRING = 6
|
||||
RT_FONTDIR = 7
|
||||
RT_FONT = 8
|
||||
RT_ACCELERATOR = 9
|
||||
RT_RCDATA = 10
|
||||
RT_MESSAGETABLE = 11
|
||||
RT_GROUP_CURSOR = 12
|
||||
RT_GROUP_ICON = 14
|
||||
RT_VERSION = 16
|
||||
RT_DLGINCLUDE = 17
|
||||
RT_PLUGPLAY = 19
|
||||
RT_VXD = 20
|
||||
RT_ANICURSOR = 21
|
||||
RT_ANIICON = 22
|
||||
RT_HTML = 23
|
||||
RT_MANIFEST = 24
|
||||
|
||||
; Clipboard formats
|
||||
|
||||
CF_TEXT = 001h
|
||||
CF_BITMAP = 002h
|
||||
CF_METAFILEPICT = 003h
|
||||
CF_SYLK = 004h
|
||||
CF_DIF = 005h
|
||||
CF_TIFF = 006h
|
||||
CF_OEMTEXT = 007h
|
||||
CF_DIB = 008h
|
||||
CF_PALETTE = 009h
|
||||
CF_PENDATA = 00Ah
|
||||
CF_RIFF = 00Bh
|
||||
CF_WAVE = 00Ch
|
||||
CF_UNICODETEXT = 00Dh
|
||||
CF_ENHMETAFILE = 00Eh
|
||||
CF_HDROP = 00Fh
|
||||
CF_LOCALE = 010h
|
||||
CF_OWNERDISPLAY = 080h
|
||||
CF_DSPTEXT = 081h
|
||||
CF_DSPBITMAP = 082h
|
||||
CF_DSPMETAFILEPICT = 083h
|
||||
CF_DSPENHMETAFILE = 08Eh
|
||||
CF_PRIVATEFIRST = 200h
|
||||
CF_PRIVATELAST = 2FFh
|
||||
CF_GDIOBJFIRST = 300h
|
||||
CF_GDIOBJLAST = 3FFh
|
||||
|
||||
; OS types for version info
|
||||
|
||||
VOS_UNKNOWN = 00000000h
|
||||
VOS_DOS = 00010000h
|
||||
VOS_OS216 = 00020000h
|
||||
VOS_OS232 = 00030000h
|
||||
VOS_NT = 00040000h
|
||||
VOS__BASE = 00000000h
|
||||
VOS__WINDOWS16 = 00000001h
|
||||
VOS__PM16 = 00000002h
|
||||
VOS__PM32 = 00000003h
|
||||
VOS__WINDOWS32 = 00000004h
|
||||
VOS_DOS_WINDOWS16 = 00010001h
|
||||
VOS_DOS_WINDOWS32 = 00010004h
|
||||
VOS_OS216_PM16 = 00020002h
|
||||
VOS_OS232_PM32 = 00030003h
|
||||
VOS_NT_WINDOWS32 = 00040004h
|
||||
|
||||
; File types for version info
|
||||
|
||||
VFT_UNKNOWN = 00000000h
|
||||
VFT_APP = 00000001h
|
||||
VFT_DLL = 00000002h
|
||||
VFT_DRV = 00000003h
|
||||
VFT_FONT = 00000004h
|
||||
VFT_VXD = 00000005h
|
||||
VFT_STATIC_LIB = 00000007h
|
||||
|
||||
; File subtypes for version info
|
||||
|
||||
VFT2_UNKNOWN = 00000000h
|
||||
VFT2_DRV_PRINTER = 00000001h
|
||||
VFT2_DRV_KEYBOARD = 00000002h
|
||||
VFT2_DRV_LANGUAGE = 00000003h
|
||||
VFT2_DRV_DISPLAY = 00000004h
|
||||
VFT2_DRV_MOUSE = 00000005h
|
||||
VFT2_DRV_NETWORK = 00000006h
|
||||
VFT2_DRV_SYSTEM = 00000007h
|
||||
VFT2_DRV_INSTALLABLE = 00000008h
|
||||
VFT2_DRV_SOUND = 00000009h
|
||||
VFT2_DRV_COMM = 0000000Ah
|
||||
VFT2_DRV_INPUTMETHOD = 0000000Bh
|
||||
VFT2_DRV_VERSIONED_PRINTER = 0000000Ch
|
||||
VFT2_FONT_RASTER = 00000001h
|
||||
VFT2_FONT_VECTOR = 00000002h
|
||||
VFT2_FONT_TRUETYPE = 00000003h
|
||||
|
||||
; Console control signals
|
||||
|
||||
CTRL_C_EVENT = 0
|
||||
CTRL_BREAK_EVENT = 1
|
||||
CTRL_CLOSE_EVENT = 2
|
||||
CTRL_LOGOFF_EVENT = 5
|
||||
CTRL_SHUTDOWN_EVENT = 6
|
||||
|
||||
; Standard file handles
|
||||
|
||||
STD_INPUT_HANDLE = 0FFFFFFF6h
|
||||
STD_OUTPUT_HANDLE = 0FFFFFFF5h
|
||||
STD_ERROR_HANDLE = 0FFFFFFF4h
|
810
toolchain/fasm2/include/equates/kernel64.inc
Normal file
810
toolchain/fasm2/include/equates/kernel64.inc
Normal file
@ -0,0 +1,810 @@
|
||||
|
||||
; KERNEL32.DLL structures and constants
|
||||
|
||||
struct SYSTEM_INFO
|
||||
wProcessorArchitecture dw ?
|
||||
wReserved dw ?
|
||||
dwPageSize dd ?
|
||||
lpMinimumApplicationAddress dq ?
|
||||
lpMaximumApplicationAddress dq ?
|
||||
dwActiveProcessorMask dq ?
|
||||
dwNumberOfProcessors dd ?
|
||||
dwProcessorType dd ?
|
||||
dwAllocationGranularity dd ?
|
||||
wProcessorLevel dw ?
|
||||
wProcessorRevision dw ?
|
||||
ends
|
||||
|
||||
struct OSVERSIONINFO
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion TCHAR 128 dup (?)
|
||||
ends
|
||||
|
||||
struct OSVERSIONINFOA
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion db 128 dup (?)
|
||||
ends
|
||||
|
||||
struct OSVERSIONINFOW
|
||||
dwOSVersionInfoSize dd ?
|
||||
dwMajorVersion dd ?
|
||||
dwMinorVersion dd ?
|
||||
dwBuildNumber dd ?
|
||||
dwPlatformId dd ?
|
||||
szCSDVersion du 128 dup (?)
|
||||
ends
|
||||
|
||||
struct MEMORYSTATUS
|
||||
dwLength dd ?
|
||||
dwMemoryLoad dd ?
|
||||
dwTotalPhys dq ?
|
||||
dwAvailPhys dq ?
|
||||
dwTotalPageFile dq ?
|
||||
dwAvailPageFile dq ?
|
||||
dwTotalVirtual dq ?
|
||||
dwAvailVirtual dq ?
|
||||
ends
|
||||
|
||||
struct STARTUPINFO
|
||||
cb dd ?
|
||||
dd ?
|
||||
lpReserved dq ?
|
||||
lpDesktop dq ?
|
||||
lpTitle dq ?
|
||||
dwX dd ?
|
||||
dwY dd ?
|
||||
dwXSize dd ?
|
||||
dwYSize dd ?
|
||||
dwXCountChars dd ?
|
||||
dwYCountChars dd ?
|
||||
dwFillAttribute dd ?
|
||||
dwFlags dd ?
|
||||
wShowWindow dw ?
|
||||
cbReserved2 dw ?
|
||||
dd ?
|
||||
lpReserved2 dq ?
|
||||
hStdInput dq ?
|
||||
hStdOutput dq ?
|
||||
hStdError dq ?
|
||||
ends
|
||||
|
||||
struct PROCESS_INFORMATION
|
||||
hProcess dq ?
|
||||
hThread dq ?
|
||||
dwProcessId dd ?
|
||||
dwThreadId dd ?
|
||||
ends
|
||||
|
||||
struct FILETIME
|
||||
dwLowDateTime dd ?
|
||||
dwHighDateTime dd ?
|
||||
ends
|
||||
|
||||
struct SYSTEMTIME
|
||||
wYear dw ?
|
||||
wMonth dw ?
|
||||
wDayOfWeek dw ?
|
||||
wDay dw ?
|
||||
wHour dw ?
|
||||
wMinute dw ?
|
||||
wSecond dw ?
|
||||
wMilliseconds dw ?
|
||||
ends
|
||||
|
||||
struct BY_HANDLE_FILE_INFORMATION
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
dwVolumeSerialNumber dd ?
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
nNumberOfLinks dd ?
|
||||
nFileIndexHigh dd ?
|
||||
nFileIndexLow dd ?
|
||||
ends
|
||||
|
||||
struct WIN32_FIND_DATA
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName TCHAR MAX_PATH dup (?)
|
||||
cAlternateFileName TCHAR 14 dup (?)
|
||||
align 4
|
||||
ends
|
||||
|
||||
struct WIN32_FIND_DATAA
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName db MAX_PATH dup (?)
|
||||
cAlternateFileName db 14 dup (?)
|
||||
align 4
|
||||
ends
|
||||
|
||||
struct WIN32_FIND_DATAW
|
||||
dwFileAttributes dd ?
|
||||
ftCreationTime FILETIME
|
||||
ftLastAccessTime FILETIME
|
||||
ftLastWriteTime FILETIME
|
||||
nFileSizeHigh dd ?
|
||||
nFileSizeLow dd ?
|
||||
dwReserved0 dd ?
|
||||
dwReserved1 dd ?
|
||||
cFileName du MAX_PATH dup (?)
|
||||
cAlternateFileName du 14 dup (?)
|
||||
ends
|
||||
|
||||
; General constants
|
||||
|
||||
NULL = 0
|
||||
TRUE = 1
|
||||
FALSE = 0
|
||||
|
||||
; Maximum path length in characters
|
||||
|
||||
MAX_PATH = 260
|
||||
|
||||
; Access rights
|
||||
|
||||
DELETE_RIGHT = 00010000h
|
||||
READ_CONTROL = 00020000h
|
||||
WRITE_DAC = 00040000h
|
||||
WRITE_OWNER = 00080000h
|
||||
SYNCHRONIZE = 00100000h
|
||||
STANDARD_RIGHTS_READ = READ_CONTROL
|
||||
STANDARD_RIGHTS_WRITE = READ_CONTROL
|
||||
STANDARD_RIGHTS_EXECUTE = READ_CONTROL
|
||||
STANDARD_RIGHTS_REQUIRED = 000F0000h
|
||||
STANDARD_RIGHTS_ALL = 001F0000h
|
||||
SPECIFIC_RIGHTS_ALL = 0000FFFFh
|
||||
ACCESS_SYSTEM_SECURITY = 01000000h
|
||||
MAXIMUM_ALLOWED = 02000000h
|
||||
GENERIC_READ = 80000000h
|
||||
GENERIC_WRITE = 40000000h
|
||||
GENERIC_EXECUTE = 20000000h
|
||||
GENERIC_ALL = 10000000h
|
||||
PROCESS_TERMINATE = 00000001h
|
||||
PROCESS_CREATE_THREAD = 00000002h
|
||||
PROCESS_VM_OPERATION = 00000008h
|
||||
PROCESS_VM_READ = 00000010h
|
||||
PROCESS_VM_WRITE = 00000020h
|
||||
PROCESS_DUP_HANDLE = 00000040h
|
||||
PROCESS_CREATE_PROCESS = 00000080h
|
||||
PROCESS_SET_QUOTA = 00000100h
|
||||
PROCESS_SET_INFORMATION = 00000200h
|
||||
PROCESS_QUERY_INFORMATION = 00000400h
|
||||
PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or 0FFFh
|
||||
FILE_SHARE_READ = 00000001h
|
||||
FILE_SHARE_WRITE = 00000002h
|
||||
FILE_SHARE_DELETE = 00000004h
|
||||
|
||||
; CreateFile actions
|
||||
|
||||
CREATE_NEW = 1
|
||||
CREATE_ALWAYS = 2
|
||||
OPEN_EXISTING = 3
|
||||
OPEN_ALWAYS = 4
|
||||
TRUNCATE_EXISTING = 5
|
||||
|
||||
; OpenFile modes
|
||||
|
||||
OF_READ = 0000h
|
||||
OF_WRITE = 0001h
|
||||
OF_READWRITE = 0002h
|
||||
OF_SHARE_COMPAT = 0000h
|
||||
OF_SHARE_EXCLUSIVE = 0010h
|
||||
OF_SHARE_DENY_WRITE = 0020h
|
||||
OF_SHARE_DENY_READ = 0030h
|
||||
OF_SHARE_DENY_NONE = 0040h
|
||||
OF_PARSE = 0100h
|
||||
OF_DELETE = 0200h
|
||||
OF_VERIFY = 0400h
|
||||
OF_CANCEL = 0800h
|
||||
OF_CREATE = 1000h
|
||||
OF_PROMPT = 2000h
|
||||
OF_EXIST = 4000h
|
||||
OF_REOPEN = 8000h
|
||||
|
||||
; SetFilePointer methods
|
||||
|
||||
FILE_BEGIN = 0
|
||||
FILE_CURRENT = 1
|
||||
FILE_END = 2
|
||||
|
||||
; File attributes
|
||||
|
||||
FILE_ATTRIBUTE_READONLY = 001h
|
||||
FILE_ATTRIBUTE_HIDDEN = 002h
|
||||
FILE_ATTRIBUTE_SYSTEM = 004h
|
||||
FILE_ATTRIBUTE_DIRECTORY = 010h
|
||||
FILE_ATTRIBUTE_ARCHIVE = 020h
|
||||
FILE_ATTRIBUTE_NORMAL = 080h
|
||||
FILE_ATTRIBUTE_TEMPORARY = 100h
|
||||
FILE_ATTRIBUTE_COMPRESSED = 800h
|
||||
|
||||
; File flags
|
||||
|
||||
FILE_FLAG_WRITE_THROUGH = 80000000h
|
||||
FILE_FLAG_OVERLAPPED = 40000000h
|
||||
FILE_FLAG_NO_BUFFERING = 20000000h
|
||||
FILE_FLAG_RANDOM_ACCESS = 10000000h
|
||||
FILE_FLAG_SEQUENTIAL_SCAN = 08000000h
|
||||
FILE_FLAG_DELETE_ON_CLOSE = 04000000h
|
||||
FILE_FLAG_BACKUP_SEMANTICS = 02000000h
|
||||
FILE_FLAG_POSIX_SEMANTICS = 01000000h
|
||||
|
||||
; Notify filters
|
||||
|
||||
FILE_NOTIFY_CHANGE_FILE_NAME = 001h
|
||||
FILE_NOTIFY_CHANGE_DIR_NAME = 002h
|
||||
FILE_NOTIFY_CHANGE_ATTRIBUTES = 004h
|
||||
FILE_NOTIFY_CHANGE_SIZE = 008h
|
||||
FILE_NOTIFY_CHANGE_LAST_WRITE = 010h
|
||||
FILE_NOTIFY_CHANGE_SECURITY = 100h
|
||||
|
||||
; File types
|
||||
|
||||
FILE_TYPE_UNKNOWN = 0
|
||||
FILE_TYPE_DISK = 1
|
||||
FILE_TYPE_CHAR = 2
|
||||
FILE_TYPE_PIPE = 3
|
||||
FILE_TYPE_REMOTE = 8000h
|
||||
|
||||
; LockFileEx flags
|
||||
|
||||
LOCKFILE_FAIL_IMMEDIATELY = 1
|
||||
LOCKFILE_EXCLUSIVE_LOCK = 2
|
||||
|
||||
; MoveFileEx flags
|
||||
|
||||
MOVEFILE_REPLACE_EXISTING = 1
|
||||
MOVEFILE_COPY_ALLOWED = 2
|
||||
MOVEFILE_DELAY_UNTIL_REBOOT = 4
|
||||
MOVEFILE_WRITE_THROUGH = 8
|
||||
|
||||
; FindFirstFileEx flags
|
||||
|
||||
FIND_FIRST_EX_CASE_SENSITIVE = 1
|
||||
|
||||
; Device handles
|
||||
|
||||
INVALID_HANDLE_VALUE = -1
|
||||
STD_INPUT_HANDLE = -10
|
||||
STD_OUTPUT_HANDLE = -11
|
||||
STD_ERROR_HANDLE = -12
|
||||
|
||||
; DuplicateHandle options
|
||||
|
||||
DUPLICATE_CLOSE_SOURCE = 1
|
||||
DUPLICATE_SAME_ACCESS = 2
|
||||
|
||||
; File mapping acccess rights
|
||||
|
||||
SECTION_QUERY = 01h
|
||||
SECTION_MAP_WRITE = 02h
|
||||
SECTION_MAP_READ = 04h
|
||||
SECTION_MAP_EXECUTE = 08h
|
||||
SECTION_EXTEND_SIZE = 10h
|
||||
SECTION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SECTION_QUERY or SECTION_MAP_WRITE or SECTION_MAP_READ or SECTION_MAP_EXECUTE or SECTION_EXTEND_SIZE
|
||||
FILE_MAP_COPY = SECTION_QUERY
|
||||
FILE_MAP_WRITE = SECTION_MAP_WRITE
|
||||
FILE_MAP_READ = SECTION_MAP_READ
|
||||
FILE_MAP_ALL_ACCESS = SECTION_ALL_ACCESS
|
||||
|
||||
; File system flags
|
||||
|
||||
FILE_CASE_SENSITIVE_SEARCH = 0001h
|
||||
FILE_CASE_PRESERVED_NAMES = 0002h
|
||||
FILE_UNICODE_ON_DISK = 0004h
|
||||
FILE_PERSISTENT_ACLS = 0008h
|
||||
FILE_FILE_COMPRESSION = 0010h
|
||||
FILE_VOLUME_IS_COMPRESSED = 8000h
|
||||
FS_CASE_IS_PRESERVED = FILE_CASE_PRESERVED_NAMES
|
||||
FS_CASE_SENSITIVE = FILE_CASE_SENSITIVE_SEARCH
|
||||
FS_UNICODE_STORED_ON_DISK = FILE_UNICODE_ON_DISK
|
||||
FS_PERSISTENT_ACLS = FILE_PERSISTENT_ACLS
|
||||
|
||||
; Drive types
|
||||
|
||||
DRIVE_UNKNOWN = 0
|
||||
DRIVE_NO_ROOT_DIR = 1
|
||||
DRIVE_REMOVABLE = 2
|
||||
DRIVE_FIXED = 3
|
||||
DRIVE_REMOTE = 4
|
||||
DRIVE_CDROM = 5
|
||||
DRIVE_RAMDISK = 6
|
||||
|
||||
; Pipe modes
|
||||
|
||||
PIPE_ACCESS_INBOUND = 1
|
||||
PIPE_ACCESS_OUTBOUND = 2
|
||||
PIPE_ACCESS_DUPLEX = 3
|
||||
PIPE_CLIENT_END = 0
|
||||
PIPE_SERVER_END = 1
|
||||
PIPE_WAIT = 0
|
||||
PIPE_NOWAIT = 1
|
||||
PIPE_READMODE_BYTE = 0
|
||||
PIPE_READMODE_MESSAGE = 2
|
||||
PIPE_TYPE_BYTE = 0
|
||||
PIPE_TYPE_MESSAGE = 4
|
||||
PIPE_UNLIMITED_INSTANCES = 255
|
||||
|
||||
; Global memory flags
|
||||
|
||||
GMEM_FIXED = 0000h
|
||||
GMEM_MOVEABLE = 0002h
|
||||
GMEM_NOCOMPACT = 0010h
|
||||
GMEM_NODISCARD = 0020h
|
||||
GMEM_ZEROINIT = 0040h
|
||||
GMEM_MODIFY = 0080h
|
||||
GMEM_DISCARDABLE = 0100h
|
||||
GMEM_NOT_BANKED = 1000h
|
||||
GMEM_SHARE = 2000h
|
||||
GMEM_DDESHARE = 2000h
|
||||
GMEM_NOTIFY = 4000h
|
||||
GMEM_LOWER = GMEM_NOT_BANKED
|
||||
GMEM_VALID_FLAGS = 7F72h
|
||||
GMEM_INVALID_HANDLE = 8000h
|
||||
GMEM_DISCARDED = 4000h
|
||||
GMEM_LOCKCOUNT = 0FFh
|
||||
GHND = GMEM_MOVEABLE + GMEM_ZEROINIT
|
||||
GPTR = GMEM_FIXED + GMEM_ZEROINIT
|
||||
|
||||
; Local memory flags
|
||||
|
||||
LMEM_FIXED = 0000h
|
||||
LMEM_MOVEABLE = 0002h
|
||||
LMEM_NOCOMPACT = 0010h
|
||||
LMEM_NODISCARD = 0020h
|
||||
LMEM_ZEROINIT = 0040h
|
||||
LMEM_MODIFY = 0080h
|
||||
LMEM_DISCARDABLE = 0F00h
|
||||
LMEM_VALID_FLAGS = 0F72h
|
||||
LMEM_INVALID_HANDLE = 8000h
|
||||
LHND = LMEM_MOVEABLE + LMEM_ZEROINIT
|
||||
LPTR = LMEM_FIXED + LMEM_ZEROINIT
|
||||
LMEM_DISCARDED = 4000h
|
||||
LMEM_LOCKCOUNT = 00FFh
|
||||
|
||||
; Page access flags
|
||||
|
||||
PAGE_NOACCESS = 001h
|
||||
PAGE_READONLY = 002h
|
||||
PAGE_READWRITE = 004h
|
||||
PAGE_WRITECOPY = 008h
|
||||
PAGE_EXECUTE = 010h
|
||||
PAGE_EXECUTE_READ = 020h
|
||||
PAGE_EXECUTE_READWRITE = 040h
|
||||
PAGE_EXECUTE_WRITECOPY = 080h
|
||||
PAGE_GUARD = 100h
|
||||
PAGE_NOCACHE = 200h
|
||||
|
||||
; Memory allocation flags
|
||||
|
||||
MEM_COMMIT = 001000h
|
||||
MEM_RESERVE = 002000h
|
||||
MEM_DECOMMIT = 004000h
|
||||
MEM_RELEASE = 008000h
|
||||
MEM_FREE = 010000h
|
||||
MEM_PRIVATE = 020000h
|
||||
MEM_MAPPED = 040000h
|
||||
MEM_RESET = 080000h
|
||||
MEM_TOP_DOWN = 100000h
|
||||
|
||||
; Heap allocation flags
|
||||
|
||||
HEAP_NO_SERIALIZE = 1
|
||||
HEAP_GENERATE_EXCEPTIONS = 4
|
||||
HEAP_ZERO_MEMORY = 8
|
||||
|
||||
; Platform identifiers
|
||||
|
||||
VER_PLATFORM_WIN32s = 0
|
||||
VER_PLATFORM_WIN32_WINDOWS = 1
|
||||
VER_PLATFORM_WIN32_NT = 2
|
||||
|
||||
; GetBinaryType return values
|
||||
|
||||
SCS_32BIT_BINARY = 0
|
||||
SCS_DOS_BINARY = 1
|
||||
SCS_WOW_BINARY = 2
|
||||
SCS_PIF_BINARY = 3
|
||||
SCS_POSIX_BINARY = 4
|
||||
SCS_OS216_BINARY = 5
|
||||
|
||||
; CreateProcess flags
|
||||
|
||||
DEBUG_PROCESS = 001h
|
||||
DEBUG_ONLY_THIS_PROCESS = 002h
|
||||
CREATE_SUSPENDED = 004h
|
||||
DETACHED_PROCESS = 008h
|
||||
CREATE_NEW_CONSOLE = 010h
|
||||
NORMAL_PRIORITY_CLASS = 020h
|
||||
IDLE_PRIORITY_CLASS = 040h
|
||||
HIGH_PRIORITY_CLASS = 080h
|
||||
REALTIME_PRIORITY_CLASS = 100h
|
||||
CREATE_NEW_PROCESS_GROUP = 200h
|
||||
CREATE_SEPARATE_WOW_VDM = 800h
|
||||
|
||||
; Thread priority values
|
||||
|
||||
THREAD_BASE_PRIORITY_MIN = -2
|
||||
THREAD_BASE_PRIORITY_MAX = 2
|
||||
THREAD_BASE_PRIORITY_LOWRT = 15
|
||||
THREAD_BASE_PRIORITY_IDLE = -15
|
||||
THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN
|
||||
THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST + 1
|
||||
THREAD_PRIORITY_NORMAL = 0
|
||||
THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX
|
||||
THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST - 1
|
||||
THREAD_PRIORITY_ERROR_RETURN = 7FFFFFFFh
|
||||
THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT
|
||||
THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE
|
||||
|
||||
; Startup flags
|
||||
|
||||
STARTF_USESHOWWINDOW = 001h
|
||||
STARTF_USESIZE = 002h
|
||||
STARTF_USEPOSITION = 004h
|
||||
STARTF_USECOUNTCHARS = 008h
|
||||
STARTF_USEFILLATTRIBUTE = 010h
|
||||
STARTF_RUNFULLSCREEN = 020h
|
||||
STARTF_FORCEONFEEDBACK = 040h
|
||||
STARTF_FORCEOFFFEEDBACK = 080h
|
||||
STARTF_USESTDHANDLES = 100h
|
||||
|
||||
; Shutdown flags
|
||||
|
||||
SHUTDOWN_NORETRY = 1h
|
||||
|
||||
; LoadLibraryEx flags
|
||||
|
||||
DONT_RESOLVE_DLL_REFERENCES = 1
|
||||
LOAD_LIBRARY_AS_DATAFILE = 2
|
||||
LOAD_WITH_ALTERED_SEARCH_PATH = 8
|
||||
|
||||
; DLL entry-point calls
|
||||
|
||||
DLL_PROCESS_DETACH = 0
|
||||
DLL_PROCESS_ATTACH = 1
|
||||
DLL_THREAD_ATTACH = 2
|
||||
DLL_THREAD_DETACH = 3
|
||||
|
||||
; Status codes
|
||||
|
||||
STATUS_WAIT_0 = 000000000h
|
||||
STATUS_ABANDONED_WAIT_0 = 000000080h
|
||||
STATUS_USER_APC = 0000000C0h
|
||||
STATUS_TIMEOUT = 000000102h
|
||||
STATUS_PENDING = 000000103h
|
||||
STATUS_DATATYPE_MISALIGNMENT = 080000002h
|
||||
STATUS_BREAKPOINT = 080000003h
|
||||
STATUS_SINGLE_STEP = 080000004h
|
||||
STATUS_ACCESS_VIOLATION = 0C0000005h
|
||||
STATUS_IN_PAGE_ERROR = 0C0000006h
|
||||
STATUS_NO_MEMORY = 0C0000017h
|
||||
STATUS_ILLEGAL_INSTRUCTION = 0C000001Dh
|
||||
STATUS_NONCONTINUABLE_EXCEPTION = 0C0000025h
|
||||
STATUS_INVALID_DISPOSITION = 0C0000026h
|
||||
STATUS_ARRAY_BOUNDS_EXCEEDED = 0C000008Ch
|
||||
STATUS_FLOAT_DENORMAL_OPERAND = 0C000008Dh
|
||||
STATUS_FLOAT_DIVIDE_BY_ZERO = 0C000008Eh
|
||||
STATUS_FLOAT_INEXACT_RESULT = 0C000008Fh
|
||||
STATUS_FLOAT_INVALID_OPERATION = 0C0000090h
|
||||
STATUS_FLOAT_OVERFLOW = 0C0000091h
|
||||
STATUS_FLOAT_STACK_CHECK = 0C0000092h
|
||||
STATUS_FLOAT_UNDERFLOW = 0C0000093h
|
||||
STATUS_INTEGER_DIVIDE_BY_ZERO = 0C0000094h
|
||||
STATUS_INTEGER_OVERFLOW = 0C0000095h
|
||||
STATUS_PRIVILEGED_INSTRUCTION = 0C0000096h
|
||||
STATUS_STACK_OVERFLOW = 0C00000FDh
|
||||
STATUS_CONTROL_C_EXIT = 0C000013Ah
|
||||
WAIT_FAILED = -1
|
||||
WAIT_OBJECT_0 = STATUS_WAIT_0
|
||||
WAIT_ABANDONED = STATUS_ABANDONED_WAIT_0
|
||||
WAIT_ABANDONED_0 = STATUS_ABANDONED_WAIT_0
|
||||
WAIT_TIMEOUT = STATUS_TIMEOUT
|
||||
WAIT_IO_COMPLETION = STATUS_USER_APC
|
||||
STILL_ACTIVE = STATUS_PENDING
|
||||
|
||||
; Exception codes
|
||||
|
||||
EXCEPTION_CONTINUABLE = 0
|
||||
EXCEPTION_NONCONTINUABLE = 1
|
||||
EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION
|
||||
EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT
|
||||
EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT
|
||||
EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP
|
||||
EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED
|
||||
EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND
|
||||
EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO
|
||||
EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT
|
||||
EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION
|
||||
EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW
|
||||
EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK
|
||||
EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW
|
||||
EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO
|
||||
EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW
|
||||
EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION
|
||||
EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION
|
||||
EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR
|
||||
|
||||
; Registry options
|
||||
|
||||
REG_OPTION_RESERVED = 0
|
||||
REG_OPTION_NON_VOLATILE = 0
|
||||
REG_OPTION_VOLATILE = 1
|
||||
REG_OPTION_CREATE_LINK = 2
|
||||
REG_OPTION_BACKUP_RESTORE = 4
|
||||
REG_CREATED_NEW_KEY = 1
|
||||
REG_OPENED_EXISTING_KEY = 2
|
||||
REG_WHOLE_HIVE_VOLATILE = 1
|
||||
REG_REFRESH_HIVE = 2
|
||||
REG_NOTIFY_CHANGE_NAME = 1
|
||||
REG_NOTIFY_CHANGE_ATTRIBUTES = 2
|
||||
REG_NOTIFY_CHANGE_LAST_SET = 4
|
||||
REG_NOTIFY_CHANGE_SECURITY = 8
|
||||
REG_LEGAL_CHANGE_FILTER = REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_ATTRIBUTES or REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_SECURITY
|
||||
REG_LEGAL_OPTION = REG_OPTION_RESERVED or REG_OPTION_NON_VOLATILE or REG_OPTION_VOLATILE or REG_OPTION_CREATE_LINK or REG_OPTION_BACKUP_RESTORE
|
||||
REG_NONE = 0
|
||||
REG_SZ = 1
|
||||
REG_EXPAND_SZ = 2
|
||||
REG_BINARY = 3
|
||||
REG_DWORD = 4
|
||||
REG_DWORD_LITTLE_ENDIAN = 4
|
||||
REG_DWORD_BIG_ENDIAN = 5
|
||||
REG_LINK = 6
|
||||
REG_MULTI_SZ = 7
|
||||
REG_RESOURCE_LIST = 8
|
||||
REG_FULL_RESOURCE_DESCRIPTOR = 9
|
||||
REG_RESOURCE_REQUIREMENTS_LIST = 10
|
||||
|
||||
; Registry access modes
|
||||
|
||||
KEY_QUERY_VALUE = 1
|
||||
KEY_SET_VALUE = 2
|
||||
KEY_CREATE_SUB_KEY = 4
|
||||
KEY_ENUMERATE_SUB_KEYS = 8
|
||||
KEY_NOTIFY = 10h
|
||||
KEY_CREATE_LINK = 20h
|
||||
KEY_READ = STANDARD_RIGHTS_READ or KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS or KEY_NOTIFY and not SYNCHRONIZE
|
||||
KEY_WRITE = STANDARD_RIGHTS_WRITE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY and not SYNCHRONIZE
|
||||
KEY_EXECUTE = KEY_READ
|
||||
KEY_ALL_ACCESS = STANDARD_RIGHTS_ALL or KEY_QUERY_VALUE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY or KEY_ENUMERATE_SUB_KEYS or KEY_NOTIFY or KEY_CREATE_LINK and not SYNCHRONIZE
|
||||
|
||||
; Predefined registry keys
|
||||
|
||||
HKEY_CLASSES_ROOT = 80000000h
|
||||
HKEY_CURRENT_USER = 80000001h
|
||||
HKEY_LOCAL_MACHINE = 80000002h
|
||||
HKEY_USERS = 80000003h
|
||||
HKEY_PERFORMANCE_DATA = 80000004h
|
||||
HKEY_CURRENT_CONFIG = 80000005h
|
||||
HKEY_DYN_DATA = 80000006h
|
||||
|
||||
; FormatMessage flags
|
||||
|
||||
FORMAT_MESSAGE_ALLOCATE_BUFFER = 0100h
|
||||
FORMAT_MESSAGE_IGNORE_INSERTS = 0200h
|
||||
FORMAT_MESSAGE_FROM_STRING = 0400h
|
||||
FORMAT_MESSAGE_FROM_HMODULE = 0800h
|
||||
FORMAT_MESSAGE_FROM_SYSTEM = 1000h
|
||||
FORMAT_MESSAGE_ARGUMENT_ARRAY = 2000h
|
||||
FORMAT_MESSAGE_MAX_WIDTH_MASK = 00FFh
|
||||
|
||||
; Language identifiers
|
||||
|
||||
LANG_NEUTRAL = 00h
|
||||
LANG_BULGARIAN = 02h
|
||||
LANG_CHINESE = 04h
|
||||
LANG_CROATIAN = 1Ah
|
||||
LANG_CZECH = 05h
|
||||
LANG_DANISH = 06h
|
||||
LANG_DUTCH = 13h
|
||||
LANG_ENGLISH = 09h
|
||||
LANG_FINNISH = 0Bh
|
||||
LANG_FRENCH = 0Ch
|
||||
LANG_GERMAN = 07h
|
||||
LANG_GREEK = 08h
|
||||
LANG_HUNGARIAN = 0Eh
|
||||
LANG_ICELANDIC = 0Fh
|
||||
LANG_ITALIAN = 10h
|
||||
LANG_JAPANESE = 11h
|
||||
LANG_KOREAN = 12h
|
||||
LANG_NORWEGIAN = 14h
|
||||
LANG_POLISH = 15h
|
||||
LANG_PORTUGUESE = 16h
|
||||
LANG_ROMANIAN = 18h
|
||||
LANG_RUSSIAN = 19h
|
||||
LANG_SLOVAK = 1Bh
|
||||
LANG_SLOVENIAN = 24h
|
||||
LANG_SPANISH = 0Ah
|
||||
LANG_SWEDISH = 1Dh
|
||||
LANG_THAI = 1Eh
|
||||
LANG_TURKISH = 1Fh
|
||||
|
||||
; Sublanguage identifiers
|
||||
|
||||
SUBLANG_NEUTRAL = 00h shl 10
|
||||
SUBLANG_DEFAULT = 01h shl 10
|
||||
SUBLANG_SYS_DEFAULT = 02h shl 10
|
||||
SUBLANG_CHINESE_TRADITIONAL = 01h shl 10
|
||||
SUBLANG_CHINESE_SIMPLIFIED = 02h shl 10
|
||||
SUBLANG_CHINESE_HONGKONG = 03h shl 10
|
||||
SUBLANG_CHINESE_SINGAPORE = 04h shl 10
|
||||
SUBLANG_DUTCH = 01h shl 10
|
||||
SUBLANG_DUTCH_BELGIAN = 02h shl 10
|
||||
SUBLANG_ENGLISH_US = 01h shl 10
|
||||
SUBLANG_ENGLISH_UK = 02h shl 10
|
||||
SUBLANG_ENGLISH_AUS = 03h shl 10
|
||||
SUBLANG_ENGLISH_CAN = 04h shl 10
|
||||
SUBLANG_ENGLISH_NZ = 05h shl 10
|
||||
SUBLANG_ENGLISH_EIRE = 06h shl 10
|
||||
SUBLANG_FRENCH = 01h shl 10
|
||||
SUBLANG_FRENCH_BELGIAN = 02h shl 10
|
||||
SUBLANG_FRENCH_CANADIAN = 03h shl 10
|
||||
SUBLANG_FRENCH_SWISS = 04h shl 10
|
||||
SUBLANG_GERMAN = 01h shl 10
|
||||
SUBLANG_GERMAN_SWISS = 02h shl 10
|
||||
SUBLANG_GERMAN_AUSTRIAN = 03h shl 10
|
||||
SUBLANG_ITALIAN = 01h shl 10
|
||||
SUBLANG_ITALIAN_SWISS = 02h shl 10
|
||||
SUBLANG_NORWEGIAN_BOKMAL = 01h shl 10
|
||||
SUBLANG_NORWEGIAN_NYNORSK = 02h shl 10
|
||||
SUBLANG_PORTUGUESE = 02h shl 10
|
||||
SUBLANG_PORTUGUESE_BRAZILIAN = 01h shl 10
|
||||
SUBLANG_SPANISH = 01h shl 10
|
||||
SUBLANG_SPANISH_MEXICAN = 02h shl 10
|
||||
SUBLANG_SPANISH_MODERN = 03h shl 10
|
||||
|
||||
; Sorting identifiers
|
||||
|
||||
SORT_DEFAULT = 0 shl 16
|
||||
SORT_JAPANESE_XJIS = 0 shl 16
|
||||
SORT_JAPANESE_UNICODE = 1 shl 16
|
||||
SORT_CHINESE_BIG5 = 0 shl 16
|
||||
SORT_CHINESE_PRCP = 0 shl 16
|
||||
SORT_CHINESE_UNICODE = 1 shl 16
|
||||
SORT_CHINESE_PRC = 2 shl 16
|
||||
SORT_CHINESE_BOPOMOFO = 3 shl 16
|
||||
SORT_KOREAN_KSC = 0 shl 16
|
||||
SORT_KOREAN_UNICODE = 1 shl 16
|
||||
SORT_GERMAN_PHONE_BOOK = 1 shl 16
|
||||
SORT_HUNGARIAN_DEFAULT = 0 shl 16
|
||||
SORT_HUNGARIAN_TECHNICAL = 1 shl 16
|
||||
|
||||
; Code pages
|
||||
|
||||
CP_ACP = 0 ; default to ANSI code page
|
||||
CP_OEMCP = 1 ; default to OEM code page
|
||||
CP_MACCP = 2 ; default to MAC code page
|
||||
CP_THREAD_ACP = 3 ; current thread's ANSI code page
|
||||
CP_SYMBOL = 42 ; SYMBOL translations
|
||||
CP_UTF7 = 65000 ; UTF-7 translation
|
||||
CP_UTF8 = 65001 ; UTF-8 translation
|
||||
|
||||
; Resource types
|
||||
|
||||
RT_CURSOR = 1
|
||||
RT_BITMAP = 2
|
||||
RT_ICON = 3
|
||||
RT_MENU = 4
|
||||
RT_DIALOG = 5
|
||||
RT_STRING = 6
|
||||
RT_FONTDIR = 7
|
||||
RT_FONT = 8
|
||||
RT_ACCELERATOR = 9
|
||||
RT_RCDATA = 10
|
||||
RT_MESSAGETABLE = 11
|
||||
RT_GROUP_CURSOR = 12
|
||||
RT_GROUP_ICON = 14
|
||||
RT_VERSION = 16
|
||||
RT_DLGINCLUDE = 17
|
||||
RT_PLUGPLAY = 19
|
||||
RT_VXD = 20
|
||||
RT_ANICURSOR = 21
|
||||
RT_ANIICON = 22
|
||||
RT_HTML = 23
|
||||
RT_MANIFEST = 24
|
||||
|
||||
; Clipboard formats
|
||||
|
||||
CF_TEXT = 001h
|
||||
CF_BITMAP = 002h
|
||||
CF_METAFILEPICT = 003h
|
||||
CF_SYLK = 004h
|
||||
CF_DIF = 005h
|
||||
CF_TIFF = 006h
|
||||
CF_OEMTEXT = 007h
|
||||
CF_DIB = 008h
|
||||
CF_PALETTE = 009h
|
||||
CF_PENDATA = 00Ah
|
||||
CF_RIFF = 00Bh
|
||||
CF_WAVE = 00Ch
|
||||
CF_UNICODETEXT = 00Dh
|
||||
CF_ENHMETAFILE = 00Eh
|
||||
CF_HDROP = 00Fh
|
||||
CF_LOCALE = 010h
|
||||
CF_OWNERDISPLAY = 080h
|
||||
CF_DSPTEXT = 081h
|
||||
CF_DSPBITMAP = 082h
|
||||
CF_DSPMETAFILEPICT = 083h
|
||||
CF_DSPENHMETAFILE = 08Eh
|
||||
CF_PRIVATEFIRST = 200h
|
||||
CF_PRIVATELAST = 2FFh
|
||||
CF_GDIOBJFIRST = 300h
|
||||
CF_GDIOBJLAST = 3FFh
|
||||
|
||||
; OS types for version info
|
||||
|
||||
VOS_UNKNOWN = 00000000h
|
||||
VOS_DOS = 00010000h
|
||||
VOS_OS216 = 00020000h
|
||||
VOS_OS232 = 00030000h
|
||||
VOS_NT = 00040000h
|
||||
VOS__BASE = 00000000h
|
||||
VOS__WINDOWS16 = 00000001h
|
||||
VOS__PM16 = 00000002h
|
||||
VOS__PM32 = 00000003h
|
||||
VOS__WINDOWS32 = 00000004h
|
||||
VOS_DOS_WINDOWS16 = 00010001h
|
||||
VOS_DOS_WINDOWS32 = 00010004h
|
||||
VOS_OS216_PM16 = 00020002h
|
||||
VOS_OS232_PM32 = 00030003h
|
||||
VOS_NT_WINDOWS32 = 00040004h
|
||||
|
||||
; File types for version info
|
||||
|
||||
VFT_UNKNOWN = 00000000h
|
||||
VFT_APP = 00000001h
|
||||
VFT_DLL = 00000002h
|
||||
VFT_DRV = 00000003h
|
||||
VFT_FONT = 00000004h
|
||||
VFT_VXD = 00000005h
|
||||
VFT_STATIC_LIB = 00000007h
|
||||
|
||||
; File subtypes for version info
|
||||
|
||||
VFT2_UNKNOWN = 00000000h
|
||||
VFT2_DRV_PRINTER = 00000001h
|
||||
VFT2_DRV_KEYBOARD = 00000002h
|
||||
VFT2_DRV_LANGUAGE = 00000003h
|
||||
VFT2_DRV_DISPLAY = 00000004h
|
||||
VFT2_DRV_MOUSE = 00000005h
|
||||
VFT2_DRV_NETWORK = 00000006h
|
||||
VFT2_DRV_SYSTEM = 00000007h
|
||||
VFT2_DRV_INSTALLABLE = 00000008h
|
||||
VFT2_DRV_SOUND = 00000009h
|
||||
VFT2_DRV_COMM = 0000000Ah
|
||||
VFT2_DRV_INPUTMETHOD = 0000000Bh
|
||||
VFT2_DRV_VERSIONED_PRINTER = 0000000Ch
|
||||
VFT2_FONT_RASTER = 00000001h
|
||||
VFT2_FONT_VECTOR = 00000002h
|
||||
VFT2_FONT_TRUETYPE = 00000003h
|
||||
|
||||
; Console control signals
|
||||
|
||||
CTRL_C_EVENT = 0
|
||||
CTRL_BREAK_EVENT = 1
|
||||
CTRL_CLOSE_EVENT = 2
|
||||
CTRL_LOGOFF_EVENT = 5
|
||||
CTRL_SHUTDOWN_EVENT = 6
|
128
toolchain/fasm2/include/equates/shell32.inc
Normal file
128
toolchain/fasm2/include/equates/shell32.inc
Normal file
@ -0,0 +1,128 @@
|
||||
|
||||
; SHELL32.DLL structures and constants
|
||||
|
||||
struct NOTIFYICONDATA
|
||||
cbSize dd ?
|
||||
hWnd dd ?
|
||||
uID dd ?
|
||||
uFlags dd ?
|
||||
uCallbackMessage dd ?
|
||||
hIcon dd ?
|
||||
szTip TCHAR 64 dup (?)
|
||||
ends
|
||||
|
||||
struct NOTIFYICONDATAA
|
||||
cbSize dd ?
|
||||
hWnd dd ?
|
||||
uID dd ?
|
||||
uFlags dd ?
|
||||
uCallbackMessage dd ?
|
||||
hIcon dd ?
|
||||
szTip db 64 dup (?)
|
||||
ends
|
||||
|
||||
struct NOTIFYICONDATAW
|
||||
cbSize dd ?
|
||||
hWnd dd ?
|
||||
uID dd ?
|
||||
uFlags dd ?
|
||||
uCallbackMessage dd ?
|
||||
hIcon dd ?
|
||||
szTip du 64 dup (?)
|
||||
ends
|
||||
|
||||
struct BROWSEINFO
|
||||
hwndOwner dd ?
|
||||
pidlRoot dd ?
|
||||
pszDisplayName dd ?
|
||||
lpszTitle dd ?
|
||||
ulFlags dd ?
|
||||
lpfn dd ?
|
||||
lParam dd ?
|
||||
iImage dd ?
|
||||
ends
|
||||
|
||||
; Taskbar icon messages
|
||||
|
||||
NIM_ADD = 0
|
||||
NIM_MODIFY = 1
|
||||
NIM_DELETE = 2
|
||||
NIM_SETFOCUS = 3
|
||||
NIM_SETVERSION = 4
|
||||
|
||||
; Taskbar icon flags
|
||||
|
||||
NIF_MESSAGE = 01h
|
||||
NIF_ICON = 02h
|
||||
NIF_TIP = 04h
|
||||
NIF_STATE = 08h
|
||||
NIF_INFO = 10h
|
||||
NIF_GUID = 20h
|
||||
|
||||
; Constant Special Item ID List
|
||||
|
||||
CSIDL_DESKTOP = 0x0000
|
||||
CSIDL_INTERNET = 0x0001
|
||||
CSIDL_PROGRAMS = 0x0002
|
||||
CSIDL_CONTROLS = 0x0003
|
||||
CSIDL_PRINTERS = 0x0004
|
||||
CSIDL_PERSONAL = 0x0005
|
||||
CSIDL_FAVORITES = 0x0006
|
||||
CSIDL_STARTUP = 0x0007
|
||||
CSIDL_RECENT = 0x0008
|
||||
CSIDL_SENDTO = 0x0009
|
||||
CSIDL_BITBUCKET = 0x000A
|
||||
CSIDL_STARTMENU = 0x000B
|
||||
CSIDL_MYDOCUMENTS = 0x000C
|
||||
CSIDL_MYMUSIC = 0x000D
|
||||
CSIDL_MYVIDEO = 0x000E
|
||||
CSIDL_DESKTOPDIRECTORY = 0x0010
|
||||
CSIDL_DRIVES = 0x0011
|
||||
CSIDL_NETWORK = 0x0012
|
||||
CSIDL_NETHOOD = 0x0013
|
||||
CSIDL_FONTS = 0x0014
|
||||
CSIDL_TEMPLATES = 0x0015
|
||||
CSIDL_COMMON_STARTMENU = 0x0016
|
||||
CSIDL_COMMON_PROGRAMS = 0x0017
|
||||
CSIDL_COMMON_STARTUP = 0x0018
|
||||
CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019
|
||||
CSIDL_APPDATA = 0x001A
|
||||
CSIDL_PRINTHOOD = 0x001B
|
||||
CSIDL_LOCAL_APPDATA = 0x001C
|
||||
CSIDL_ALTSTARTUP = 0x001D
|
||||
CSIDL_COMMON_ALTSTARTUP = 0x001E
|
||||
CSIDL_COMMON_FAVORITES = 0x001F
|
||||
CSIDL_INTERNET_CACHE = 0x0020
|
||||
CSIDL_COOKIES = 0x0021
|
||||
CSIDL_HISTORY = 0x0022
|
||||
CSIDL_COMMON_APPDATA = 0x0023
|
||||
CSIDL_WINDOWS = 0x0024
|
||||
CSIDL_SYSTEM = 0x0025
|
||||
CSIDL_PROGRAM_FILES = 0x0026
|
||||
CSIDL_MYPICTURES = 0x0027
|
||||
CSIDL_PROFILE = 0x0028
|
||||
CSIDL_SYSTEMX86 = 0x0029
|
||||
CSIDL_PROGRAM_FILESX86 = 0x002A
|
||||
CSIDL_PROGRAM_FILES_COMMON = 0x002B
|
||||
CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C
|
||||
CSIDL_COMMON_TEMPLATES = 0x002D
|
||||
CSIDL_COMMON_DOCUMENTS = 0x002E
|
||||
CSIDL_COMMON_ADMINTOOLS = 0x002F
|
||||
CSIDL_ADMINTOOLS = 0x0030
|
||||
CSIDL_CONNECTIONS = 0x0031
|
||||
CSIDL_COMMON_MUSIC = 0x0035
|
||||
CSIDL_COMMON_PICTURES = 0x0036
|
||||
CSIDL_COMMON_VIDEO = 0x0037
|
||||
CSIDL_RESOURCES = 0x0038
|
||||
CSIDL_RESOURCES_LOCALIZED = 0x0039
|
||||
CSIDL_COMMON_OEM_LINKS = 0x003A
|
||||
CSIDL_CDBURN_AREA = 0x003B
|
||||
CSIDL_COMPUTERSNEARME = 0x003D
|
||||
CSIDL_PROFILES = 0x003E
|
||||
CSIDL_FOLDER_MASK = 0x00FF
|
||||
CSIDL_FLAG_PER_USER_INIT = 0x0800
|
||||
CSIDL_FLAG_NO_ALIAS = 0x1000
|
||||
CSIDL_FLAG_DONT_VERIFY = 0x4000
|
||||
CSIDL_FLAG_CREATE = 0x8000
|
||||
CSIDL_FLAG_MASK = 0xFF00
|
||||
|
134
toolchain/fasm2/include/equates/shell64.inc
Normal file
134
toolchain/fasm2/include/equates/shell64.inc
Normal file
@ -0,0 +1,134 @@
|
||||
|
||||
; SHELL32.DLL structures and constants
|
||||
|
||||
struct NOTIFYICONDATA
|
||||
cbSize dd ?
|
||||
dd ?
|
||||
hWnd dq ?
|
||||
uID dd ?
|
||||
uFlags dd ?
|
||||
uCallbackMessage dd ?
|
||||
dd ?
|
||||
hIcon dq ?
|
||||
szTip TCHAR 64 dup (?)
|
||||
ends
|
||||
|
||||
struct NOTIFYICONDATAA
|
||||
cbSize dd ?
|
||||
dd ?
|
||||
hWnd dq ?
|
||||
uID dd ?
|
||||
uFlags dd ?
|
||||
uCallbackMessage dd ?
|
||||
dd ?
|
||||
hIcon dq ?
|
||||
szTip db 64 dup (?)
|
||||
ends
|
||||
|
||||
struct NOTIFYICONDATAW
|
||||
cbSize dd ?
|
||||
dd ?
|
||||
hWnd dq ?
|
||||
uID dd ?
|
||||
uFlags dd ?
|
||||
uCallbackMessage dd ?
|
||||
dd ?
|
||||
hIcon dq ?
|
||||
szTip du 64 dup (?)
|
||||
ends
|
||||
|
||||
struct BROWSEINFO
|
||||
hwndOwner dq ?
|
||||
pidlRoot dq ?
|
||||
pszDisplayName dq ?
|
||||
lpszTitle dq ?
|
||||
ulFlags dd ?
|
||||
dd ?
|
||||
lpfn dq ?
|
||||
lParam dq ?
|
||||
iImage dq ?
|
||||
ends
|
||||
|
||||
; Taskbar icon messages
|
||||
|
||||
NIM_ADD = 0
|
||||
NIM_MODIFY = 1
|
||||
NIM_DELETE = 2
|
||||
NIM_SETFOCUS = 3
|
||||
NIM_SETVERSION = 4
|
||||
|
||||
; Taskbar icon flags
|
||||
|
||||
NIF_MESSAGE = 01h
|
||||
NIF_ICON = 02h
|
||||
NIF_TIP = 04h
|
||||
NIF_STATE = 08h
|
||||
NIF_INFO = 10h
|
||||
NIF_GUID = 20h
|
||||
|
||||
; Constant Special Item ID List
|
||||
|
||||
CSIDL_DESKTOP = 0x0000
|
||||
CSIDL_INTERNET = 0x0001
|
||||
CSIDL_PROGRAMS = 0x0002
|
||||
CSIDL_CONTROLS = 0x0003
|
||||
CSIDL_PRINTERS = 0x0004
|
||||
CSIDL_PERSONAL = 0x0005
|
||||
CSIDL_FAVORITES = 0x0006
|
||||
CSIDL_STARTUP = 0x0007
|
||||
CSIDL_RECENT = 0x0008
|
||||
CSIDL_SENDTO = 0x0009
|
||||
CSIDL_BITBUCKET = 0x000A
|
||||
CSIDL_STARTMENU = 0x000B
|
||||
CSIDL_MYDOCUMENTS = 0x000C
|
||||
CSIDL_MYMUSIC = 0x000D
|
||||
CSIDL_MYVIDEO = 0x000E
|
||||
CSIDL_DESKTOPDIRECTORY = 0x0010
|
||||
CSIDL_DRIVES = 0x0011
|
||||
CSIDL_NETWORK = 0x0012
|
||||
CSIDL_NETHOOD = 0x0013
|
||||
CSIDL_FONTS = 0x0014
|
||||
CSIDL_TEMPLATES = 0x0015
|
||||
CSIDL_COMMON_STARTMENU = 0x0016
|
||||
CSIDL_COMMON_PROGRAMS = 0x0017
|
||||
CSIDL_COMMON_STARTUP = 0x0018
|
||||
CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019
|
||||
CSIDL_APPDATA = 0x001A
|
||||
CSIDL_PRINTHOOD = 0x001B
|
||||
CSIDL_LOCAL_APPDATA = 0x001C
|
||||
CSIDL_ALTSTARTUP = 0x001D
|
||||
CSIDL_COMMON_ALTSTARTUP = 0x001E
|
||||
CSIDL_COMMON_FAVORITES = 0x001F
|
||||
CSIDL_INTERNET_CACHE = 0x0020
|
||||
CSIDL_COOKIES = 0x0021
|
||||
CSIDL_HISTORY = 0x0022
|
||||
CSIDL_COMMON_APPDATA = 0x0023
|
||||
CSIDL_WINDOWS = 0x0024
|
||||
CSIDL_SYSTEM = 0x0025
|
||||
CSIDL_PROGRAM_FILES = 0x0026
|
||||
CSIDL_MYPICTURES = 0x0027
|
||||
CSIDL_PROFILE = 0x0028
|
||||
CSIDL_SYSTEMX86 = 0x0029
|
||||
CSIDL_PROGRAM_FILESX86 = 0x002A
|
||||
CSIDL_PROGRAM_FILES_COMMON = 0x002B
|
||||
CSIDL_PROGRAM_FILES_COMMONX86 = 0x002C
|
||||
CSIDL_COMMON_TEMPLATES = 0x002D
|
||||
CSIDL_COMMON_DOCUMENTS = 0x002E
|
||||
CSIDL_COMMON_ADMINTOOLS = 0x002F
|
||||
CSIDL_ADMINTOOLS = 0x0030
|
||||
CSIDL_CONNECTIONS = 0x0031
|
||||
CSIDL_COMMON_MUSIC = 0x0035
|
||||
CSIDL_COMMON_PICTURES = 0x0036
|
||||
CSIDL_COMMON_VIDEO = 0x0037
|
||||
CSIDL_RESOURCES = 0x0038
|
||||
CSIDL_RESOURCES_LOCALIZED = 0x0039
|
||||
CSIDL_COMMON_OEM_LINKS = 0x003A
|
||||
CSIDL_CDBURN_AREA = 0x003B
|
||||
CSIDL_COMPUTERSNEARME = 0x003D
|
||||
CSIDL_PROFILES = 0x003E
|
||||
CSIDL_FOLDER_MASK = 0x00FF
|
||||
CSIDL_FLAG_PER_USER_INIT = 0x0800
|
||||
CSIDL_FLAG_NO_ALIAS = 0x1000
|
||||
CSIDL_FLAG_DONT_VERIFY = 0x4000
|
||||
CSIDL_FLAG_CREATE = 0x8000
|
||||
CSIDL_FLAG_MASK = 0xFF00
|
1934
toolchain/fasm2/include/equates/user32.inc
Normal file
1934
toolchain/fasm2/include/equates/user32.inc
Normal file
File diff suppressed because it is too large
Load Diff
1956
toolchain/fasm2/include/equates/user64.inc
Normal file
1956
toolchain/fasm2/include/equates/user64.inc
Normal file
File diff suppressed because it is too large
Load Diff
124
toolchain/fasm2/include/equates/wsock32.inc
Normal file
124
toolchain/fasm2/include/equates/wsock32.inc
Normal file
@ -0,0 +1,124 @@
|
||||
|
||||
; WSOCK32.DLL structures and constants
|
||||
|
||||
struct WSADATA
|
||||
wVersion dw ?
|
||||
wHighVersion dw ?
|
||||
szDescription db 256+1 dup (?)
|
||||
szSystemStatus db 128+1 dup (?)
|
||||
iMaxSockets dw ?
|
||||
iMaxUdpDg dw ?
|
||||
_padding_ db 2 dup (?)
|
||||
lpVendorInfo dd ?
|
||||
ends
|
||||
|
||||
struct hostent
|
||||
h_name dd ?
|
||||
h_aliases dd ?
|
||||
h_addrtype dw ?
|
||||
h_length dw ?
|
||||
h_addr_list dd ?
|
||||
ends
|
||||
|
||||
struct sockaddr_in
|
||||
sin_family dw ?
|
||||
sin_port dw ?
|
||||
sin_addr dd ?
|
||||
sin_zero db 8 dup (?)
|
||||
ends
|
||||
|
||||
struct sockaddr
|
||||
sa_family dw ?
|
||||
sa_data db 14 dup (?)
|
||||
ends
|
||||
|
||||
; Socket types
|
||||
|
||||
SOCK_STREAM = 1
|
||||
SOCK_DGRAM = 2
|
||||
SOCK_RAW = 3
|
||||
SOCK_RDM = 4
|
||||
SOCK_SEQPACKET = 5
|
||||
|
||||
; Address formats
|
||||
|
||||
AF_UNSPEC = 0
|
||||
AF_UNIX = 1
|
||||
AF_INET = 2
|
||||
AF_IMPLINK = 3
|
||||
AF_PUP = 4
|
||||
AF_CHAOS = 5
|
||||
AF_NS = 6
|
||||
AF_IPX = 6
|
||||
AF_ISO = 7
|
||||
AF_OSI = AF_ISO
|
||||
AF_ECMA = 8
|
||||
AF_DATAKIT = 9
|
||||
AF_CCITT = 10
|
||||
AF_SNA = 11
|
||||
AF_DECnet = 12
|
||||
AF_DLI = 13
|
||||
AF_LAT = 14
|
||||
AF_HYLINK = 15
|
||||
AF_APPLETALK = 16
|
||||
AF_NETBIOS = 17
|
||||
|
||||
; Protocol formats
|
||||
|
||||
PF_UNSPEC = 0
|
||||
PF_UNIX = 1
|
||||
PF_INET = 2
|
||||
PF_IMPLINK = 3
|
||||
PF_PUP = 4
|
||||
PF_CHAOS = 5
|
||||
PF_NS = 6
|
||||
PF_IPX = 6
|
||||
PF_ISO = 7
|
||||
PF_OSI = PF_ISO
|
||||
PF_ECMA = 8
|
||||
PF_DATAKIT = 9
|
||||
PF_CCITT = 10
|
||||
PF_SNA = 11
|
||||
PF_DECnet = 12
|
||||
PF_DLI = 13
|
||||
PF_LAT = 14
|
||||
PF_HYLINK = 15
|
||||
PF_APPLETALK = 16
|
||||
PF_NETBIOS = 17
|
||||
|
||||
; IP Ports
|
||||
|
||||
IPPORT_ECHO = 7
|
||||
IPPORT_DISCARD = 9
|
||||
IPPORT_SYSTAT = 11
|
||||
IPPORT_DAYTIME = 13
|
||||
IPPORT_NETSTAT = 15
|
||||
IPPORT_FTP = 21
|
||||
IPPORT_TELNET = 23
|
||||
IPPORT_SMTP = 25
|
||||
IPPORT_TIMESERVER = 37
|
||||
IPPORT_NAMESERVER = 42
|
||||
IPPORT_WHOIS = 43
|
||||
IPPORT_MTP = 57
|
||||
IPPORT_TFTP = 69
|
||||
IPPORT_RJE = 77
|
||||
IPPORT_FINGER = 79
|
||||
IPPORT_TTYLINK = 87
|
||||
IPPORT_SUPDUP = 95
|
||||
IPPORT_EXECSERVER = 512
|
||||
IPPORT_LOGINSERVER = 513
|
||||
IPPORT_CMDSERVER = 514
|
||||
IPPORT_EFSSERVER = 520
|
||||
IPPORT_BIFFUDP = 512
|
||||
IPPORT_WHOSERVER = 513
|
||||
IPPORT_ROUTESERVER = 520
|
||||
IPPORT_RESERVED = 1024
|
||||
|
||||
; Notifications
|
||||
|
||||
FD_READ = 01h
|
||||
FD_WRITE = 02h
|
||||
FD_OOB = 04h
|
||||
FD_ACCEPT = 08h
|
||||
FD_CONNECT = 10h
|
||||
FD_CLOSE = 20h
|
9
toolchain/fasm2/include/fasm2.inc
Normal file
9
toolchain/fasm2/include/fasm2.inc
Normal file
@ -0,0 +1,9 @@
|
||||
include 'dd.inc'
|
||||
include 'align.inc'
|
||||
include 'format.inc'
|
||||
include 'x86-2.inc'
|
||||
use everything
|
||||
|
||||
include '@@.inc'
|
||||
include 'times.inc'
|
||||
include 'fix.inc'
|
31
toolchain/fasm2/include/fix.inc
Normal file
31
toolchain/fasm2/include/fix.inc
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
define fix? fix?
|
||||
|
||||
fix... = 0
|
||||
|
||||
calminstruction (name) fix? &value&
|
||||
arrange name, fix.name
|
||||
publish name, value
|
||||
check fix...
|
||||
jyes done
|
||||
compute fix..., 1
|
||||
arrange name, fix.=enable
|
||||
assemble name
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
macro fix?.enable? chain
|
||||
chain
|
||||
macro include?! file*, head
|
||||
include file, fix.enable head
|
||||
purge ?, include?
|
||||
end macro
|
||||
calminstruction ?! &line&
|
||||
local any
|
||||
match any =fix? any?, line
|
||||
jyes skip
|
||||
transform line, fix
|
||||
skip:
|
||||
assemble line
|
||||
end calminstruction
|
||||
end macro
|
381
toolchain/fasm2/include/format.inc
Normal file
381
toolchain/fasm2/include/format.inc
Normal file
@ -0,0 +1,381 @@
|
||||
|
||||
define format? format.extension
|
||||
|
||||
calminstruction format? statement*
|
||||
local ext
|
||||
match statement =as? ext, statement
|
||||
jno pass
|
||||
publish format:, ext
|
||||
pass:
|
||||
arrange statement, =format statement
|
||||
assemble statement
|
||||
end calminstruction
|
||||
|
||||
postpone
|
||||
if definite format
|
||||
format.binary as format
|
||||
end if
|
||||
end postpone
|
||||
|
||||
macro local_include? instr
|
||||
local pos,chr,path
|
||||
pos = lengthof __FILE__
|
||||
while pos
|
||||
chr = (__FILE__ shr (8*(pos-1))) and 0FFh
|
||||
if chr = '/' | chr = '\'
|
||||
break
|
||||
end if
|
||||
pos = pos - 1
|
||||
end while
|
||||
path = string __FILE__ and not ( (-1) shl (8*pos) )
|
||||
macro instr file
|
||||
include path bappend file
|
||||
end macro
|
||||
end macro
|
||||
|
||||
local_include __include
|
||||
|
||||
macro format?.MZ?
|
||||
if ~ definite format
|
||||
format binary as 'exe'
|
||||
end if
|
||||
__include 'format/mz.inc'
|
||||
end macro
|
||||
|
||||
macro format?.PE? settings
|
||||
PE.Settings.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE or IMAGE_FILE_32BIT_MACHINE or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED
|
||||
PE.Settings.DllCharacteristics = 0
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
local seq
|
||||
define seq settings:
|
||||
while 1
|
||||
match :, seq
|
||||
break
|
||||
else match =DLL? more, seq
|
||||
PE.Settings.Characteristics = PE.Settings.Characteristics or IMAGE_FILE_DLL
|
||||
redefine seq more
|
||||
else match =large? more, seq
|
||||
PE.Settings.Characteristics = PE.Settings.Characteristics or IMAGE_FILE_LARGE_ADDRESS_AWARE
|
||||
redefine seq more
|
||||
else match =WDM? more, seq
|
||||
PE.Settings.DllCharacteristics = PE.Settings.DllCharacteristics or IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
|
||||
redefine seq more
|
||||
else match =NX? more, seq
|
||||
PE.Settings.DllCharacteristics = PE.Settings.DllCharacteristics or IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||
redefine seq more
|
||||
else match =at? base =on? stub :, seq
|
||||
PE.Settings.ImageBase = base
|
||||
PE.Settings.Stub = stub
|
||||
break
|
||||
else match =at? base :, seq
|
||||
PE.Settings.ImageBase = base
|
||||
break
|
||||
else match =on? stub :, seq
|
||||
PE.Settings.Stub = stub
|
||||
break
|
||||
else
|
||||
match =GUI? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI
|
||||
redefine seq more
|
||||
else match =console? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
redefine seq more
|
||||
else match =native? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_NATIVE
|
||||
PE.Settings.SectionAlignment = 32
|
||||
PE.Settings.FileAlignment = 32
|
||||
redefine seq more
|
||||
else match =EFI? more, seq
|
||||
PE.Settings.Magic = 0x20B
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION
|
||||
redefine seq more
|
||||
else match =EFIboot? more, seq
|
||||
PE.Settings.Magic = 0x20B
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
|
||||
redefine seq more
|
||||
else match =EFIruntime? more, seq
|
||||
PE.Settings.Magic = 0x20B
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
|
||||
redefine seq more
|
||||
else
|
||||
err 'invalid argument'
|
||||
break
|
||||
end match
|
||||
match V.v more, seq
|
||||
PE.Settings.MajorSubsystemVersion = V
|
||||
PE.Settings.MinorSubsystemVersion = v
|
||||
redefine seq more
|
||||
end match
|
||||
end match
|
||||
end while
|
||||
if ~ definite format
|
||||
if PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION | PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER | PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
|
||||
format binary as 'efi'
|
||||
else if PE.Settings.Characteristics and IMAGE_FILE_DLL
|
||||
format binary as 'dll'
|
||||
else
|
||||
format binary as 'exe'
|
||||
end if
|
||||
end if
|
||||
__include 'format/pe.inc'
|
||||
use32
|
||||
end macro
|
||||
|
||||
macro format?.PE64? settings
|
||||
PE.Settings.Magic = 0x20B
|
||||
PE.Settings.Machine = IMAGE_FILE_MACHINE_AMD64
|
||||
PE.Settings.Characteristics = IMAGE_FILE_EXECUTABLE_IMAGE or IMAGE_FILE_LARGE_ADDRESS_AWARE or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED
|
||||
PE.Settings.DllCharacteristics = 0
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
PE.Settings.MajorSubsystemVersion = 5
|
||||
PE.Settings.MinorSubsystemVersion = 0
|
||||
local seq
|
||||
define seq settings:
|
||||
while 1
|
||||
match :, seq
|
||||
break
|
||||
else match =DLL? more, seq
|
||||
PE.Settings.Characteristics = PE.Settings.Characteristics or IMAGE_FILE_DLL
|
||||
redefine seq more
|
||||
else match =WDM? more, seq
|
||||
PE.Settings.DllCharacteristics = PE.Settings.DllCharacteristics or IMAGE_DLLCHARACTERISTICS_WDM_DRIVER
|
||||
redefine seq more
|
||||
else match =NX? more, seq
|
||||
PE.Settings.DllCharacteristics = PE.Settings.DllCharacteristics or IMAGE_DLLCHARACTERISTICS_NX_COMPAT
|
||||
redefine seq more
|
||||
else match =at? base =on? stub :, seq
|
||||
PE.Settings.ImageBase = base
|
||||
PE.Settings.Stub = stub
|
||||
break
|
||||
else match =at? base :, seq
|
||||
PE.Settings.ImageBase = base
|
||||
break
|
||||
else match =on? stub :, seq
|
||||
PE.Settings.Stub = stub
|
||||
break
|
||||
else
|
||||
match =GUI? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_GUI
|
||||
redefine seq more
|
||||
else match =console? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
redefine seq more
|
||||
else match =native? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_NATIVE
|
||||
PE.Settings.SectionAlignment = 32
|
||||
PE.Settings.FileAlignment = 32
|
||||
redefine seq more
|
||||
else match =EFI? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION
|
||||
redefine seq more
|
||||
else match =EFIboot? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER
|
||||
redefine seq more
|
||||
else match =EFIruntime? more, seq
|
||||
PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
|
||||
redefine seq more
|
||||
else
|
||||
err 'invalid argument'
|
||||
break
|
||||
end match
|
||||
match V.v more, seq
|
||||
PE.Settings.MajorSubsystemVersion = V
|
||||
PE.Settings.MinorSubsystemVersion = v
|
||||
redefine seq more
|
||||
end match
|
||||
end match
|
||||
end while
|
||||
if ~ definite format
|
||||
if PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION | PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER | PE.Settings.Subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER
|
||||
format binary as 'efi'
|
||||
else if PE.Settings.Characteristics and IMAGE_FILE_DLL
|
||||
format binary as 'dll'
|
||||
else
|
||||
format binary as 'exe'
|
||||
end if
|
||||
end if
|
||||
__include 'format/pe.inc'
|
||||
use64
|
||||
end macro
|
||||
|
||||
macro format?.ELF? variant
|
||||
match , variant
|
||||
if ~ definite format
|
||||
format binary as 'o'
|
||||
end if
|
||||
__include 'format/elf32.inc'
|
||||
use32
|
||||
else match =executable? settings, variant:
|
||||
match brand =at? base:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match =at? base:, settings
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match brand:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
end match
|
||||
__include 'format/elfexe.inc'
|
||||
use32
|
||||
else match =dynamic? settings, variant:
|
||||
ELF.Settings.Type = ET_DYN
|
||||
match brand =at? base:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match =at? base:, settings
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match brand:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
end match
|
||||
__include 'format/elfexe.inc'
|
||||
use32
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro format?.ELF64? variant
|
||||
match , variant
|
||||
if ~ definite format
|
||||
format binary as 'o'
|
||||
end if
|
||||
__include 'format/elf64.inc'
|
||||
use64
|
||||
else match =executable? settings, variant:
|
||||
ELF.Settings.Class = ELFCLASS64
|
||||
ELF.Settings.Machine = EM_X86_64
|
||||
ELF.Settings.BaseAddress = 400000h
|
||||
match brand =at? base:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match =at? base:, settings
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match brand:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
end match
|
||||
__include 'format/elfexe.inc'
|
||||
use64
|
||||
else match =dynamic? settings, variant:
|
||||
ELF.Settings.Class = ELFCLASS64
|
||||
ELF.Settings.Type = ET_DYN
|
||||
ELF.Settings.Machine = EM_X86_64
|
||||
ELF.Settings.BaseAddress = 400000h
|
||||
match brand =at? base:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match =at? base:, settings
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match brand:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
end match
|
||||
__include 'format/elfexe.inc'
|
||||
use64
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro format?.ELFx32? variant
|
||||
match , variant
|
||||
if ~ definite format
|
||||
format binary as 'o'
|
||||
end if
|
||||
ELF.Settings.Machine = EM_X86_64
|
||||
__include 'format/elf32.inc'
|
||||
use64
|
||||
else match =executable? settings, variant:
|
||||
ELF.Settings.Class = ELFCLASS32
|
||||
ELF.Settings.Machine = EM_X86_64
|
||||
ELF.Settings.BaseAddress = 400000h
|
||||
match brand =at? base:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match =at? base:, settings
|
||||
ELF.Settings.BaseAddress = base
|
||||
else match brand:, settings
|
||||
ELF.Settings.ABI = brand
|
||||
end match
|
||||
__include 'format/elfexe.inc'
|
||||
use64
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro format?.COFF?
|
||||
if ~ definite format
|
||||
format binary as 'obj'
|
||||
end if
|
||||
__include 'format/coff.inc'
|
||||
use32
|
||||
end macro
|
||||
|
||||
macro format?.MS? variant
|
||||
match =COFF?, variant
|
||||
if ~ definite format
|
||||
format binary as 'obj'
|
||||
end if
|
||||
COFF.Settings.Characteristics = IMAGE_FILE_32BIT_MACHINE or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_BYTES_REVERSED_LO
|
||||
__include 'format/coffms.inc'
|
||||
use32
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro format?.MS64? variant
|
||||
match =COFF?, variant
|
||||
if ~ definite format
|
||||
format binary as 'obj'
|
||||
end if
|
||||
COFF.Settings.Machine = IMAGE_FILE_MACHINE_AMD64
|
||||
COFF.Settings.Characteristics = IMAGE_FILE_32BIT_MACHINE or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_BYTES_REVERSED_LO
|
||||
__include 'format/coffms.inc'
|
||||
use64
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro format?.MachO? variant
|
||||
match , variant
|
||||
if ~ definite format
|
||||
format binary as 'o'
|
||||
end if
|
||||
MachO.Settings.FileType equ MH_OBJECT
|
||||
__include 'format/macho.inc'
|
||||
use32
|
||||
else match =executable?, variant
|
||||
MachO.Settings.BaseAddress = 0x1000
|
||||
__include 'format/macho.inc'
|
||||
use32
|
||||
else match =executable? at? base, variant
|
||||
MachO.Settings.BaseAddress = base
|
||||
__include 'format/macho.inc'
|
||||
use32
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro format?.MachO64? variant
|
||||
MachO.Settings.ProcessorType equ CPU_TYPE_X86_64
|
||||
MachO.Settings.ProcessorSubtype equ CPU_SUBTYPE_X86_64_ALL
|
||||
match , variant
|
||||
if ~ definite format
|
||||
format binary as 'o'
|
||||
end if
|
||||
MachO.Settings.FileType equ MH_OBJECT
|
||||
__include 'format/macho.inc'
|
||||
use64
|
||||
else match =executable?, variant
|
||||
MachO.Settings.BaseAddress = 0x100000000
|
||||
__include 'format/macho.inc'
|
||||
use64
|
||||
else match =executable? =at? base, variant
|
||||
MachO.Settings.BaseAddress = base
|
||||
__include 'format/macho.inc'
|
||||
use64
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
403
toolchain/fasm2/include/format/coff.inc
Normal file
403
toolchain/fasm2/include/format/coff.inc
Normal file
@ -0,0 +1,403 @@
|
||||
|
||||
macro struct? name
|
||||
macro end?.struct?!
|
||||
end namespace
|
||||
esc end struc
|
||||
virtual at 0
|
||||
name name
|
||||
sizeof.name = $
|
||||
end virtual
|
||||
purge end?.struct?
|
||||
end macro
|
||||
esc struc name
|
||||
label . : sizeof.name
|
||||
namespace .
|
||||
end macro
|
||||
|
||||
struct SCNHDR
|
||||
s_name db 8 dup ?
|
||||
s_paddr dd ?
|
||||
s_vaddr dd ?
|
||||
s_size dd ?
|
||||
s_scnptr dd ?
|
||||
s_relptr dd ?
|
||||
s_lnnoptr dd ?
|
||||
s_nreloc dw ?
|
||||
s_nlnno dw ?
|
||||
s_flags dd ?
|
||||
end struct
|
||||
|
||||
SCNHSZ = sizeof SCNHDR
|
||||
|
||||
struct RELOC
|
||||
r_vaddr dd ?
|
||||
r_symndx dd ?
|
||||
r_type dw ?
|
||||
end struct
|
||||
|
||||
RELSZ = sizeof RELOC
|
||||
|
||||
struct SYMENT
|
||||
e_name db 8 dup ?
|
||||
virtual at e_name
|
||||
e_zeroes dd ?
|
||||
e_offset dd ?
|
||||
end virtual
|
||||
e_value dd ?
|
||||
e_scnum dw ?
|
||||
e_type dw ?
|
||||
e_sclass db ?
|
||||
e_numaux db ?
|
||||
end struct
|
||||
|
||||
SYMESZ = sizeof SYMENT
|
||||
|
||||
I386MAGIC = 0x14c
|
||||
|
||||
F_RELFLG = 0x0001
|
||||
F_EXEC = 0x0002
|
||||
F_LNNO = 0x0004
|
||||
F_LSYMS = 0x0008
|
||||
F_AR32WR = 0x0100
|
||||
|
||||
STYP_TEXT = 0x0020
|
||||
STYP_DATA = 0x0040
|
||||
STYP_BSS = 0x0080
|
||||
|
||||
N_UNDEF = 0
|
||||
N_ABS = -1
|
||||
N_DEBUG = -2
|
||||
|
||||
T_NULL = 0000b
|
||||
T_VOID = 0001b
|
||||
T_CHAR = 0010b
|
||||
T_SHORT = 0011b
|
||||
T_INT = 0100b
|
||||
T_LONG = 0101b
|
||||
T_FLOAT = 0110b
|
||||
T_DOUBLE = 0111b
|
||||
T_STRUCT = 1000b
|
||||
T_UNION = 1001b
|
||||
T_ENUM = 1010b
|
||||
T_MOE = 1011b
|
||||
T_UCHAR = 1100b
|
||||
T_USHORT = 1101b
|
||||
T_UINT = 1110b
|
||||
T_ULONG = 1111b
|
||||
T_LNGDBL = 01_0000b
|
||||
|
||||
DT_NON = 00b
|
||||
DT_PTR = 01b
|
||||
DT_FCN = 10b
|
||||
DT_ARY = 11b
|
||||
|
||||
C_NULL = 0
|
||||
C_AUTO = 1
|
||||
C_EXT = 2
|
||||
C_STAT = 3
|
||||
C_REG = 4
|
||||
C_EXTDEF = 5
|
||||
C_LABEL = 6
|
||||
C_ULABEL = 7
|
||||
C_MOS = 8
|
||||
C_ARG = 9
|
||||
C_STRTAG = 10
|
||||
C_MOU = 11
|
||||
C_UNTAG = 12
|
||||
C_TPDEF = 13
|
||||
C_USTATIC = 14
|
||||
C_ENTAG = 15
|
||||
C_MOE = 16
|
||||
C_REGPARM = 17
|
||||
C_FIELD = 18
|
||||
C_AUTOARG = 19
|
||||
C_LASTENT = 20
|
||||
C_BLOCK = 100
|
||||
C_FCN = 101
|
||||
C_EOS = 102
|
||||
C_FILE = 103
|
||||
C_LINE = 104
|
||||
C_ALIAS = 105
|
||||
C_HIDDEN = 106
|
||||
C_EFCN = 255
|
||||
|
||||
RELOC_ADDR32 = 6
|
||||
RELOC_REL32 = 20
|
||||
|
||||
COFF::
|
||||
|
||||
namespace COFF
|
||||
|
||||
Header:
|
||||
|
||||
f_magic dw I386MAGIC
|
||||
f_nscns dw NUMBER_OF_SECTIONS
|
||||
f_timdat dd __TIME__
|
||||
f_symptr dd SYMBOL_TABLE_OFFSET
|
||||
f_nsyms dd NUMBER_OF_SYMBOLS
|
||||
f_opthdr dw 0
|
||||
f_flags dw F_AR32WR + F_LNNO
|
||||
|
||||
Sections: db NUMBER_OF_SECTIONS * SCNHSZ dup 0
|
||||
|
||||
virtual at 0
|
||||
symbol_table:: rb NUMBER_OF_SYMBOLS * SYMESZ
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
string_table:: dd STRING_TABLE_SIZE
|
||||
STRING_POSITION = $
|
||||
rb STRING_TABLE_SIZE - $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
relocations:: rb NUMBER_OF_RELOCATIONS * RELSZ
|
||||
end virtual
|
||||
|
||||
element relocatable?
|
||||
|
||||
macro section_start
|
||||
local sym
|
||||
element sym : relocatable * (1+SECTION_INDEX) + SYMBOL_INDEX
|
||||
SECTION_BASE = sym
|
||||
org sym
|
||||
align.assume sym, SECTION_ALIGN
|
||||
if DEFINED_SECTION | defined DEFAULT_SECTION
|
||||
store SECTION_NAME : 8 at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_name
|
||||
store C_STAT at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_sclass
|
||||
store 1+SECTION_INDEX at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_scnum
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end if
|
||||
end macro
|
||||
|
||||
RELOCATION_INDEX = 0
|
||||
SECTION_INDEX = 0
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
SYMBOL_INDEX = 0
|
||||
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 4
|
||||
SECTION_NAME = '.flat'
|
||||
SECTION_FLAGS = STYP_TEXT + STYP_DATA
|
||||
DEFINED_SECTION = 0
|
||||
section_start
|
||||
|
||||
end namespace
|
||||
|
||||
macro section?
|
||||
namespace COFF
|
||||
|
||||
SECTION_SIZE = $% - SECTION_OFFSET
|
||||
|
||||
if DEFINED_SECTION | SECTION_SIZE > 0
|
||||
|
||||
if ~ DEFINED_SECTION
|
||||
DEFAULT_SECTION := 1
|
||||
end if
|
||||
|
||||
if $%% = SECTION_OFFSET
|
||||
SECTION_FLAGS = SECTION_FLAGS or STYP_BSS
|
||||
SECTION_OFFSET = 0
|
||||
section $
|
||||
else
|
||||
UNINITIALIZED_LENGTH = $% - $%%
|
||||
section $
|
||||
db UNINITIALIZED_LENGTH dup 0
|
||||
end if
|
||||
|
||||
store SECTION_NAME : 8 at COFF:Sections + SECTION_INDEX * SCNHSZ + SCNHDR.s_name
|
||||
store SECTION_OFFSET at COFF:Sections + SECTION_INDEX * SCNHSZ + SCNHDR.s_scnptr
|
||||
store SECTION_SIZE at COFF:Sections + SECTION_INDEX * SCNHSZ + SCNHDR.s_size
|
||||
store SECTION_FLAGS at COFF:Sections + SECTION_INDEX * SCNHSZ + SCNHDR.s_flags
|
||||
|
||||
if RELOCATION_INDEX > SECTION_RELOCATION_INDEX
|
||||
store RELOCATION_INDEX - SECTION_RELOCATION_INDEX at COFF:Sections + SECTION_INDEX * SCNHSZ + SCNHDR.s_nreloc
|
||||
store RELOCATIONS_OFFSET + SECTION_RELOCATION_INDEX * RELSZ at COFF:Sections + SECTION_INDEX * SCNHSZ + SCNHDR.s_relptr
|
||||
end if
|
||||
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro section? declaration*
|
||||
namespace COFF
|
||||
|
||||
section
|
||||
|
||||
DEFINED_SECTION = 1
|
||||
SECTION_FLAGS = 0
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 4
|
||||
|
||||
match name attributes, declaration
|
||||
|
||||
SECTION_NAME = name
|
||||
|
||||
local seq,list
|
||||
define seq attributes
|
||||
while 1
|
||||
match car cdr, seq
|
||||
define list car
|
||||
define seq cdr
|
||||
else
|
||||
match any, seq
|
||||
define list any
|
||||
end match
|
||||
break
|
||||
end match
|
||||
end while
|
||||
irpv attribute, list
|
||||
match =code?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or STYP_TEXT
|
||||
else match =data?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or STYP_DATA
|
||||
else
|
||||
err 'unknown attribute "',`attribute,'"'
|
||||
end match
|
||||
end irpv
|
||||
|
||||
else
|
||||
|
||||
SECTION_NAME = declaration
|
||||
|
||||
end match
|
||||
|
||||
section_start
|
||||
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro public? declaration*
|
||||
namespace COFF
|
||||
match =static? value =as? str, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_CLASS = C_STAT
|
||||
else match value =as? str, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_CLASS = C_EXT
|
||||
else match =static? value, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_NAME = `value
|
||||
SYMBOL_CLASS = C_STAT
|
||||
else
|
||||
SYMBOL_VALUE = declaration
|
||||
SYMBOL_NAME = `declaration
|
||||
SYMBOL_CLASS = C_EXT
|
||||
end match
|
||||
if SYMBOL_VALUE relativeto 1 elementof SYMBOL_VALUE & 1 elementof (1 metadataof SYMBOL_VALUE) relativeto relocatable & 1 scaleof (1 metadataof SYMBOL_VALUE) > 0
|
||||
SYMBOL_SECTION_INDEX = 1 scaleof (1 metadataof SYMBOL_VALUE)
|
||||
SYMBOL_VALUE = SYMBOL_VALUE - 1 elementof SYMBOL_VALUE
|
||||
else
|
||||
SYMBOL_SECTION_INDEX = N_ABS
|
||||
end if
|
||||
if lengthof SYMBOL_NAME > 8
|
||||
store 0 at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_zeroes
|
||||
store STRING_POSITION at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_offset
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
else
|
||||
store SYMBOL_NAME : 8 at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_name
|
||||
end if
|
||||
store SYMBOL_VALUE at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_value
|
||||
store SYMBOL_SECTION_INDEX at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_scnum
|
||||
store SYMBOL_CLASS at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_sclass
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro extrn? declaration*
|
||||
namespace COFF
|
||||
local sym,psym
|
||||
element sym : relocatable * (-1) + SYMBOL_INDEX
|
||||
match str =as? name:size, declaration
|
||||
label name:size at sym
|
||||
SYMBOL_NAME = string str
|
||||
else match name:size, declaration
|
||||
label name:size at sym
|
||||
SYMBOL_NAME = `name
|
||||
else match str =as? name, declaration
|
||||
label name at sym
|
||||
SYMBOL_NAME = string str
|
||||
else
|
||||
label declaration at sym
|
||||
SYMBOL_NAME = `declaration
|
||||
end match
|
||||
if lengthof SYMBOL_NAME > 8
|
||||
store 0 at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_zeroes
|
||||
store STRING_POSITION at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_offset
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
else
|
||||
store SYMBOL_NAME : 8 at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_name
|
||||
end if
|
||||
store C_EXT at symbol_table : SYMBOL_INDEX * SYMESZ + SYMENT.e_sclass
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
calminstruction dword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto COFF.relocatable
|
||||
jyes addr32
|
||||
check ~ value relativeto 0 & (value + COFF.SECTION_BASE) relativeto 1 elementof (value + COFF.SECTION_BASE)
|
||||
jno plain
|
||||
check 1 elementof (1 metadataof (value + COFF.SECTION_BASE)) relativeto COFF.relocatable
|
||||
jyes rel32
|
||||
plain:
|
||||
emit 4, value
|
||||
exit
|
||||
local offset, symndx, type
|
||||
addr32:
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, RELOC_ADDR32
|
||||
jump add_relocation
|
||||
rel32:
|
||||
compute value, value + COFF.SECTION_BASE
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, RELOC_REL32
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
compute offset, $%
|
||||
emit 4, 0 scaleof value
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - COFF.SECTION_OFFSET
|
||||
local reloc
|
||||
compute reloc, COFF.RELOCATION_INDEX * RELSZ
|
||||
asm store offset at COFF.relocations : reloc + RELOC.r_vaddr
|
||||
asm store symndx at COFF.relocations : reloc + RELOC.r_symndx
|
||||
asm store type at COFF.relocations : reloc + RELOC.r_type
|
||||
compute COFF.RELOCATION_INDEX, COFF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
postpone
|
||||
purge section?
|
||||
section
|
||||
namespace COFF
|
||||
|
||||
NUMBER_OF_SECTIONS := SECTION_INDEX
|
||||
STRING_TABLE_SIZE := STRING_POSITION
|
||||
NUMBER_OF_SYMBOLS := SYMBOL_INDEX
|
||||
NUMBER_OF_RELOCATIONS := RELOCATION_INDEX
|
||||
|
||||
RELOCATIONS_OFFSET = $%
|
||||
load byte_sequence : NUMBER_OF_RELOCATIONS * RELSZ from relocations:0
|
||||
db byte_sequence
|
||||
|
||||
SYMBOL_TABLE_OFFSET = $%
|
||||
load byte_sequence : NUMBER_OF_SYMBOLS * SYMESZ from symbol_table:0
|
||||
db byte_sequence
|
||||
|
||||
load byte_sequence : STRING_TABLE_SIZE from string_table:0
|
||||
db byte_sequence
|
||||
|
||||
end namespace
|
||||
end postpone
|
684
toolchain/fasm2/include/format/coffms.inc
Normal file
684
toolchain/fasm2/include/format/coffms.inc
Normal file
@ -0,0 +1,684 @@
|
||||
|
||||
macro struct? name
|
||||
macro end?.struct?!
|
||||
end namespace
|
||||
esc end struc
|
||||
virtual at 0
|
||||
name name
|
||||
sizeof.name = $
|
||||
end virtual
|
||||
purge end?.struct?
|
||||
end macro
|
||||
esc struc name
|
||||
label . : sizeof.name
|
||||
namespace .
|
||||
end macro
|
||||
|
||||
struct IMAGE_SECTION_HEADER
|
||||
Name db 8 dup ?
|
||||
VirtualSize dd ?
|
||||
VirtualAddress dd ?
|
||||
SizeOfRawData dd ?
|
||||
PointerToRawData dd ?
|
||||
PointerToRelocations dd ?
|
||||
PointerToLinenumbers dd ?
|
||||
NumberOfRelocations dw ?
|
||||
NumberOfLinenumbers dw ?
|
||||
Characteristics dd ?
|
||||
end struct
|
||||
|
||||
struct IMAGE_RELOCATION
|
||||
VirtualAddress dd ?
|
||||
SymbolTableIndex dd ?
|
||||
Type dw ?
|
||||
end struct
|
||||
|
||||
struct IMAGE_SYMBOL
|
||||
ShortName db 8 dup ?
|
||||
virtual at ShortName
|
||||
Zeroes dd ?
|
||||
Offset dd ?
|
||||
end virtual
|
||||
Value dd ?
|
||||
SectionNumber dw ?
|
||||
Type dw ?
|
||||
StorageClass db ?
|
||||
NumberOfAuxSymbols db ?
|
||||
end struct
|
||||
|
||||
IMAGE_FILE_MACHINE_UNKNOWN = 0x0
|
||||
IMAGE_FILE_MACHINE_AM33 = 0x1D3
|
||||
IMAGE_FILE_MACHINE_AMD64 = 0x8664
|
||||
IMAGE_FILE_MACHINE_ARM = 0x1C0
|
||||
IMAGE_FILE_MACHINE_ARMNT = 0x1C4
|
||||
IMAGE_FILE_MACHINE_ARM64 = 0xAA64
|
||||
IMAGE_FILE_MACHINE_EBC = 0xEBC
|
||||
IMAGE_FILE_MACHINE_I386 = 0x14C
|
||||
IMAGE_FILE_MACHINE_IA64 = 0x200
|
||||
IMAGE_FILE_MACHINE_M32R = 0x9041
|
||||
IMAGE_FILE_MACHINE_MIPS16 = 0x266
|
||||
IMAGE_FILE_MACHINE_MIPSFPU = 0x366
|
||||
IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466
|
||||
IMAGE_FILE_MACHINE_POWERPC = 0x1F0
|
||||
IMAGE_FILE_MACHINE_POWERPCFP = 0x1F1
|
||||
IMAGE_FILE_MACHINE_R4000 = 0x166
|
||||
IMAGE_FILE_MACHINE_SH3 = 0x1A2
|
||||
IMAGE_FILE_MACHINE_SH3DSP = 0x1A3
|
||||
IMAGE_FILE_MACHINE_SH4 = 0x1A6
|
||||
IMAGE_FILE_MACHINE_SH5 = 0x1A8
|
||||
IMAGE_FILE_MACHINE_THUMB = 0x1C2
|
||||
IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
|
||||
|
||||
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
||||
IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
|
||||
IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
|
||||
IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008
|
||||
IMAGE_FILE_AGGRESSIVE_WS_TRIM = 0x0010
|
||||
IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
|
||||
IMAGE_FILE_BYTES_REVERSED_LO = 0x0080
|
||||
IMAGE_FILE_32BIT_MACHINE = 0x0100
|
||||
IMAGE_FILE_DEBUG_STRIPPED = 0x0200
|
||||
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400
|
||||
IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800
|
||||
IMAGE_FILE_SYSTEM = 0x1000
|
||||
IMAGE_FILE_DLL = 0x2000
|
||||
IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000
|
||||
IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
|
||||
|
||||
IMAGE_SCN_TYPE_NO_PAD = 0x00000008
|
||||
IMAGE_SCN_CNT_CODE = 0x00000020
|
||||
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
|
||||
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
|
||||
IMAGE_SCN_LNK_OTHER = 0x00000100
|
||||
IMAGE_SCN_LNK_INFO = 0x00000200
|
||||
IMAGE_SCN_LNK_REMOVE = 0x00000800
|
||||
IMAGE_SCN_LNK_COMDAT = 0x00001000
|
||||
IMAGE_SCN_GPREL = 0x00008000
|
||||
IMAGE_SCN_MEM_PURGEABLE = 0x00020000
|
||||
IMAGE_SCN_MEM_16BIT = 0x00020000
|
||||
IMAGE_SCN_MEM_LOCKED = 0x00040000
|
||||
IMAGE_SCN_MEM_PRELOAD = 0x00080000
|
||||
IMAGE_SCN_ALIGN_1BYTES = 0x00100000
|
||||
IMAGE_SCN_ALIGN_2BYTES = 0x00200000
|
||||
IMAGE_SCN_ALIGN_4BYTES = 0x00300000
|
||||
IMAGE_SCN_ALIGN_8BYTES = 0x00400000
|
||||
IMAGE_SCN_ALIGN_16BYTES = 0x00500000
|
||||
IMAGE_SCN_ALIGN_32BYTES = 0x00600000
|
||||
IMAGE_SCN_ALIGN_64BYTES = 0x00700000
|
||||
IMAGE_SCN_ALIGN_128BYTES = 0x00800000
|
||||
IMAGE_SCN_ALIGN_256BYTES = 0x00900000
|
||||
IMAGE_SCN_ALIGN_512BYTES = 0x00A00000
|
||||
IMAGE_SCN_ALIGN_1024BYTES = 0x00B00000
|
||||
IMAGE_SCN_ALIGN_2048BYTES = 0x00C00000
|
||||
IMAGE_SCN_ALIGN_4096BYTES = 0x00D00000
|
||||
IMAGE_SCN_ALIGN_8192BYTES = 0x00E00000
|
||||
IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000
|
||||
IMAGE_SCN_MEM_DISCARDABLE = 0x02000000
|
||||
IMAGE_SCN_MEM_NOT_CACHED = 0x04000000
|
||||
IMAGE_SCN_MEM_NOT_PAGED = 0x08000000
|
||||
IMAGE_SCN_MEM_SHARED = 0x10000000
|
||||
IMAGE_SCN_MEM_EXECUTE = 0x20000000
|
||||
IMAGE_SCN_MEM_READ = 0x40000000
|
||||
IMAGE_SCN_MEM_WRITE = 0x80000000
|
||||
|
||||
IMAGE_REL_AMD64_ABSOLUTE = 0x0000
|
||||
IMAGE_REL_AMD64_ADDR64 = 0x0001
|
||||
IMAGE_REL_AMD64_ADDR32 = 0x0002
|
||||
IMAGE_REL_AMD64_ADDR32NB = 0x0003
|
||||
IMAGE_REL_AMD64_REL32 = 0x0004
|
||||
IMAGE_REL_AMD64_REL32_1 = 0x0005
|
||||
IMAGE_REL_AMD64_REL32_2 = 0x0006
|
||||
IMAGE_REL_AMD64_REL32_3 = 0x0007
|
||||
IMAGE_REL_AMD64_REL32_4 = 0x0008
|
||||
IMAGE_REL_AMD64_REL32_5 = 0x0009
|
||||
IMAGE_REL_AMD64_SECTION = 0x000A
|
||||
IMAGE_REL_AMD64_SECREL = 0x000B
|
||||
IMAGE_REL_AMD64_SECREL7 = 0x000C
|
||||
IMAGE_REL_AMD64_TOKEN = 0x000D
|
||||
IMAGE_REL_AMD64_SREL32 = 0x000E
|
||||
IMAGE_REL_AMD64_PAIR = 0x000F
|
||||
IMAGE_REL_AMD64_SSPAN32 = 0x0010
|
||||
|
||||
IMAGE_REL_I386_ABSOLUTE = 0x0000
|
||||
IMAGE_REL_I386_DIR16 = 0x0001
|
||||
IMAGE_REL_I386_REL16 = 0x0002
|
||||
IMAGE_REL_I386_DIR32 = 0x0006
|
||||
IMAGE_REL_I386_DIR32NB = 0x0007
|
||||
IMAGE_REL_I386_SEG12 = 0x0009
|
||||
IMAGE_REL_I386_SECTION = 0x000A
|
||||
IMAGE_REL_I386_SECREL = 0x000B
|
||||
IMAGE_REL_I386_TOKEN = 0x000C
|
||||
IMAGE_REL_I386_SECREL7 = 0x000D
|
||||
IMAGE_REL_I386_REL32 = 0x0014
|
||||
|
||||
IMAGE_SYM_UNDEFINED = 0
|
||||
IMAGE_SYM_ABSOLUTE = -1
|
||||
IMAGE_SYM_DEBUG = -2
|
||||
|
||||
IMAGE_SYM_TYPE_NULL = 0
|
||||
IMAGE_SYM_TYPE_VOID = 1
|
||||
IMAGE_SYM_TYPE_CHAR = 2
|
||||
IMAGE_SYM_TYPE_SHORT = 3
|
||||
IMAGE_SYM_TYPE_INT = 4
|
||||
IMAGE_SYM_TYPE_LONG = 5
|
||||
IMAGE_SYM_TYPE_FLOAT = 6
|
||||
IMAGE_SYM_TYPE_DOUBLE = 7
|
||||
IMAGE_SYM_TYPE_STRUCT = 8
|
||||
IMAGE_SYM_TYPE_UNION = 9
|
||||
IMAGE_SYM_TYPE_ENUM = 10
|
||||
IMAGE_SYM_TYPE_MOE = 11
|
||||
IMAGE_SYM_TYPE_BYTE = 12
|
||||
IMAGE_SYM_TYPE_WORD = 13
|
||||
IMAGE_SYM_TYPE_UINT = 14
|
||||
IMAGE_SYM_TYPE_DWORD = 15
|
||||
|
||||
IMAGE_SYM_DTYPE_NULL = 0
|
||||
IMAGE_SYM_DTYPE_POINTER = 1
|
||||
IMAGE_SYM_DTYPE_FUNCTION = 2
|
||||
IMAGE_SYM_DTYPE_ARRAY = 3
|
||||
|
||||
IMAGE_SYM_CLASS_END_OF_FUNCTION = -1
|
||||
IMAGE_SYM_CLASS_NULL = 0
|
||||
IMAGE_SYM_CLASS_AUTOMATIC = 1
|
||||
IMAGE_SYM_CLASS_EXTERNAL = 2
|
||||
IMAGE_SYM_CLASS_STATIC = 3
|
||||
IMAGE_SYM_CLASS_REGISTER = 4
|
||||
IMAGE_SYM_CLASS_EXTERNAL_DEF = 5
|
||||
IMAGE_SYM_CLASS_LABEL = 6
|
||||
IMAGE_SYM_CLASS_UNDEFINED_LABEL = 7
|
||||
IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = 8
|
||||
IMAGE_SYM_CLASS_ARGUMENT = 9
|
||||
IMAGE_SYM_CLASS_STRUCT_TAG = 10
|
||||
IMAGE_SYM_CLASS_MEMBER_OF_UNION = 11
|
||||
IMAGE_SYM_CLASS_UNION_TAG = 12
|
||||
IMAGE_SYM_CLASS_TYPE_DEFINITION = 13
|
||||
IMAGE_SYM_CLASS_UNDEFINED_STATIC = 14
|
||||
IMAGE_SYM_CLASS_ENUM_TAG = 15
|
||||
IMAGE_SYM_CLASS_MEMBER_OF_ENUM = 16
|
||||
IMAGE_SYM_CLASS_REGISTER_PARAM = 17
|
||||
IMAGE_SYM_CLASS_BIT_FIELD = 18
|
||||
IMAGE_SYM_CLASS_BLOCK = 100
|
||||
IMAGE_SYM_CLASS_FUNCTION = 101
|
||||
IMAGE_SYM_CLASS_END_OF_STRUCT = 102
|
||||
IMAGE_SYM_CLASS_FILE = 103
|
||||
IMAGE_SYM_CLASS_SECTION = 104
|
||||
IMAGE_SYM_CLASS_WEAK_EXTERNAL = 105
|
||||
IMAGE_SYM_CLASS_CLR_TOKEN = 107
|
||||
|
||||
IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1
|
||||
IMAGE_WEAK_EXTERN_SEARCH_LIBRARY = 2
|
||||
IMAGE_WEAK_EXTERN_SEARCH_ALIAS = 3
|
||||
|
||||
COFF::
|
||||
|
||||
namespace COFF
|
||||
|
||||
if defined Settings.Machine
|
||||
MACHINE := Settings.Machine
|
||||
else
|
||||
MACHINE := IMAGE_FILE_MACHINE_I386
|
||||
end if
|
||||
|
||||
if defined Settings.Characteristics
|
||||
CHARACTERISTICS = Settings.Characteristics
|
||||
else
|
||||
CHARACTERISTICS = IMAGE_FILE_32BIT_MACHINE
|
||||
end if
|
||||
|
||||
Header:
|
||||
|
||||
Machine dw MACHINE
|
||||
NumberOfSections dw NUMBER_OF_SECTIONS
|
||||
TimeDateStamp dd __TIME__
|
||||
PointerToSymbolTable dd SYMBOL_TABLE_OFFSET
|
||||
NumberOfSymbols dd NUMBER_OF_SYMBOLS
|
||||
SizeOfOptionalHeader dw 0
|
||||
Characteristics dw CHARACTERISTICS
|
||||
|
||||
Sections: db NUMBER_OF_SECTIONS * sizeof IMAGE_SECTION_HEADER dup 0
|
||||
|
||||
virtual at 0
|
||||
symbol_table:: rb NUMBER_OF_SYMBOLS * sizeof IMAGE_SYMBOL
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
string_table:: dd STRING_TABLE_SIZE
|
||||
STRING_POSITION = $
|
||||
rb STRING_TABLE_SIZE - $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
relocations:: rb NUMBER_OF_RELOCATIONS * sizeof IMAGE_RELOCATION
|
||||
end virtual
|
||||
|
||||
element relocatable?
|
||||
|
||||
macro section_start
|
||||
local sym
|
||||
element sym : relocatable * (1+SECTION_INDEX) + SYMBOL_INDEX
|
||||
SECTION_BASE = sym
|
||||
org sym
|
||||
align.assume sym, SECTION_ALIGN
|
||||
if DEFINED_SECTION | defined DEFAULT_SECTION
|
||||
store SECTION_NAME : 8 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.ShortName
|
||||
store IMAGE_SYM_CLASS_STATIC at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.StorageClass
|
||||
store 1+SECTION_INDEX at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.SectionNumber
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end if
|
||||
end macro
|
||||
|
||||
RELOCATION_INDEX = 0
|
||||
SECTION_INDEX = 0
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
SYMBOL_INDEX = 0
|
||||
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 4
|
||||
SECTION_NAME = '.flat'
|
||||
SECTION_FLAGS = IMAGE_SCN_CNT_CODE + IMAGE_SCN_CNT_INITIALIZED_DATA + IMAGE_SCN_MEM_EXECUTE + IMAGE_SCN_MEM_READ + IMAGE_SCN_MEM_WRITE
|
||||
DEFINED_SECTION = 0
|
||||
|
||||
section_start
|
||||
|
||||
end namespace
|
||||
|
||||
macro section?
|
||||
namespace COFF
|
||||
|
||||
SECTION_SIZE = $% - SECTION_OFFSET
|
||||
|
||||
if DEFINED_SECTION | SECTION_SIZE > 0
|
||||
|
||||
if ~ DEFINED_SECTION
|
||||
DEFAULT_SECTION := 1
|
||||
end if
|
||||
|
||||
if $%% = SECTION_OFFSET
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
||||
SECTION_OFFSET = 0
|
||||
section $
|
||||
else
|
||||
UNINITIALIZED_LENGTH = $% - $%%
|
||||
section $
|
||||
db UNINITIALIZED_LENGTH dup 0
|
||||
end if
|
||||
|
||||
if RELOCATION_INDEX > SECTION_RELOCATION_INDEX
|
||||
store RELOCATIONS_OFFSET + SECTION_RELOCATION_INDEX * sizeof IMAGE_RELOCATION at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.PointerToRelocations
|
||||
if RELOCATION_INDEX - SECTION_RELOCATION_INDEX > 65535
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_LNK_NRELOC_OVFL
|
||||
store 0FFFFh at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.NumberOfRelocations
|
||||
load RELOCATIONS : (RELOCATION_INDEX - SECTION_RELOCATION_INDEX) * sizeof IMAGE_RELOCATION from relocations : SECTION_RELOCATION_INDEX * sizeof IMAGE_RELOCATION
|
||||
store RELOCATIONS : (RELOCATION_INDEX - SECTION_RELOCATION_INDEX) * sizeof IMAGE_RELOCATION at relocations : (SECTION_RELOCATION_INDEX+1) * sizeof IMAGE_RELOCATION
|
||||
RELOCATION_INDEX = RELOCATION_INDEX + 1
|
||||
store RELOCATION_INDEX - SECTION_RELOCATION_INDEX at relocations : SECTION_RELOCATION_INDEX * sizeof IMAGE_RELOCATION + IMAGE_RELOCATION.VirtualAddress
|
||||
store 0 at relocations : SECTION_RELOCATION_INDEX * sizeof IMAGE_RELOCATION + IMAGE_RELOCATION.SymbolTableIndex
|
||||
store 0 at relocations : SECTION_RELOCATION_INDEX * sizeof IMAGE_RELOCATION + IMAGE_RELOCATION.Type
|
||||
else
|
||||
store RELOCATION_INDEX - SECTION_RELOCATION_INDEX at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.NumberOfRelocations
|
||||
end if
|
||||
end if
|
||||
|
||||
store SECTION_NAME : 8 at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.Name
|
||||
store SECTION_OFFSET at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.PointerToRawData
|
||||
store SECTION_SIZE at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.SizeOfRawData
|
||||
store SECTION_FLAGS at COFF:Sections + SECTION_INDEX * sizeof IMAGE_SECTION_HEADER + IMAGE_SECTION_HEADER.Characteristics
|
||||
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro section? declaration*
|
||||
namespace COFF
|
||||
|
||||
section
|
||||
|
||||
DEFINED_SECTION = 1
|
||||
SECTION_FLAGS = 0
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 4
|
||||
|
||||
match name attributes, declaration
|
||||
|
||||
SECTION_NAME = name
|
||||
|
||||
local seq,list
|
||||
match flags =align? boundary, attributes
|
||||
SECTION_ALIGN = boundary
|
||||
define seq flags
|
||||
else match =align? boundary, attributes
|
||||
SECTION_ALIGN = boundary
|
||||
define seq
|
||||
else
|
||||
define seq attributes
|
||||
end match
|
||||
while 1
|
||||
match car cdr, seq
|
||||
define list car
|
||||
define seq cdr
|
||||
else
|
||||
match any, seq
|
||||
define list any
|
||||
end match
|
||||
break
|
||||
end match
|
||||
end while
|
||||
irpv attribute, list
|
||||
match =code?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_CNT_CODE
|
||||
else match =data?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
else match =readable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_MEM_READ
|
||||
else match =writeable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_MEM_WRITE
|
||||
else match =executable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_MEM_EXECUTE
|
||||
else match =shareable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_MEM_SHARED
|
||||
else match =discardable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_MEM_DISCARDABLE
|
||||
else match =notpageable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_MEM_NOT_PAGED
|
||||
else match =linkremove?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_LNK_REMOVE
|
||||
else match =linkinfo?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_LNK_INFO
|
||||
else
|
||||
err 'unknown attribute "',`attribute,'"'
|
||||
end match
|
||||
end irpv
|
||||
|
||||
else
|
||||
|
||||
SECTION_NAME = declaration
|
||||
|
||||
end match
|
||||
|
||||
repeat 1, i:SECTION_ALIGN
|
||||
if defined IMAGE_SCN_ALIGN_#i#BYTES
|
||||
SECTION_FLAGS = SECTION_FLAGS or IMAGE_SCN_ALIGN_#i#BYTES
|
||||
else
|
||||
err 'invalid section alignment'
|
||||
end if
|
||||
end repeat
|
||||
|
||||
section_start
|
||||
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro public? declaration*
|
||||
namespace COFF
|
||||
match =static? value =as? str, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_CLASS = IMAGE_SYM_CLASS_STATIC
|
||||
else match value =as? str, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_CLASS = IMAGE_SYM_CLASS_EXTERNAL
|
||||
else match =static? value, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_NAME = `value
|
||||
SYMBOL_CLASS = IMAGE_SYM_CLASS_STATIC
|
||||
else
|
||||
SYMBOL_VALUE = declaration
|
||||
SYMBOL_NAME = `declaration
|
||||
SYMBOL_CLASS = IMAGE_SYM_CLASS_EXTERNAL
|
||||
end match
|
||||
if SYMBOL_VALUE relativeto 1 elementof SYMBOL_VALUE & 1 elementof (1 metadataof SYMBOL_VALUE) relativeto relocatable & SYMBOL_CLASS = IMAGE_SYM_CLASS_EXTERNAL
|
||||
if 1 scaleof (1 metadataof SYMBOL_VALUE) > 0
|
||||
SYMBOL_SECTION_INDEX = 1 scaleof (1 metadataof SYMBOL_VALUE)
|
||||
SYMBOL_VALUE = SYMBOL_VALUE - 1 elementof SYMBOL_VALUE
|
||||
else
|
||||
SYMBOL_SECTION_INDEX = IMAGE_SYM_UNDEFINED
|
||||
SYMBOL_VALUE = 0
|
||||
SYMBOL_CLASS = IMAGE_SYM_CLASS_WEAK_EXTERNAL
|
||||
SYMBOL_TAG = 0 scaleof (1 metadataof SYMBOL_VALUE)
|
||||
end if
|
||||
else
|
||||
SYMBOL_SECTION_INDEX = IMAGE_SYM_ABSOLUTE
|
||||
end if
|
||||
if lengthof SYMBOL_NAME > 8
|
||||
store 0 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.Zeroes
|
||||
store STRING_POSITION at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.Offset
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
else
|
||||
store SYMBOL_NAME : 8 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.ShortName
|
||||
end if
|
||||
store SYMBOL_VALUE at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.Value
|
||||
store SYMBOL_SECTION_INDEX at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.SectionNumber
|
||||
store SYMBOL_CLASS at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.StorageClass
|
||||
if SYMBOL_CLASS = IMAGE_SYM_CLASS_WEAK_EXTERNAL
|
||||
store 1 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.NumberOfAuxSymbols
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
store SYMBOL_TAG : 4 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL
|
||||
store IMAGE_WEAK_EXTERN_SEARCH_ALIAS : 4 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + 4
|
||||
end if
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro extrn? declaration*
|
||||
namespace COFF
|
||||
local sym,psym
|
||||
element sym : relocatable * (-1) + SYMBOL_INDEX
|
||||
match str =as? name:size, declaration
|
||||
label name:size at sym
|
||||
SYMBOL_NAME = string str
|
||||
else match name:size, declaration
|
||||
label name:size at sym
|
||||
SYMBOL_NAME = `name
|
||||
else match str =as? name, declaration
|
||||
label name at sym
|
||||
SYMBOL_NAME = string str
|
||||
else
|
||||
label declaration at sym
|
||||
SYMBOL_NAME = `declaration
|
||||
end match
|
||||
if lengthof SYMBOL_NAME > 8
|
||||
store 0 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.Zeroes
|
||||
store STRING_POSITION at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.Offset
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
else
|
||||
store SYMBOL_NAME : 8 at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.ShortName
|
||||
end if
|
||||
store IMAGE_SYM_CLASS_EXTERNAL at symbol_table : SYMBOL_INDEX * sizeof IMAGE_SYMBOL + IMAGE_SYMBOL.StorageClass
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
element COFF.IMAGE_BASE
|
||||
RVA? equ -COFF.IMAGE_BASE+
|
||||
|
||||
if COFF.MACHINE = IMAGE_FILE_MACHINE_I386
|
||||
|
||||
calminstruction dword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto COFF.relocatable
|
||||
jyes dir32
|
||||
check ~ value relativeto 0 & (value + COFF.IMAGE_BASE) relativeto 1 elementof (value + COFF.IMAGE_BASE) & 1 elementof (1 metadataof (value + COFF.IMAGE_BASE)) relativeto COFF.relocatable
|
||||
jyes dir32nb
|
||||
check ~ value relativeto 0 & (value + COFF.SECTION_BASE) relativeto 1 elementof (value + COFF.SECTION_BASE)
|
||||
jno plain
|
||||
check 1 elementof (1 metadataof (value + COFF.SECTION_BASE)) relativeto COFF.relocatable
|
||||
jyes rel32
|
||||
plain:
|
||||
emit 4, value
|
||||
exit
|
||||
local offset, symndx, type
|
||||
dir32:
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_I386_DIR32
|
||||
jump add_relocation
|
||||
dir32nb:
|
||||
compute value, value + COFF.IMAGE_BASE
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_I386_DIR32NB
|
||||
jump add_relocation
|
||||
rel32:
|
||||
compute value, value + (COFF.SECTION_BASE + $% + 4 - COFF.SECTION_OFFSET)
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_I386_REL32
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
compute offset, $%
|
||||
emit 4, 0 scaleof value
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - COFF.SECTION_OFFSET
|
||||
local relocation
|
||||
compute relocation, COFF.RELOCATION_INDEX * sizeof IMAGE_RELOCATION
|
||||
asm store offset at COFF.relocations : relocation + IMAGE_RELOCATION.VirtualAddress
|
||||
asm store symndx at COFF.relocations : relocation + IMAGE_RELOCATION.SymbolTableIndex
|
||||
asm store type at COFF.relocations : relocation + IMAGE_RELOCATION.Type
|
||||
compute COFF.RELOCATION_INDEX, COFF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
calminstruction qword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto COFF.relocatable
|
||||
jyes dir32
|
||||
check ~ value relativeto 0 & (value + COFF.IMAGE_BASE) relativeto 1 elementof (value + COFF.IMAGE_BASE) & 1 elementof (1 metadataof (value + COFF.IMAGE_BASE)) relativeto COFF.relocatable
|
||||
jyes dir32nb
|
||||
plain:
|
||||
emit 8, value
|
||||
exit
|
||||
local offset, symndx, type
|
||||
dir32:
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_I386_DIR32
|
||||
jump add_relocation
|
||||
dir32nb:
|
||||
compute value, value + COFF.IMAGE_BASE
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_I386_DIR32NB
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
compute offset, $%
|
||||
emit 8, 0 scaleof value
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - COFF.SECTION_OFFSET
|
||||
local relocation
|
||||
compute relocation, COFF.RELOCATION_INDEX * sizeof IMAGE_RELOCATION
|
||||
asm store offset at COFF.relocations : relocation + IMAGE_RELOCATION.VirtualAddress
|
||||
asm store symndx at COFF.relocations : relocation + IMAGE_RELOCATION.SymbolTableIndex
|
||||
asm store type at COFF.relocations : relocation + IMAGE_RELOCATION.Type
|
||||
compute COFF.RELOCATION_INDEX, COFF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
else if COFF.MACHINE = IMAGE_FILE_MACHINE_AMD64
|
||||
|
||||
calminstruction dword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto COFF.relocatable
|
||||
jyes addr32
|
||||
check ~ value relativeto 0 & (value + COFF.IMAGE_BASE) relativeto 1 elementof (value + COFF.IMAGE_BASE) & 1 elementof (1 metadataof (value + COFF.IMAGE_BASE)) relativeto COFF.relocatable
|
||||
jyes addr32nb
|
||||
check ~ value relativeto 0 & (value + COFF.SECTION_BASE) relativeto 1 elementof (value + COFF.SECTION_BASE)
|
||||
jno plain
|
||||
check 1 elementof (1 metadataof (value + COFF.SECTION_BASE)) relativeto COFF.relocatable
|
||||
jyes rel32
|
||||
plain:
|
||||
emit 4, value
|
||||
exit
|
||||
local offset, symndx, type
|
||||
addr32:
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_AMD64_ADDR32
|
||||
jump add_relocation
|
||||
addr32nb:
|
||||
compute value, value + COFF.IMAGE_BASE
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_AMD64_ADDR32NB
|
||||
jump add_relocation
|
||||
rel32:
|
||||
compute value, value + (COFF.SECTION_BASE + $% + 4 - COFF.SECTION_OFFSET)
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_AMD64_REL32
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
compute offset, $%
|
||||
emit 4, 0 scaleof value
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - COFF.SECTION_OFFSET
|
||||
local relocation
|
||||
compute relocation, COFF.RELOCATION_INDEX * sizeof IMAGE_RELOCATION
|
||||
asm store offset at COFF.relocations : relocation + IMAGE_RELOCATION.VirtualAddress
|
||||
asm store symndx at COFF.relocations : relocation + IMAGE_RELOCATION.SymbolTableIndex
|
||||
asm store type at COFF.relocations : relocation + IMAGE_RELOCATION.Type
|
||||
compute COFF.RELOCATION_INDEX, COFF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
calminstruction qword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto COFF.relocatable
|
||||
jyes addr64
|
||||
check ~ value relativeto 0 & (value + COFF.IMAGE_BASE) relativeto 1 elementof (value + COFF.IMAGE_BASE) & 1 elementof (1 metadataof (value + COFF.IMAGE_BASE)) relativeto COFF.relocatable
|
||||
jyes addr64nb
|
||||
plain:
|
||||
emit 8, value
|
||||
exit
|
||||
local offset, symndx, type
|
||||
addr64:
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_AMD64_ADDR64
|
||||
jump add_relocation
|
||||
addr64nb:
|
||||
compute value, value + COFF.IMAGE_BASE
|
||||
compute symndx, 0 scaleof (1 metadataof value)
|
||||
compute type, IMAGE_REL_AMD64_ADDR64NB
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
compute offset, $%
|
||||
emit 8, 0 scaleof value
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - COFF.SECTION_OFFSET
|
||||
local relocation
|
||||
compute relocation, COFF.RELOCATION_INDEX * sizeof IMAGE_RELOCATION
|
||||
asm store offset at COFF.relocations : relocation + IMAGE_RELOCATION.VirtualAddress
|
||||
asm store symndx at COFF.relocations : relocation + IMAGE_RELOCATION.SymbolTableIndex
|
||||
asm store type at COFF.relocations : relocation + IMAGE_RELOCATION.Type
|
||||
compute COFF.RELOCATION_INDEX, COFF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
end if
|
||||
|
||||
postpone
|
||||
purge section?
|
||||
section
|
||||
namespace COFF
|
||||
|
||||
NUMBER_OF_SECTIONS := SECTION_INDEX
|
||||
STRING_TABLE_SIZE := STRING_POSITION
|
||||
NUMBER_OF_SYMBOLS := SYMBOL_INDEX
|
||||
NUMBER_OF_RELOCATIONS := RELOCATION_INDEX
|
||||
|
||||
RELOCATIONS_OFFSET = $%
|
||||
load byte_sequence : NUMBER_OF_RELOCATIONS * sizeof IMAGE_RELOCATION from relocations:0
|
||||
db byte_sequence
|
||||
|
||||
SYMBOL_TABLE_OFFSET = $%
|
||||
load byte_sequence : NUMBER_OF_SYMBOLS * sizeof IMAGE_SYMBOL from symbol_table:0
|
||||
db byte_sequence
|
||||
|
||||
load byte_sequence : STRING_TABLE_SIZE from string_table:0
|
||||
db byte_sequence
|
||||
|
||||
end namespace
|
||||
end postpone
|
573
toolchain/fasm2/include/format/elf32.inc
Normal file
573
toolchain/fasm2/include/format/elf32.inc
Normal file
@ -0,0 +1,573 @@
|
||||
|
||||
macro struct? name
|
||||
macro end?.struct?!
|
||||
end namespace
|
||||
esc end struc
|
||||
virtual at 0
|
||||
name name
|
||||
sizeof.name = $
|
||||
end virtual
|
||||
purge end?.struct?
|
||||
end macro
|
||||
esc struc name
|
||||
label . : sizeof.name
|
||||
namespace .
|
||||
end macro
|
||||
|
||||
struct Elf32_Shdr
|
||||
sh_name dd ?
|
||||
sh_type dd ?
|
||||
sh_flags dd ?
|
||||
sh_addr dd ?
|
||||
sh_offset dd ?
|
||||
sh_size dd ?
|
||||
sh_link dd ?
|
||||
sh_info dd ?
|
||||
sh_addralign dd ?
|
||||
sh_entsize dd ?
|
||||
end struct
|
||||
|
||||
struct Elf32_Sym
|
||||
st_name dd ?
|
||||
st_value dd ?
|
||||
st_size dd ?
|
||||
st_info db ?
|
||||
st_other db ?
|
||||
st_shndx dw ?
|
||||
end struct
|
||||
|
||||
struct Elf32_Rel
|
||||
r_offset dd ?
|
||||
r_info dd ?
|
||||
end struct
|
||||
|
||||
struct Elf32_Rela
|
||||
r_offset dd ?
|
||||
r_info dd ?
|
||||
r_addend dd ?
|
||||
end struct
|
||||
|
||||
struct Elf32_Phdr
|
||||
p_type dd ?
|
||||
p_offset dd ?
|
||||
p_vaddr dd ?
|
||||
p_paddr dd ?
|
||||
p_filesz dd ?
|
||||
p_memsz dd ?
|
||||
p_flags dd ?
|
||||
p_align dd ?
|
||||
end struct
|
||||
|
||||
purge struct?
|
||||
|
||||
ELFCLASSNONE = 0
|
||||
ELFCLASS32 = 1
|
||||
ELFCLASS64 = 2
|
||||
|
||||
ELFDATANONE = 0
|
||||
ELFDATA2LSB = 1
|
||||
ELFDATA2MSB = 2
|
||||
|
||||
ELFOSABI_NONE = 0
|
||||
ELFOSABI_HPUX = 1
|
||||
ELFOSABI_NETBSD = 2
|
||||
ELFOSABI_GNU = 3
|
||||
ELFOSABI_LINUX = 3
|
||||
ELFOSABI_SOLARIS = 6
|
||||
ELFOSABI_AIX = 7
|
||||
ELFOSABI_IRIX = 8
|
||||
ELFOSABI_FREEBSD = 9
|
||||
ELFOSABI_TRU64 = 10
|
||||
ELFOSABI_MODESTO = 11
|
||||
ELFOSABI_OPENBSD = 12
|
||||
ELFOSABI_OPENVMS = 13
|
||||
ELFOSABI_NSK = 14
|
||||
ELFOSABI_AROS = 15
|
||||
ELFOSABI_FENIXOS = 16
|
||||
ELFOSABI_CLOUDABI = 17
|
||||
ELFOSABI_OPENVOS = 18
|
||||
|
||||
ET_NONE = 0
|
||||
ET_REL = 1
|
||||
ET_EXEC = 2
|
||||
ET_DYN = 3
|
||||
ET_CORE = 4
|
||||
ET_LOPROC = 0xff00
|
||||
ET_HIPROC = 0xffff
|
||||
|
||||
EM_NONE = 0
|
||||
EM_M32 = 1
|
||||
EM_SPARC = 2
|
||||
EM_386 = 3
|
||||
EM_68K = 4
|
||||
EM_88K = 5
|
||||
EM_860 = 7
|
||||
EM_MIPS = 8
|
||||
EM_X86_64 = 62
|
||||
|
||||
EV_NONE = 0
|
||||
EV_CURRENT = 1
|
||||
|
||||
SHN_UNDEF = 0
|
||||
SHN_LORESERVE = 0xff00
|
||||
SHN_LOPROC = 0xff00
|
||||
SHN_HIPROC = 0xff1f
|
||||
SHN_ABS = 0xfff1
|
||||
SHN_COMMON = 0xfff2
|
||||
SHN_HIRESERVE = 0xffff
|
||||
|
||||
SHT_NULL = 0
|
||||
SHT_PROGBITS = 1
|
||||
SHT_SYMTAB = 2
|
||||
SHT_STRTAB = 3
|
||||
SHT_RELA = 4
|
||||
SHT_HASH = 5
|
||||
SHT_DYNAMIC = 6
|
||||
SHT_NOTE = 7
|
||||
SHT_NOBITS = 8
|
||||
SHT_REL = 9
|
||||
SHT_SHLIB = 10
|
||||
SHT_DYNSYM = 11
|
||||
SHT_LOPROC = 0x70000000
|
||||
SHT_HIPROC = 0x7fffffff
|
||||
SHT_LOUSER = 0x80000000
|
||||
SHT_HIUSER = 0xffffffff
|
||||
|
||||
SHF_WRITE = 0x1
|
||||
SHF_ALLOC = 0x2
|
||||
SHF_EXECINSTR = 0x4
|
||||
SHF_MASKPROC = 0xf0000000
|
||||
|
||||
STT_NOTYPE = 0
|
||||
STT_OBJECT = 1
|
||||
STT_FUNC = 2
|
||||
STT_SECTION = 3
|
||||
STT_FILE = 4
|
||||
STT_LOPROC = 13
|
||||
STT_HIPROC = 15
|
||||
|
||||
STB_LOCAL = 0
|
||||
STB_GLOBAL = 1
|
||||
STB_WEAK = 2
|
||||
STB_LOPROC = 13
|
||||
STB_HIPROC = 15
|
||||
|
||||
R_386_NONE = 0
|
||||
R_386_32 = 1
|
||||
R_386_PC32 = 2
|
||||
R_386_GOT32 = 3
|
||||
R_386_PLT32 = 4
|
||||
R_386_COPY = 5
|
||||
R_386_GLOB_DAT = 6
|
||||
R_386_JMP_SLOT = 7
|
||||
R_386_RELATIVE = 8
|
||||
R_386_GOTOFF = 9
|
||||
R_386_GOTPC = 10
|
||||
|
||||
R_X86_64_NONE = 0
|
||||
R_X86_64_64 = 1
|
||||
R_X86_64_PC32 = 2
|
||||
R_X86_64_GOT32 = 3
|
||||
R_X86_64_PLT32 = 4
|
||||
R_X86_64_COPY = 5
|
||||
R_X86_64_GLOB_DAT = 6
|
||||
R_X86_64_JUMP_SLOT = 7
|
||||
R_X86_64_RELATIVE = 8
|
||||
R_X86_64_GOTPCREL = 9
|
||||
R_X86_64_32 = 10
|
||||
R_X86_64_32S = 11
|
||||
R_X86_64_16 = 12
|
||||
R_X86_64_PC16 = 13
|
||||
R_X86_64_8 = 14
|
||||
R_X86_64_PC8 = 15
|
||||
R_X86_64_DPTMOD64 = 16
|
||||
R_X86_64_DTPOFF64 = 17
|
||||
R_X86_64_TPOFF64 = 18
|
||||
R_X86_64_TLSGD = 19
|
||||
R_X86_64_TLSLD = 20
|
||||
R_X86_64_DTPOFF32 = 21
|
||||
R_X86_64_GOTTPOFF = 22
|
||||
R_X86_64_TPOFF32 = 23
|
||||
R_X86_64_PC64 = 24
|
||||
R_X86_64_GOTOFF64 = 25
|
||||
R_X86_64_GOTPC32 = 26
|
||||
|
||||
ELF::
|
||||
|
||||
namespace ELF
|
||||
|
||||
if defined Settings.Machine
|
||||
MACHINE := Settings.Machine
|
||||
else
|
||||
MACHINE := EM_386
|
||||
end if
|
||||
|
||||
if defined Settings.ABI
|
||||
ABI := Settings.ABI
|
||||
else
|
||||
ABI := ELFOSABI_NONE
|
||||
end if
|
||||
|
||||
if MACHINE = EM_386
|
||||
R_32 = R_386_32
|
||||
R_PC32 = R_386_PC32
|
||||
R_GOTOFF = R_386_GOTOFF
|
||||
R_PLT32 = R_386_PLT32
|
||||
else if MACHINE = EM_X86_64
|
||||
R_32 = R_X86_64_32
|
||||
R_PC32 = R_X86_64_PC32
|
||||
R_PLT32 = R_X86_64_PLT32
|
||||
end if
|
||||
|
||||
Header:
|
||||
|
||||
e_ident db 0x7F,'ELF',ELFCLASS32,ELFDATA2LSB,EV_CURRENT,ABI,(16-$) dup 0
|
||||
e_type dw ET_REL
|
||||
e_machine dw MACHINE
|
||||
e_version dd EV_CURRENT
|
||||
e_entry dd 0
|
||||
e_phoff dd 0
|
||||
e_shoff dd SECTION_TABLE_OFFSET
|
||||
e_flags dd 0
|
||||
e_ehsize dw Content
|
||||
e_phentsize dw 0
|
||||
e_phnum dw 0
|
||||
e_shentsize dw sizeof Elf32_Shdr
|
||||
e_shnum dw NUMBER_OF_SECTIONS
|
||||
e_shstrndx dw STRING_TABLE_SECTION_INDEX
|
||||
|
||||
Content:
|
||||
|
||||
virtual at 0
|
||||
section_table:: rb NUMBER_OF_SECTIONS * sizeof Elf32_Shdr
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
symbol_table:: rb NUMBER_OF_SYMBOLS * sizeof Elf32_Sym
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
string_table::
|
||||
_null db 0
|
||||
_symtab db '.symtab',0
|
||||
_strtab db '.strtab',0
|
||||
SECTION_NAME_POSITION = $
|
||||
rb SECTION_NAME_TABLE_SIZE - $
|
||||
STRING_POSITION = $
|
||||
rb STRING_TABLE_SIZE - $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
relocations:: rb NUMBER_OF_RELOCATIONS * sizeof Elf32_Rel
|
||||
end virtual
|
||||
|
||||
element relocatable?
|
||||
|
||||
macro section_org
|
||||
local sym
|
||||
element sym : relocatable * SECTION_INDEX + SECTION_SYMBOL_INDEX
|
||||
SECTION_BASE = sym
|
||||
org sym
|
||||
align.assume sym, SECTION_ALIGN
|
||||
end macro
|
||||
|
||||
RELOCATION_INDEX = 0
|
||||
SECTION_INDEX = 1
|
||||
SECTION_SYMBOL_INDEX = SECTION_INDEX
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
SYMBOL_INDEX = NUMBER_OF_SECTION_SYMBOLS
|
||||
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 4
|
||||
SECTION_NAME = '.flat'
|
||||
SECTION_FLAGS = SHF_ALLOC + SHF_WRITE + SHF_EXECINSTR
|
||||
DEFINED_SECTION = 0
|
||||
section_org
|
||||
|
||||
end namespace
|
||||
|
||||
macro section?
|
||||
namespace ELF
|
||||
|
||||
SECTION_SIZE = $% - SECTION_OFFSET
|
||||
|
||||
if DEFINED_SECTION | SECTION_SIZE > 0
|
||||
|
||||
store SECTION_OFFSET at section_table : Elf32_Shdr.sh_offset + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SECTION_SIZE at section_table : Elf32_Shdr.sh_size + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SECTION_ALIGN at section_table : Elf32_Shdr.sh_addralign + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SECTION_FLAGS at section_table : Elf32_Shdr.sh_flags + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
|
||||
if $%% = SECTION_OFFSET
|
||||
store SHT_NOBITS at section_table : Elf32_Shdr.sh_type + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
section $
|
||||
else
|
||||
store SHT_PROGBITS at section_table : Elf32_Shdr.sh_type + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
UNINITIALIZED_LENGTH = $% - $%%
|
||||
section $
|
||||
db UNINITIALIZED_LENGTH dup 0
|
||||
end if
|
||||
|
||||
store SECTION_INDEX at symbol_table : Elf32_Sym.st_shndx + SECTION_SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store STT_SECTION + STB_LOCAL shl 4 at symbol_table : Elf32_Sym.st_info + SECTION_SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
|
||||
if RELOCATION_INDEX > SECTION_RELOCATION_INDEX
|
||||
|
||||
store RELOCATIONS_OFFSET + SECTION_RELOCATION_INDEX * sizeof Elf32_Rel at section_table : Elf32_Shdr.sh_offset + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store (RELOCATION_INDEX - SECTION_RELOCATION_INDEX) * sizeof Elf32_Rel at section_table : Elf32_Shdr.sh_size + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store SHT_REL at section_table : Elf32_Shdr.sh_type + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store SYMBOL_TABLE_SECTION_INDEX at section_table : Elf32_Shdr.sh_link + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store SECTION_INDEX at section_table : Elf32_Shdr.sh_info + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store sizeof Elf32_Rel at section_table : Elf32_Shdr.sh_entsize + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store 4 at section_table : Elf32_Shdr.sh_addralign + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
|
||||
store SECTION_NAME_POSITION at section_table : Elf32_Shdr.sh_name + (SECTION_INDEX+1) * sizeof Elf32_Shdr
|
||||
store SECTION_NAME_POSITION + 4 at section_table : Elf32_Shdr.sh_name + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SECTION_NAME_POSITION + 4 at symbol_table : Elf32_Sym.st_name + SECTION_SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store '.rel' + SECTION_NAME shl (4*8) : 4 + lengthof (string SECTION_NAME) at string_table:SECTION_NAME_POSITION
|
||||
SECTION_NAME_POSITION = SECTION_NAME_POSITION + 4 + lengthof (string SECTION_NAME) + 1
|
||||
|
||||
SECTION_INDEX = SECTION_INDEX + 2
|
||||
SECTION_SYMBOL_INDEX = SECTION_SYMBOL_INDEX + 1
|
||||
|
||||
else
|
||||
store SECTION_NAME_POSITION at section_table : Elf32_Shdr.sh_name + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SECTION_NAME_POSITION at symbol_table : Elf32_Sym.st_name + SECTION_SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store SECTION_NAME : lengthof (string SECTION_NAME) at string_table:SECTION_NAME_POSITION
|
||||
SECTION_NAME_POSITION = SECTION_NAME_POSITION + lengthof (string SECTION_NAME) + 1
|
||||
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
SECTION_SYMBOL_INDEX = SECTION_SYMBOL_INDEX + 1
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro section? declaration*
|
||||
namespace ELF
|
||||
|
||||
section
|
||||
|
||||
DEFINED_SECTION = 1
|
||||
SECTION_FLAGS = SHF_ALLOC
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 4
|
||||
|
||||
match name attributes, declaration
|
||||
|
||||
SECTION_NAME = name
|
||||
|
||||
local seq,list
|
||||
match flags =align? boundary, attributes
|
||||
SECTION_ALIGN = boundary
|
||||
define seq flags
|
||||
else match =align? boundary, attributes
|
||||
SECTION_ALIGN = boundary
|
||||
define seq
|
||||
else
|
||||
define seq attributes
|
||||
end match
|
||||
while 1
|
||||
match car cdr, seq
|
||||
define list car
|
||||
define seq cdr
|
||||
else
|
||||
match any, seq
|
||||
define list any
|
||||
end match
|
||||
break
|
||||
end match
|
||||
end while
|
||||
irpv attribute, list
|
||||
match =writeable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or SHF_WRITE
|
||||
else match =executable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or SHF_EXECINSTR
|
||||
else
|
||||
err 'unknown attribute "',`attribute,'"'
|
||||
end match
|
||||
end irpv
|
||||
|
||||
else
|
||||
|
||||
SECTION_NAME = declaration
|
||||
|
||||
end match
|
||||
|
||||
section_org
|
||||
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro public? declaration*
|
||||
namespace ELF
|
||||
match value =as? str, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_SIZE = sizeof value
|
||||
SYMBOL_NAME = string str
|
||||
else
|
||||
SYMBOL_VALUE = declaration
|
||||
SYMBOL_SIZE = sizeof declaration
|
||||
SYMBOL_NAME = `declaration
|
||||
end match
|
||||
if SYMBOL_VALUE relativeto 1 elementof SYMBOL_VALUE & 1 elementof (1 metadataof SYMBOL_VALUE) relativeto relocatable & 1 scaleof (1 metadataof SYMBOL_VALUE) > 0
|
||||
SYMBOL_SECTION_INDEX = 1 scaleof (1 metadataof SYMBOL_VALUE)
|
||||
SYMBOL_VALUE = SYMBOL_VALUE - 1 elementof SYMBOL_VALUE
|
||||
else
|
||||
SYMBOL_SECTION_INDEX = SHN_ABS
|
||||
end if
|
||||
store STRING_POSITION at symbol_table : Elf32_Sym.st_name + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
store SYMBOL_VALUE at symbol_table : Elf32_Sym.st_value + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store SYMBOL_SIZE at symbol_table : Elf32_Sym.st_size + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store SYMBOL_SECTION_INDEX at symbol_table : Elf32_Sym.st_shndx + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
if SYMBOL_SIZE
|
||||
store STT_OBJECT + STB_GLOBAL shl 4 at symbol_table : Elf32_Sym.st_info + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
else
|
||||
store STT_FUNC + STB_GLOBAL shl 4 at symbol_table : Elf32_Sym.st_info + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
end if
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro extrn? declaration*
|
||||
namespace ELF
|
||||
local sym,psym
|
||||
element sym : relocatable * (-1) + SYMBOL_INDEX
|
||||
element psym : PLT + SYMBOL_INDEX
|
||||
match str =as? name:size, declaration
|
||||
label name:size at sym
|
||||
label PLT.name at psym
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_SIZE = size
|
||||
else match name:size, declaration
|
||||
label name:size at sym
|
||||
label PLT.name at psym
|
||||
SYMBOL_NAME = `name
|
||||
SYMBOL_SIZE = size
|
||||
else match str =as? name, declaration
|
||||
label name at sym
|
||||
label PLT.name at psym
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_SIZE = 0
|
||||
else
|
||||
label declaration at sym
|
||||
label PLT.declaration at psym
|
||||
SYMBOL_NAME = `declaration
|
||||
SYMBOL_SIZE = 0
|
||||
end match
|
||||
store STRING_POSITION at symbol_table : Elf32_Sym.st_name + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
store SYMBOL_SIZE at symbol_table : Elf32_Sym.st_size + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
store STT_NOTYPE + STB_GLOBAL shl 4 at symbol_table : Elf32_Sym.st_info + SYMBOL_INDEX * sizeof Elf32_Sym
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
element _GLOBAL_OFFSET_TABLE_
|
||||
RVA? equ -_GLOBAL_OFFSET_TABLE_+
|
||||
element PLT?
|
||||
|
||||
calminstruction dword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto ELF.relocatable
|
||||
jyes r_32
|
||||
check ~ value relativeto 0 & (value + _GLOBAL_OFFSET_TABLE_) relativeto 1 elementof (value + _GLOBAL_OFFSET_TABLE_) & 1 elementof (1 metadataof (value + _GLOBAL_OFFSET_TABLE_)) relativeto ELF.relocatable
|
||||
jyes r_gotoff
|
||||
check ~ value relativeto 0 & (value + ELF.SECTION_BASE) relativeto 1 elementof (value + ELF.SECTION_BASE)
|
||||
jno plain
|
||||
check 1 elementof (1 metadataof (value + ELF.SECTION_BASE)) relativeto ELF.relocatable
|
||||
jyes r_pc32
|
||||
check 1 elementof (1 metadataof (value + ELF.SECTION_BASE)) relativeto PLT
|
||||
jyes r_plt32
|
||||
plain:
|
||||
emit 4, value
|
||||
exit
|
||||
local offset, info
|
||||
r_32:
|
||||
compute info, ELF.R_32 + (0 scaleof (1 metadataof value)) shl 8
|
||||
jump add_relocation
|
||||
r_gotoff:
|
||||
compute value, value + _GLOBAL_OFFSET_TABLE_
|
||||
compute info, ELF.R_GOTOFF + (0 scaleof (1 metadataof value)) shl 8
|
||||
jump add_relocation
|
||||
r_pc32:
|
||||
compute value, value + (ELF.SECTION_BASE + $% - ELF.SECTION_OFFSET)
|
||||
compute info, ELF.R_PC32 + (0 scaleof (1 metadataof value)) shl 8
|
||||
jump add_relocation
|
||||
r_plt32:
|
||||
compute value, value + (ELF.SECTION_BASE + $% - ELF.SECTION_OFFSET)
|
||||
compute info, ELF.R_PLT32 + (0 scaleof (1 metadataof value)) shl 8
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
compute offset, $%
|
||||
emit 4, 0 scaleof value
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
local Rel
|
||||
compute Rel, ELF.RELOCATION_INDEX * sizeof Elf32_Rel
|
||||
asm store offset at ELF.relocations : Rel + Elf32_Rel.r_offset
|
||||
asm store info at ELF.relocations : Rel + Elf32_Rel.r_info
|
||||
compute ELF.RELOCATION_INDEX, ELF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
postpone
|
||||
purge section?
|
||||
section
|
||||
namespace ELF
|
||||
|
||||
SECTION_NAME_TABLE_SIZE := SECTION_NAME_POSITION
|
||||
STRING_TABLE_SIZE := STRING_POSITION
|
||||
|
||||
NUMBER_OF_SECTION_SYMBOLS := SECTION_SYMBOL_INDEX
|
||||
NUMBER_OF_SYMBOLS := SYMBOL_INDEX
|
||||
SYMBOL_TABLE_SIZE := NUMBER_OF_SYMBOLS * sizeof Elf32_Sym
|
||||
|
||||
NUMBER_OF_RELOCATIONS := RELOCATION_INDEX
|
||||
rb (-$%) and 11b
|
||||
RELOCATIONS_OFFSET = $%
|
||||
load byte_sequence : NUMBER_OF_RELOCATIONS * sizeof Elf32_Rel from relocations:0
|
||||
db byte_sequence
|
||||
|
||||
store _symtab at section_table : Elf32_Shdr.sh_name + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store $% at section_table : Elf32_Shdr.sh_offset + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SYMBOL_TABLE_SIZE at section_table : Elf32_Shdr.sh_size + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store sizeof Elf32_Sym at section_table : Elf32_Shdr.sh_entsize + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store 4 at section_table : Elf32_Shdr.sh_addralign + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SHT_SYMTAB at section_table : Elf32_Shdr.sh_type + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store STRING_TABLE_SECTION_INDEX at section_table : Elf32_Shdr.sh_link + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store NUMBER_OF_SECTION_SYMBOLS at section_table : Elf32_Shdr.sh_info + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
SYMBOL_TABLE_SECTION_INDEX := SECTION_INDEX
|
||||
load byte_sequence : SYMBOL_TABLE_SIZE from symbol_table:0
|
||||
db byte_sequence
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
|
||||
store _strtab at section_table : Elf32_Shdr.sh_name + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store $% at section_table : Elf32_Shdr.sh_offset + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store STRING_TABLE_SIZE at section_table : Elf32_Shdr.sh_size + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store 1 at section_table : Elf32_Shdr.sh_addralign + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
store SHT_STRTAB at section_table : Elf32_Shdr.sh_type + SECTION_INDEX * sizeof Elf32_Shdr
|
||||
STRING_TABLE_SECTION_INDEX := SECTION_INDEX
|
||||
load byte_sequence : STRING_TABLE_SIZE from string_table:0
|
||||
db byte_sequence
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
|
||||
assert SECTION_INDEX <= SHN_LORESERVE
|
||||
|
||||
NUMBER_OF_SECTIONS := SECTION_INDEX
|
||||
rb (-$%) and 11b
|
||||
SECTION_TABLE_OFFSET := $%
|
||||
load byte_sequence : NUMBER_OF_SECTIONS * sizeof Elf32_Shdr from section_table:0
|
||||
db byte_sequence
|
||||
|
||||
end namespace
|
||||
end postpone
|
611
toolchain/fasm2/include/format/elf64.inc
Normal file
611
toolchain/fasm2/include/format/elf64.inc
Normal file
@ -0,0 +1,611 @@
|
||||
|
||||
macro struct? name
|
||||
macro end?.struct?!
|
||||
end namespace
|
||||
esc end struc
|
||||
virtual at 0
|
||||
name name
|
||||
sizeof.name = $
|
||||
end virtual
|
||||
purge end?.struct?
|
||||
end macro
|
||||
esc struc name
|
||||
label . : sizeof.name
|
||||
namespace .
|
||||
end macro
|
||||
|
||||
struct Elf64_Shdr
|
||||
sh_name dd ?
|
||||
sh_type dd ?
|
||||
sh_flags dq ?
|
||||
sh_addr dq ?
|
||||
sh_offset dq ?
|
||||
sh_size dq ?
|
||||
sh_link dd ?
|
||||
sh_info dd ?
|
||||
sh_addralign dq ?
|
||||
sh_entsize dq ?
|
||||
end struct
|
||||
|
||||
struct Elf64_Sym
|
||||
st_name dd ?
|
||||
st_info db ?
|
||||
st_other db ?
|
||||
st_shndx dw ?
|
||||
st_value dq ?
|
||||
st_size dq ?
|
||||
end struct
|
||||
|
||||
struct Elf64_Rel
|
||||
r_offset dq ?
|
||||
r_info dq ?
|
||||
end struct
|
||||
|
||||
struct Elf64_Rela
|
||||
r_offset dq ?
|
||||
r_info dq ?
|
||||
r_addend dq ?
|
||||
end struct
|
||||
|
||||
struct Elf64_Phdr
|
||||
p_type dd ?
|
||||
p_flags dd ?
|
||||
p_offset dq ?
|
||||
p_vaddr dq ?
|
||||
p_paddr dq ?
|
||||
p_filesz dq ?
|
||||
p_memsz dq ?
|
||||
p_align dq ?
|
||||
end struct
|
||||
|
||||
purge struct?
|
||||
|
||||
ELFCLASSNONE = 0
|
||||
ELFCLASS32 = 1
|
||||
ELFCLASS64 = 2
|
||||
|
||||
ELFDATANONE = 0
|
||||
ELFDATA2LSB = 1
|
||||
ELFDATA2MSB = 2
|
||||
|
||||
ELFOSABI_NONE = 0
|
||||
ELFOSABI_HPUX = 1
|
||||
ELFOSABI_NETBSD = 2
|
||||
ELFOSABI_GNU = 3
|
||||
ELFOSABI_LINUX = 3
|
||||
ELFOSABI_SOLARIS = 6
|
||||
ELFOSABI_AIX = 7
|
||||
ELFOSABI_IRIX = 8
|
||||
ELFOSABI_FREEBSD = 9
|
||||
ELFOSABI_TRU64 = 10
|
||||
ELFOSABI_MODESTO = 11
|
||||
ELFOSABI_OPENBSD = 12
|
||||
ELFOSABI_OPENVMS = 13
|
||||
ELFOSABI_NSK = 14
|
||||
ELFOSABI_AROS = 15
|
||||
ELFOSABI_FENIXOS = 16
|
||||
ELFOSABI_CLOUDABI = 17
|
||||
ELFOSABI_OPENVOS = 18
|
||||
|
||||
ET_NONE = 0
|
||||
ET_REL = 1
|
||||
ET_EXEC = 2
|
||||
ET_DYN = 3
|
||||
ET_CORE = 4
|
||||
ET_LOPROC = 0xff00
|
||||
ET_HIPROC = 0xffff
|
||||
|
||||
EM_NONE = 0
|
||||
EM_IA_64 = 50
|
||||
EM_X86_64 = 62
|
||||
|
||||
EV_NONE = 0
|
||||
EV_CURRENT = 1
|
||||
|
||||
SHN_UNDEF = 0
|
||||
SHN_LORESERVE = 0xff00
|
||||
SHN_LOPROC = 0xff00
|
||||
SHN_HIPROC = 0xff1f
|
||||
SHN_ABS = 0xfff1
|
||||
SHN_COMMON = 0xfff2
|
||||
SHN_HIRESERVE = 0xffff
|
||||
|
||||
SHT_NULL = 0
|
||||
SHT_PROGBITS = 1
|
||||
SHT_SYMTAB = 2
|
||||
SHT_STRTAB = 3
|
||||
SHT_RELA = 4
|
||||
SHT_HASH = 5
|
||||
SHT_DYNAMIC = 6
|
||||
SHT_NOTE = 7
|
||||
SHT_NOBITS = 8
|
||||
SHT_REL = 9
|
||||
SHT_SHLIB = 10
|
||||
SHT_DYNSYM = 11
|
||||
SHT_LOPROC = 0x70000000
|
||||
SHT_HIPROC = 0x7fffffff
|
||||
SHT_LOUSER = 0x80000000
|
||||
SHT_HIUSER = 0xffffffff
|
||||
|
||||
SHF_WRITE = 0x1
|
||||
SHF_ALLOC = 0x2
|
||||
SHF_EXECINSTR = 0x4
|
||||
SHF_MASKPROC = 0xf0000000
|
||||
|
||||
STT_NOTYPE = 0
|
||||
STT_OBJECT = 1
|
||||
STT_FUNC = 2
|
||||
STT_SECTION = 3
|
||||
STT_FILE = 4
|
||||
STT_LOPROC = 13
|
||||
STT_HIPROC = 15
|
||||
|
||||
STB_LOCAL = 0
|
||||
STB_GLOBAL = 1
|
||||
STB_WEAK = 2
|
||||
STB_LOPROC = 13
|
||||
STB_HIPROC = 15
|
||||
|
||||
R_X86_64_NONE = 0
|
||||
R_X86_64_64 = 1
|
||||
R_X86_64_PC32 = 2
|
||||
R_X86_64_GOT32 = 3
|
||||
R_X86_64_PLT32 = 4
|
||||
R_X86_64_COPY = 5
|
||||
R_X86_64_GLOB_DAT = 6
|
||||
R_X86_64_JUMP_SLOT = 7
|
||||
R_X86_64_RELATIVE = 8
|
||||
R_X86_64_GOTPCREL = 9
|
||||
R_X86_64_32 = 10
|
||||
R_X86_64_32S = 11
|
||||
R_X86_64_16 = 12
|
||||
R_X86_64_PC16 = 13
|
||||
R_X86_64_8 = 14
|
||||
R_X86_64_PC8 = 15
|
||||
R_X86_64_DPTMOD64 = 16
|
||||
R_X86_64_DTPOFF64 = 17
|
||||
R_X86_64_TPOFF64 = 18
|
||||
R_X86_64_TLSGD = 19
|
||||
R_X86_64_TLSLD = 20
|
||||
R_X86_64_DTPOFF32 = 21
|
||||
R_X86_64_GOTTPOFF = 22
|
||||
R_X86_64_TPOFF32 = 23
|
||||
R_X86_64_PC64 = 24
|
||||
R_X86_64_GOTOFF64 = 25
|
||||
R_X86_64_GOTPC32 = 26
|
||||
|
||||
ELF::
|
||||
|
||||
namespace ELF
|
||||
|
||||
if defined Settings.Machine
|
||||
MACHINE := Settings.Machine
|
||||
else
|
||||
MACHINE := EM_X86_64
|
||||
end if
|
||||
|
||||
if defined Settings.ABI
|
||||
ABI := Settings.ABI
|
||||
else
|
||||
ABI := ELFOSABI_NONE
|
||||
end if
|
||||
|
||||
if MACHINE = EM_X86_64
|
||||
R_64 = R_X86_64_64
|
||||
R_32 = R_X86_64_32S
|
||||
R_PC32 = R_X86_64_PC32
|
||||
R_PLT32 = R_X86_64_PLT32
|
||||
R_GOT32 = R_X86_64_GOT32
|
||||
R_GOTPCREL = R_X86_64_GOTPCREL
|
||||
end if
|
||||
|
||||
Header:
|
||||
|
||||
e_ident db 0x7F,'ELF',ELFCLASS64,ELFDATA2LSB,EV_CURRENT,ABI,(16-$) dup 0
|
||||
e_type dw ET_REL
|
||||
e_machine dw MACHINE
|
||||
e_version dd EV_CURRENT
|
||||
e_entry dq 0
|
||||
e_phoff dq 0
|
||||
e_shoff dq SECTION_TABLE_OFFSET
|
||||
e_flags dd 0
|
||||
e_ehsize dw Content
|
||||
e_phentsize dw 0
|
||||
e_phnum dw 0
|
||||
e_shentsize dw sizeof Elf64_Shdr
|
||||
e_shnum dw NUMBER_OF_SECTIONS
|
||||
e_shstrndx dw STRING_TABLE_SECTION_INDEX
|
||||
|
||||
Content:
|
||||
|
||||
virtual at 0
|
||||
section_table:: rb NUMBER_OF_SECTIONS * sizeof Elf64_Shdr
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
symbol_table:: rb NUMBER_OF_SYMBOLS * sizeof Elf64_Sym
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
string_table::
|
||||
_null db 0
|
||||
_symtab db '.symtab',0
|
||||
_strtab db '.strtab',0
|
||||
SECTION_NAME_POSITION = $
|
||||
rb SECTION_NAME_TABLE_SIZE - $
|
||||
STRING_POSITION = $
|
||||
rb STRING_TABLE_SIZE - $
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
relocations:: rb NUMBER_OF_RELOCATIONS * sizeof Elf64_Rela
|
||||
end virtual
|
||||
|
||||
element relocatable?
|
||||
|
||||
macro section_org
|
||||
local sym
|
||||
element sym : relocatable * SECTION_INDEX + SECTION_SYMBOL_INDEX
|
||||
SECTION_BASE = sym
|
||||
org sym
|
||||
align.assume sym, SECTION_ALIGN
|
||||
end macro
|
||||
|
||||
RELOCATION_INDEX = 0
|
||||
SECTION_INDEX = 1
|
||||
SECTION_SYMBOL_INDEX = SECTION_INDEX
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
SYMBOL_INDEX = NUMBER_OF_SECTION_SYMBOLS
|
||||
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 8
|
||||
SECTION_NAME = '.flat'
|
||||
SECTION_FLAGS = SHF_ALLOC + SHF_WRITE + SHF_EXECINSTR
|
||||
DEFINED_SECTION = 0
|
||||
section_org
|
||||
|
||||
end namespace
|
||||
|
||||
macro section?
|
||||
namespace ELF
|
||||
|
||||
SECTION_SIZE = $% - SECTION_OFFSET
|
||||
|
||||
if DEFINED_SECTION | SECTION_SIZE > 0
|
||||
|
||||
store SECTION_OFFSET at section_table : Elf64_Shdr.sh_offset + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SECTION_SIZE at section_table : Elf64_Shdr.sh_size + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SECTION_ALIGN at section_table : Elf64_Shdr.sh_addralign + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SECTION_FLAGS at section_table : Elf64_Shdr.sh_flags + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
|
||||
if $%% = SECTION_OFFSET
|
||||
store SHT_NOBITS at section_table : Elf64_Shdr.sh_type + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
section $
|
||||
else
|
||||
store SHT_PROGBITS at section_table : Elf64_Shdr.sh_type + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
UNINITIALIZED_LENGTH = $% - $%%
|
||||
section $
|
||||
db UNINITIALIZED_LENGTH dup 0
|
||||
end if
|
||||
|
||||
store SECTION_INDEX at symbol_table : Elf64_Sym.st_shndx + SECTION_SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store STT_SECTION + STB_LOCAL shl 4 at symbol_table : Elf64_Sym.st_info + SECTION_SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
|
||||
if RELOCATION_INDEX > SECTION_RELOCATION_INDEX
|
||||
|
||||
store RELOCATIONS_OFFSET + SECTION_RELOCATION_INDEX * sizeof Elf64_Rela at section_table : Elf64_Shdr.sh_offset + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store (RELOCATION_INDEX - SECTION_RELOCATION_INDEX) * sizeof Elf64_Rela at section_table : Elf64_Shdr.sh_size + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store SHT_RELA at section_table : Elf64_Shdr.sh_type + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store SYMBOL_TABLE_SECTION_INDEX at section_table : Elf64_Shdr.sh_link + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store SECTION_INDEX at section_table : Elf64_Shdr.sh_info + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store sizeof Elf64_Rela at section_table : Elf64_Shdr.sh_entsize + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store 8 at section_table : Elf64_Shdr.sh_addralign + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
|
||||
store SECTION_NAME_POSITION at section_table : Elf64_Shdr.sh_name + (SECTION_INDEX+1) * sizeof Elf64_Shdr
|
||||
store SECTION_NAME_POSITION + 5 at section_table : Elf64_Shdr.sh_name + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SECTION_NAME_POSITION + 5 at symbol_table : Elf64_Sym.st_name + SECTION_SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store '.rela' + SECTION_NAME shl (5*8) : 5 + lengthof (string SECTION_NAME) at string_table:SECTION_NAME_POSITION
|
||||
SECTION_NAME_POSITION = SECTION_NAME_POSITION + 5 + lengthof (string SECTION_NAME) + 1
|
||||
|
||||
SECTION_INDEX = SECTION_INDEX + 2
|
||||
SECTION_SYMBOL_INDEX = SECTION_SYMBOL_INDEX + 1
|
||||
|
||||
else
|
||||
store SECTION_NAME_POSITION at section_table : Elf64_Shdr.sh_name + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SECTION_NAME_POSITION at symbol_table : Elf64_Sym.st_name + SECTION_SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store SECTION_NAME : lengthof (string SECTION_NAME) at string_table:SECTION_NAME_POSITION
|
||||
SECTION_NAME_POSITION = SECTION_NAME_POSITION + lengthof (string SECTION_NAME) + 1
|
||||
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
SECTION_SYMBOL_INDEX = SECTION_SYMBOL_INDEX + 1
|
||||
|
||||
end if
|
||||
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro section? declaration*
|
||||
namespace ELF
|
||||
|
||||
section
|
||||
|
||||
DEFINED_SECTION = 1
|
||||
SECTION_FLAGS = SHF_ALLOC
|
||||
SECTION_OFFSET = $%
|
||||
SECTION_ALIGN = 8
|
||||
|
||||
match name attributes, declaration
|
||||
|
||||
SECTION_NAME = name
|
||||
|
||||
local seq,list
|
||||
match flags =align? boundary, attributes
|
||||
SECTION_ALIGN = boundary
|
||||
define seq flags
|
||||
else match =align? boundary, attributes
|
||||
SECTION_ALIGN = boundary
|
||||
define seq
|
||||
else
|
||||
define seq attributes
|
||||
end match
|
||||
while 1
|
||||
match car cdr, seq
|
||||
define list car
|
||||
define seq cdr
|
||||
else
|
||||
match any, seq
|
||||
define list any
|
||||
end match
|
||||
break
|
||||
end match
|
||||
end while
|
||||
irpv attribute, list
|
||||
match =writeable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or SHF_WRITE
|
||||
else match =executable?, attribute
|
||||
SECTION_FLAGS = SECTION_FLAGS or SHF_EXECINSTR
|
||||
else
|
||||
err 'unknown attribute "',`attribute,'"'
|
||||
end match
|
||||
end irpv
|
||||
|
||||
else
|
||||
|
||||
SECTION_NAME = declaration
|
||||
|
||||
end match
|
||||
|
||||
section_org
|
||||
|
||||
SECTION_RELOCATION_INDEX = RELOCATION_INDEX
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro public? declaration*
|
||||
namespace ELF
|
||||
match value =as? str, declaration
|
||||
SYMBOL_VALUE = value
|
||||
SYMBOL_SIZE = sizeof value
|
||||
SYMBOL_NAME = string str
|
||||
else
|
||||
SYMBOL_VALUE = declaration
|
||||
SYMBOL_SIZE = sizeof declaration
|
||||
SYMBOL_NAME = `declaration
|
||||
end match
|
||||
if SYMBOL_VALUE relativeto 1 elementof SYMBOL_VALUE & 1 elementof (1 metadataof SYMBOL_VALUE) relativeto relocatable & 1 scaleof (1 metadataof SYMBOL_VALUE) > 0
|
||||
SYMBOL_SECTION_INDEX = 1 scaleof (1 metadataof SYMBOL_VALUE)
|
||||
SYMBOL_VALUE = SYMBOL_VALUE - 1 elementof SYMBOL_VALUE
|
||||
else
|
||||
SYMBOL_SECTION_INDEX = SHN_ABS
|
||||
end if
|
||||
store STRING_POSITION at symbol_table : Elf64_Sym.st_name + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
store SYMBOL_VALUE at symbol_table : Elf64_Sym.st_value + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store SYMBOL_SIZE at symbol_table : Elf64_Sym.st_size + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store SYMBOL_SECTION_INDEX at symbol_table : Elf64_Sym.st_shndx + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
if SYMBOL_SIZE
|
||||
store STT_OBJECT + STB_GLOBAL shl 4 at symbol_table : Elf64_Sym.st_info + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
else
|
||||
store STT_FUNC + STB_GLOBAL shl 4 at symbol_table : Elf64_Sym.st_info + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
end if
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro extrn? declaration*
|
||||
namespace ELF
|
||||
local sym,gsym,psym
|
||||
element sym : relocatable * (-1) + SYMBOL_INDEX
|
||||
element gsym : GOT + SYMBOL_INDEX
|
||||
element psym : PLT + SYMBOL_INDEX
|
||||
match str =as? name:size, declaration
|
||||
label name:size at sym
|
||||
label GOT.name at gsym
|
||||
label PLT.name at psym
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_SIZE = size
|
||||
else match name:size, declaration
|
||||
label name:size at sym
|
||||
label GOT.name at gsym
|
||||
label PLT.name at psym
|
||||
SYMBOL_NAME = `name
|
||||
SYMBOL_SIZE = size
|
||||
else match str =as? name, declaration
|
||||
label name at sym
|
||||
label GOT.name at gsym
|
||||
label PLT.name at psym
|
||||
SYMBOL_NAME = string str
|
||||
SYMBOL_SIZE = 0
|
||||
else
|
||||
label declaration at sym
|
||||
label GOT.declaration at gsym
|
||||
label PLT.declaration at psym
|
||||
SYMBOL_NAME = `declaration
|
||||
SYMBOL_SIZE = 0
|
||||
end match
|
||||
store STRING_POSITION at symbol_table : Elf64_Sym.st_name + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store SYMBOL_NAME : lengthof SYMBOL_NAME at string_table:STRING_POSITION
|
||||
STRING_POSITION = STRING_POSITION + lengthof SYMBOL_NAME + 1
|
||||
store SYMBOL_SIZE at symbol_table : Elf64_Sym.st_size + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
store STT_NOTYPE + STB_GLOBAL shl 4 at symbol_table : Elf64_Sym.st_info + SYMBOL_INDEX * sizeof Elf64_Sym
|
||||
SYMBOL_INDEX = SYMBOL_INDEX + 1
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
element GOT?
|
||||
element PLT?
|
||||
|
||||
calminstruction dword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto ELF.relocatable
|
||||
jyes r_32
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto GOT
|
||||
jyes r_got32
|
||||
check ~ value relativeto 0 & (value + ELF.SECTION_BASE) relativeto 1 elementof (value + ELF.SECTION_BASE)
|
||||
jno plain
|
||||
check 1 elementof (1 metadataof (value + ELF.SECTION_BASE)) relativeto ELF.relocatable
|
||||
jyes r_pc32
|
||||
check 1 elementof (1 metadataof (value + ELF.SECTION_BASE)) relativeto PLT
|
||||
jyes r_plt32
|
||||
check 1 elementof (1 metadataof (value + ELF.SECTION_BASE)) relativeto GOT
|
||||
jyes r_gotpcrel
|
||||
plain:
|
||||
emit 4, value
|
||||
exit
|
||||
local offset, addend, info
|
||||
r_32:
|
||||
compute offset, $%
|
||||
emit 4
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
compute addend, 0 scaleof value
|
||||
compute info, ELF.R_32 + (0 scaleof (1 metadataof value)) shl 32
|
||||
jump add_relocation
|
||||
r_pc32:
|
||||
compute offset, $%
|
||||
emit 4
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
compute addend,value + ELF.SECTION_BASE + offset - 1 elementof value
|
||||
compute info, ELF.R_PC32 + (0 scaleof (1 metadataof value)) shl 32
|
||||
jump add_relocation
|
||||
r_plt32:
|
||||
compute offset, $%
|
||||
emit 4
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
compute addend, value + ELF.SECTION_BASE + offset - 1 elementof value
|
||||
compute info, ELF.R_PLT32 + (0 scaleof (1 metadataof value)) shl 32
|
||||
jump add_relocation
|
||||
r_gotpcrel:
|
||||
compute offset, $%
|
||||
emit 4
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
compute addend, value + ELF.SECTION_BASE + offset - 1 elementof value
|
||||
compute info, ELF.R_GOTPCREL + (0 scaleof (1 metadataof value)) shl 32
|
||||
jump add_relocation
|
||||
r_got32:
|
||||
compute offset, $%
|
||||
emit 4
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
compute addend, 0 scaleof value
|
||||
compute info, ELF.R_GOT32 + (0 scaleof (1 metadataof value)) shl 32
|
||||
jump add_relocation
|
||||
add_relocation:
|
||||
local Rela
|
||||
compute Rela, ELF.RELOCATION_INDEX * sizeof Elf64_Rela
|
||||
asm store offset at ELF.relocations : Rela + Elf64_Rela.r_offset
|
||||
asm store addend at ELF.relocations : Rela + Elf64_Rela.r_addend
|
||||
asm store info at ELF.relocations : Rela + Elf64_Rela.r_info
|
||||
compute ELF.RELOCATION_INDEX, ELF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
calminstruction qword? value
|
||||
compute value, value
|
||||
check ~ value relativeto 0 & value relativeto 1 elementof value & 1 elementof (1 metadataof value) relativeto ELF.relocatable
|
||||
jyes r_64
|
||||
plain:
|
||||
emit 8, value
|
||||
exit
|
||||
local offset, addend, info
|
||||
r_64:
|
||||
compute offset, $%
|
||||
emit 8
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - ELF.SECTION_OFFSET
|
||||
compute addend, 0 scaleof value
|
||||
compute info, ELF.R_64 + (0 scaleof (1 metadataof value)) shl 32
|
||||
add_relocation:
|
||||
local Rela
|
||||
compute Rela, ELF.RELOCATION_INDEX * sizeof Elf64_Rela
|
||||
asm store offset at ELF.relocations : Rela + Elf64_Rela.r_offset
|
||||
asm store addend at ELF.relocations : Rela + Elf64_Rela.r_addend
|
||||
asm store info at ELF.relocations : Rela + Elf64_Rela.r_info
|
||||
compute ELF.RELOCATION_INDEX, ELF.RELOCATION_INDEX + 1
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
postpone
|
||||
purge section?
|
||||
section
|
||||
namespace ELF
|
||||
|
||||
SECTION_NAME_TABLE_SIZE := SECTION_NAME_POSITION
|
||||
STRING_TABLE_SIZE := STRING_POSITION
|
||||
|
||||
NUMBER_OF_SECTION_SYMBOLS := SECTION_SYMBOL_INDEX
|
||||
NUMBER_OF_SYMBOLS := SYMBOL_INDEX
|
||||
SYMBOL_TABLE_SIZE := NUMBER_OF_SYMBOLS * sizeof Elf64_Sym
|
||||
|
||||
NUMBER_OF_RELOCATIONS := RELOCATION_INDEX
|
||||
rb (-$%) and 111b
|
||||
RELOCATIONS_OFFSET = $%
|
||||
load byte_sequence : NUMBER_OF_RELOCATIONS * sizeof Elf64_Rela from relocations:0
|
||||
db byte_sequence
|
||||
|
||||
store _symtab at section_table : Elf64_Shdr.sh_name + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store $% at section_table : Elf64_Shdr.sh_offset + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SYMBOL_TABLE_SIZE at section_table : Elf64_Shdr.sh_size + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store sizeof Elf64_Sym at section_table : Elf64_Shdr.sh_entsize + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store 8 at section_table : Elf64_Shdr.sh_addralign + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SHT_SYMTAB at section_table : Elf64_Shdr.sh_type + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store STRING_TABLE_SECTION_INDEX at section_table : Elf64_Shdr.sh_link + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store NUMBER_OF_SECTION_SYMBOLS at section_table : Elf64_Shdr.sh_info + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
SYMBOL_TABLE_SECTION_INDEX := SECTION_INDEX
|
||||
load byte_sequence : SYMBOL_TABLE_SIZE from symbol_table:0
|
||||
db byte_sequence
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
|
||||
store _strtab at section_table : Elf64_Shdr.sh_name + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store $% at section_table : Elf64_Shdr.sh_offset + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store STRING_TABLE_SIZE at section_table : Elf64_Shdr.sh_size + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store 1 at section_table : Elf64_Shdr.sh_addralign + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
store SHT_STRTAB at section_table : Elf64_Shdr.sh_type + SECTION_INDEX * sizeof Elf64_Shdr
|
||||
STRING_TABLE_SECTION_INDEX := SECTION_INDEX
|
||||
load byte_sequence : STRING_TABLE_SIZE from string_table:0
|
||||
db byte_sequence
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
|
||||
assert SECTION_INDEX <= SHN_LORESERVE
|
||||
|
||||
NUMBER_OF_SECTIONS := SECTION_INDEX
|
||||
rb (-$%) and 111b
|
||||
SECTION_TABLE_OFFSET := $%
|
||||
load byte_sequence : NUMBER_OF_SECTIONS * sizeof Elf64_Shdr from section_table:0
|
||||
db byte_sequence
|
||||
|
||||
end namespace
|
||||
end postpone
|
321
toolchain/fasm2/include/format/elfexe.inc
Normal file
321
toolchain/fasm2/include/format/elfexe.inc
Normal file
@ -0,0 +1,321 @@
|
||||
|
||||
ELFCLASSNONE = 0
|
||||
ELFCLASS32 = 1
|
||||
ELFCLASS64 = 2
|
||||
|
||||
ELFDATANONE = 0
|
||||
ELFDATA2LSB = 1
|
||||
ELFDATA2MSB = 2
|
||||
|
||||
ELFOSABI_NONE = 0
|
||||
ELFOSABI_HPUX = 1
|
||||
ELFOSABI_NETBSD = 2
|
||||
ELFOSABI_GNU = 3
|
||||
ELFOSABI_LINUX = 3
|
||||
ELFOSABI_SOLARIS = 6
|
||||
ELFOSABI_AIX = 7
|
||||
ELFOSABI_IRIX = 8
|
||||
ELFOSABI_FREEBSD = 9
|
||||
ELFOSABI_TRU64 = 10
|
||||
ELFOSABI_MODESTO = 11
|
||||
ELFOSABI_OPENBSD = 12
|
||||
ELFOSABI_OPENVMS = 13
|
||||
ELFOSABI_NSK = 14
|
||||
ELFOSABI_AROS = 15
|
||||
ELFOSABI_FENIXOS = 16
|
||||
ELFOSABI_CLOUDABI = 17
|
||||
ELFOSABI_OPENVOS = 18
|
||||
|
||||
ET_NONE = 0
|
||||
ET_REL = 1
|
||||
ET_EXEC = 2
|
||||
ET_DYN = 3
|
||||
ET_CORE = 4
|
||||
ET_LOPROC = 0xff00
|
||||
ET_HIPROC = 0xffff
|
||||
|
||||
EM_NONE = 0
|
||||
EM_M32 = 1
|
||||
EM_SPARC = 2
|
||||
EM_386 = 3
|
||||
EM_68K = 4
|
||||
EM_88K = 5
|
||||
EM_860 = 7
|
||||
EM_MIPS = 8
|
||||
EM_X86_64 = 62
|
||||
|
||||
EV_NONE = 0
|
||||
EV_CURRENT = 1
|
||||
|
||||
PT_NULL = 0
|
||||
PT_LOAD = 1
|
||||
PT_DYNAMIC = 2
|
||||
PT_INTERP = 3
|
||||
PT_NOTE = 4
|
||||
PT_SHLIB = 5
|
||||
PT_PHDR = 6
|
||||
PT_GNU_EH_FRAME = 0x6474e550
|
||||
PT_GNU_STACK = 0x6474e551
|
||||
PT_GNU_RELRO = 0x6474e552
|
||||
PT_LOPROC = 0x70000000
|
||||
PT_HIPROC = 0x7fffffff
|
||||
|
||||
PF_X = 1
|
||||
PF_W = 2
|
||||
PF_R = 4
|
||||
PF_MASKOS = 0x0ff00000
|
||||
PF_MASKPROC = 0xf0000000
|
||||
|
||||
ELF::
|
||||
|
||||
namespace ELF
|
||||
|
||||
if defined Settings.Class
|
||||
CLASS := Settings.Class
|
||||
else
|
||||
CLASS := ELFCLASS32
|
||||
end if
|
||||
|
||||
if defined Settings.Type
|
||||
TYPE := Settings.Type
|
||||
else
|
||||
TYPE := ET_EXEC
|
||||
end if
|
||||
|
||||
if defined Settings.Machine
|
||||
MACHINE := Settings.Machine
|
||||
else
|
||||
MACHINE := EM_386
|
||||
end if
|
||||
|
||||
if defined Settings.ABI
|
||||
ABI := Settings.ABI
|
||||
else
|
||||
ABI := ELFOSABI_NONE
|
||||
end if
|
||||
|
||||
if TYPE = ET_DYN
|
||||
element DYNAMIC
|
||||
align.assume DYNAMIC, 1000h
|
||||
else
|
||||
DYNAMIC := 0
|
||||
end if
|
||||
|
||||
if defined Settings.BaseAddress
|
||||
BASE_ADDRESS := DYNAMIC + Settings.BaseAddress
|
||||
else
|
||||
BASE_ADDRESS := DYNAMIC + 8048000h
|
||||
end if
|
||||
|
||||
if defined Settings.LoadHeaders
|
||||
LOAD_HEADERS := Settings.LoadHeaders
|
||||
else
|
||||
LOAD_HEADERS := 1
|
||||
end if
|
||||
|
||||
Header:
|
||||
|
||||
e_ident db 0x7F,'ELF',CLASS,ELFDATA2LSB,EV_CURRENT,ABI,(16-$) dup 0
|
||||
e_type dw TYPE
|
||||
e_machine dw MACHINE
|
||||
e_version dd EV_CURRENT
|
||||
if CLASS <> ELFCLASS64
|
||||
e_entry dd start - DYNAMIC
|
||||
e_phoff dd ProgramHeader
|
||||
e_shoff dd 0
|
||||
e_flags dd 0
|
||||
e_ehsize dw ProgramHeader
|
||||
e_phentsize dw SEGMENT_HEADER_LENGTH
|
||||
e_phnum dw NUMBER_OF_SEGMENTS
|
||||
e_shentsize dw 28h
|
||||
e_shnum dw 0
|
||||
e_shstrndx dw 0
|
||||
else
|
||||
e_entry dq start - DYNAMIC
|
||||
e_phoff dq ProgramHeader
|
||||
e_shoff dq 0
|
||||
e_flags dd 0
|
||||
e_ehsize dw ProgramHeader
|
||||
e_phentsize dw SEGMENT_HEADER_LENGTH
|
||||
e_phnum dw NUMBER_OF_SEGMENTS
|
||||
e_shentsize dw 40h
|
||||
e_shnum dw 0
|
||||
e_shstrndx dw 0
|
||||
end if
|
||||
|
||||
ProgramHeader:
|
||||
if CLASS <> ELFCLASS64
|
||||
p_type dd PT_LOAD
|
||||
p_offset dd 0
|
||||
p_vaddr dd BASE_ADDRESS - DYNAMIC
|
||||
p_paddr dd BASE_ADDRESS - DYNAMIC
|
||||
p_filesz dd 0
|
||||
p_memsz dd 0
|
||||
p_flags dd PF_R+PF_W+PF_X
|
||||
p_align dd 1000h
|
||||
else
|
||||
p_type dd PT_LOAD
|
||||
p_flags dd PF_R+PF_W+PF_X
|
||||
p_offset dq 0
|
||||
p_vaddr dq BASE_ADDRESS - DYNAMIC
|
||||
p_paddr dq BASE_ADDRESS - DYNAMIC
|
||||
p_filesz dq 0
|
||||
p_memsz dq 0
|
||||
p_align dq 1000h
|
||||
end if
|
||||
|
||||
SEGMENT_HEADER_LENGTH = $ - ProgramHeader
|
||||
|
||||
db (NUMBER_OF_SEGMENTS-1)*SEGMENT_HEADER_LENGTH dup 0
|
||||
|
||||
HEADERS_OFFSET = 0
|
||||
HEADERS_BASE = BASE_ADDRESS
|
||||
OVERLAY_HEADERS = LOAD_HEADERS
|
||||
|
||||
SEGMENT_INDEX = 0
|
||||
DEFINED_SEGMENT = 0
|
||||
SEGMENT_TYPE = PT_LOAD
|
||||
FILE_OFFSET = $%
|
||||
SEGMENT_BASE = BASE_ADDRESS + FILE_OFFSET and 0FFFh
|
||||
org SEGMENT_BASE
|
||||
start:
|
||||
|
||||
end namespace
|
||||
|
||||
RVA? equ -ELF.BASE_ADDRESS +
|
||||
|
||||
macro entry? address*
|
||||
namespace ELF
|
||||
store address-DYNAMIC at ELF:e_entry
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro segment?
|
||||
namespace ELF
|
||||
|
||||
DEFINED_SEGMENT_SIZE = $ - SEGMENT_BASE
|
||||
|
||||
if (DEFINED_SEGMENT | DEFINED_SEGMENT_SIZE > 0) & SEGMENT_TYPE = PT_LOAD & OVERLAY_HEADERS
|
||||
FILE_OFFSET = HEADERS_OFFSET
|
||||
SEGMENT_BASE = HEADERS_BASE
|
||||
OVERLAY_HEADERS = 0
|
||||
end if
|
||||
|
||||
store SEGMENT_BASE-DYNAMIC at ELF:p_vaddr+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
store SEGMENT_BASE-DYNAMIC at ELF:p_paddr+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
store FILE_OFFSET at ELF:p_offset+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
|
||||
if SEGMENT_TYPE = PT_LOAD
|
||||
|
||||
RAW_DATA_SIZE = $%% - FILE_OFFSET
|
||||
SEGMENT_SIZE = $ - SEGMENT_BASE
|
||||
store RAW_DATA_SIZE at ELF:p_filesz+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
store SEGMENT_SIZE at ELF:p_memsz+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
|
||||
if DEFINED_SEGMENT | DEFINED_SEGMENT_SIZE > 0
|
||||
FILE_OFFSET = $%%
|
||||
align 1000h
|
||||
SEGMENT_BASE = $ + FILE_OFFSET and 0FFFh
|
||||
end if
|
||||
|
||||
section SEGMENT_BASE
|
||||
|
||||
else
|
||||
|
||||
if OVERLAY_HEADERS = 0 & ( LOAD_HEADERS | SEGMENT_TYPE = PT_GNU_RELRO ) & ~ SEGMENT_TYPE = PT_GNU_STACK & ~ SEGMENT_TYPE = PT_NOTE
|
||||
OVERLAY_HEADERS = 1
|
||||
HEADERS_OFFSET = FILE_OFFSET
|
||||
HEADERS_BASE = SEGMENT_BASE
|
||||
end if
|
||||
|
||||
FILE_OFFSET = $%
|
||||
SEGMENT_SIZE = $ - SEGMENT_BASE
|
||||
store SEGMENT_SIZE at ELF:p_filesz+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
store SEGMENT_SIZE at ELF:p_memsz+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
|
||||
if OVERLAY_HEADERS = 0
|
||||
SEGMENT_BASE = DYNAMIC + (SEGMENT_BASE-DYNAMIC) and not 0FFFh + FILE_OFFSET and 0FFFh
|
||||
else
|
||||
SEGMENT_BASE = $
|
||||
end if
|
||||
|
||||
if $% > $%%
|
||||
store 0:byte at $-1
|
||||
end if
|
||||
org SEGMENT_BASE
|
||||
|
||||
end if
|
||||
|
||||
if DEFINED_SEGMENT | DEFINED_SEGMENT_SIZE > 0
|
||||
SEGMENT_INDEX = SEGMENT_INDEX + 1
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro segment? attributes*
|
||||
namespace ELF
|
||||
|
||||
segment
|
||||
|
||||
SEGMENT_TYPE = PT_LOAD
|
||||
SEGMENT_FLAGS = 0
|
||||
|
||||
local seq,list
|
||||
define seq attributes
|
||||
while 1
|
||||
match car cdr, seq
|
||||
define list car
|
||||
define seq cdr
|
||||
else
|
||||
match any, seq
|
||||
define list any
|
||||
end match
|
||||
break
|
||||
end match
|
||||
end while
|
||||
irpv attribute, list
|
||||
match =readable?, attribute
|
||||
SEGMENT_FLAGS = SEGMENT_FLAGS or PF_R
|
||||
else match =writeable?, attribute
|
||||
SEGMENT_FLAGS = SEGMENT_FLAGS or PF_W
|
||||
else match =executable?, attribute
|
||||
SEGMENT_FLAGS = SEGMENT_FLAGS or PF_X
|
||||
else match =interpreter?, attribute
|
||||
SEGMENT_TYPE = PT_INTERP
|
||||
else match =dynamic?, attribute
|
||||
SEGMENT_TYPE = PT_DYNAMIC
|
||||
else match =note?, attribute
|
||||
SEGMENT_TYPE = PT_NOTE
|
||||
else match =gnustack?, attribute
|
||||
SEGMENT_TYPE = PT_GNU_STACK
|
||||
else match =gnuehframe?, attribute
|
||||
SEGMENT_TYPE = PT_GNU_EH_FRAME
|
||||
else match =gnurelro?, attribute
|
||||
SEGMENT_TYPE = PT_GNU_RELRO
|
||||
else
|
||||
err 'unknown attribute "',`attribute,'"'
|
||||
end match
|
||||
end irpv
|
||||
|
||||
DEFINED_SEGMENT = 1
|
||||
|
||||
store SEGMENT_TYPE at ELF:p_type+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
store SEGMENT_FLAGS at ELF:p_flags+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
|
||||
if SEGMENT_TYPE = PT_LOAD
|
||||
store 1000h at ELF:p_align+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
else
|
||||
store 1 at ELF:p_align+SEGMENT_INDEX*SEGMENT_HEADER_LENGTH
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
postpone
|
||||
purge segment?
|
||||
segment
|
||||
namespace ELF
|
||||
NUMBER_OF_SEGMENTS := SEGMENT_INDEX
|
||||
end namespace
|
||||
end postpone
|
1128
toolchain/fasm2/include/format/macho.inc
Normal file
1128
toolchain/fasm2/include/format/macho.inc
Normal file
File diff suppressed because it is too large
Load Diff
146
toolchain/fasm2/include/format/mz.inc
Normal file
146
toolchain/fasm2/include/format/mz.inc
Normal file
@ -0,0 +1,146 @@
|
||||
|
||||
MZ::
|
||||
.signature dw "MZ"
|
||||
.bytes_in_last_page dw .LENGTH and 1FFh
|
||||
.number_of_pages dw (.LENGTH-1) shr 9 + 1
|
||||
.number_of_relocations dw .NUMBER_OF_RELOCATIONS
|
||||
.number_of_header_paragraphs dw .HEADER_LENGTH shr 4
|
||||
.minimum_heap dw (.LENGTH+.RESERVED_LENGTH-1) shr 4 - (.LENGTH-1) shr 4
|
||||
.maximum_heap dw 0FFFFh
|
||||
.initial_ss dw 0
|
||||
.initial_sp dw 0
|
||||
.checksum dw 0
|
||||
.initial_ip dw 0
|
||||
.initial_cs dw 0
|
||||
.relocations_offset dw .relocations
|
||||
.overlay_number dw 0
|
||||
.relocations dw .NUMBER_OF_RELOCATIONS dup (?,?)
|
||||
rb 0Fh - ($%+0Fh) and 0Fh
|
||||
.HEADER_LENGTH = $
|
||||
.RELOCATION_INDEX = 0
|
||||
|
||||
.ENTRY_DEFINED = 0
|
||||
.HEAP_DEFINED = 0
|
||||
.STACK_DEFINED = 0
|
||||
.STACK_LENGTH = 1000h
|
||||
|
||||
org 0
|
||||
|
||||
macro entry? definition
|
||||
local v
|
||||
if MZ.ENTRY_DEFINED
|
||||
err 'setting already specified'
|
||||
else match seg:offs, definition
|
||||
v = seg
|
||||
if v relativeto MZ.segment
|
||||
store v - MZ.segment : word at MZ : MZ.initial_cs
|
||||
else
|
||||
err 'incorrect segment'
|
||||
end if
|
||||
v = offs
|
||||
if v >= 0 & v < 10000h
|
||||
store v : word at MZ : MZ.initial_ip
|
||||
else
|
||||
err 'value out of range'
|
||||
end if
|
||||
MZ.ENTRY_DEFINED = 1
|
||||
else
|
||||
err 'invalid argument'
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro heap? definition
|
||||
local v,min
|
||||
if MZ.HEAP_DEFINED
|
||||
err 'setting already specified'
|
||||
else
|
||||
v = definition
|
||||
if v >= 0 & v < 10000h
|
||||
load min : word from MZ : MZ.minimum_heap
|
||||
v = v + min
|
||||
if v > 0FFFFh
|
||||
v = 0FFFFh
|
||||
end if
|
||||
store v : word at MZ : MZ.maximum_heap
|
||||
else
|
||||
err 'value out of range'
|
||||
end if
|
||||
MZ.HEAP_DEFINED = 1
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro stack? definition
|
||||
local v
|
||||
if MZ.STACK_DEFINED
|
||||
err 'setting already specified'
|
||||
else match seg:offs, definition
|
||||
v = seg
|
||||
if v relativeto MZ.segment
|
||||
store v - MZ.segment : word at MZ : MZ.initial_ss
|
||||
else
|
||||
err 'incorrect segment'
|
||||
end if
|
||||
v = offs
|
||||
if v >= 0 & v < 10000h
|
||||
store v : word at MZ : MZ.initial_sp
|
||||
else
|
||||
err 'value out of range'
|
||||
end if
|
||||
MZ.STACK_DEFINED = 1
|
||||
MZ.STACK_LENGTH = 0
|
||||
else
|
||||
MZ.STACK_DEFINED = 1
|
||||
MZ.STACK_LENGTH = definition
|
||||
end match
|
||||
end macro
|
||||
|
||||
element MZ.segment
|
||||
|
||||
macro segment? definition
|
||||
rb 0Fh - ($%+0Fh) and 0Fh
|
||||
match name =use16?, definition
|
||||
name := MZ.segment + ($%-MZ.HEADER_LENGTH) shr 4
|
||||
use16
|
||||
else match name =use32?, definition
|
||||
name := MZ.segment + ($%-MZ.HEADER_LENGTH) shr 4
|
||||
use32
|
||||
else match name, definition
|
||||
name := MZ.segment + ($%-MZ.HEADER_LENGTH) shr 4
|
||||
end match
|
||||
org 0
|
||||
end macro
|
||||
|
||||
iterate word, word,dword
|
||||
|
||||
calminstruction word? value
|
||||
compute value, value
|
||||
check value relativeto MZ.segment
|
||||
jno plain
|
||||
local offset
|
||||
compute offset, $%
|
||||
emit word, value - MZ.segment
|
||||
check $% > offset
|
||||
jno done
|
||||
compute offset, offset - MZ.HEADER_LENGTH
|
||||
compute offset, offset and 0FFFFh + (offset and not 0FFFFh) shl 12
|
||||
asm store offset:4 at MZ : MZ.relocations + MZ.RELOCATION_INDEX shl 2
|
||||
compute MZ.RELOCATION_INDEX, MZ.RELOCATION_INDEX + 1
|
||||
done:
|
||||
exit
|
||||
plain:
|
||||
emit word, value
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
postpone
|
||||
if MZ.STACK_LENGTH
|
||||
rb 0Fh - ($%+0Fh) and 0Fh
|
||||
store ($%-MZ.HEADER_LENGTH) shr 4 : word at MZ : MZ.initial_ss
|
||||
rb MZ.STACK_LENGTH
|
||||
store MZ.STACK_LENGTH : word at MZ : MZ.initial_sp
|
||||
end if
|
||||
MZ.LENGTH = $%%
|
||||
MZ.RESERVED_LENGTH = $%-$%%
|
||||
MZ.NUMBER_OF_RELOCATIONS = MZ.RELOCATION_INDEX
|
||||
end postpone
|
999
toolchain/fasm2/include/format/pe.inc
Normal file
999
toolchain/fasm2/include/format/pe.inc
Normal file
@ -0,0 +1,999 @@
|
||||
|
||||
IMAGE_FILE_MACHINE_UNKNOWN = 0x0
|
||||
IMAGE_FILE_MACHINE_AM33 = 0x1D3
|
||||
IMAGE_FILE_MACHINE_AMD64 = 0x8664
|
||||
IMAGE_FILE_MACHINE_ARM = 0x1C0
|
||||
IMAGE_FILE_MACHINE_ARMNT = 0x1C4
|
||||
IMAGE_FILE_MACHINE_ARM64 = 0xAA64
|
||||
IMAGE_FILE_MACHINE_EBC = 0xEBC
|
||||
IMAGE_FILE_MACHINE_I386 = 0x14C
|
||||
IMAGE_FILE_MACHINE_IA64 = 0x200
|
||||
IMAGE_FILE_MACHINE_M32R = 0x9041
|
||||
IMAGE_FILE_MACHINE_MIPS16 = 0x266
|
||||
IMAGE_FILE_MACHINE_MIPSFPU = 0x366
|
||||
IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466
|
||||
IMAGE_FILE_MACHINE_POWERPC = 0x1F0
|
||||
IMAGE_FILE_MACHINE_POWERPCFP = 0x1F1
|
||||
IMAGE_FILE_MACHINE_R4000 = 0x166
|
||||
IMAGE_FILE_MACHINE_SH3 = 0x1A2
|
||||
IMAGE_FILE_MACHINE_SH3DSP = 0x1A3
|
||||
IMAGE_FILE_MACHINE_SH4 = 0x1A6
|
||||
IMAGE_FILE_MACHINE_SH5 = 0x1A8
|
||||
IMAGE_FILE_MACHINE_THUMB = 0x1C2
|
||||
IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
|
||||
|
||||
IMAGE_FILE_RELOCS_STRIPPED = 0x0001
|
||||
IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002
|
||||
IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004
|
||||
IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008
|
||||
IMAGE_FILE_AGGRESSIVE_WS_TRIM = 0x0010
|
||||
IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020
|
||||
IMAGE_FILE_BYTES_REVERSED_LO = 0x0080
|
||||
IMAGE_FILE_32BIT_MACHINE = 0x0100
|
||||
IMAGE_FILE_DEBUG_STRIPPED = 0x0200
|
||||
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400
|
||||
IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800
|
||||
IMAGE_FILE_SYSTEM = 0x1000
|
||||
IMAGE_FILE_DLL = 0x2000
|
||||
IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000
|
||||
IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
|
||||
|
||||
IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA = 0x0020
|
||||
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040
|
||||
IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY = 0x0080
|
||||
IMAGE_DLLCHARACTERISTICS_NX_COMPAT = 0x0100
|
||||
IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200
|
||||
IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400
|
||||
IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800
|
||||
IMAGE_DLLCHARACTERISTICS_APPCONTAINER = 0x1000
|
||||
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000
|
||||
IMAGE_DLLCHARACTERISTICS_GUARD_CF = 0x4000
|
||||
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
|
||||
|
||||
IMAGE_SUBSYSTEM_UNKNOWN = 0
|
||||
IMAGE_SUBSYSTEM_NATIVE = 1
|
||||
IMAGE_SUBSYSTEM_WINDOWS_GUI = 2
|
||||
IMAGE_SUBSYSTEM_WINDOWS_CUI = 3
|
||||
IMAGE_SUBSYSTEM_POSIX_CUI = 7
|
||||
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI = 9
|
||||
IMAGE_SUBSYSTEM_EFI_APPLICATION = 10
|
||||
IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11
|
||||
IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER = 12
|
||||
IMAGE_SUBSYSTEM_EFI_ROM = 13
|
||||
IMAGE_SUBSYSTEM_XBOX = 14
|
||||
|
||||
IMAGE_SCN_TYPE_NO_PAD = 0x00000008
|
||||
IMAGE_SCN_CNT_CODE = 0x00000020
|
||||
IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040
|
||||
IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080
|
||||
IMAGE_SCN_LNK_OTHER = 0x00000100
|
||||
IMAGE_SCN_LNK_INFO = 0x00000200
|
||||
IMAGE_SCN_LNK_REMOVE = 0x00000800
|
||||
IMAGE_SCN_LNK_COMDAT = 0x00001000
|
||||
IMAGE_SCN_GPREL = 0x00008000
|
||||
IMAGE_SCN_MEM_PURGEABLE = 0x00020000
|
||||
IMAGE_SCN_MEM_16BIT = 0x00020000
|
||||
IMAGE_SCN_MEM_LOCKED = 0x00040000
|
||||
IMAGE_SCN_MEM_PRELOAD = 0x00080000
|
||||
IMAGE_SCN_ALIGN_1BYTES = 0x00100000
|
||||
IMAGE_SCN_ALIGN_2BYTES = 0x00200000
|
||||
IMAGE_SCN_ALIGN_4BYTES = 0x00300000
|
||||
IMAGE_SCN_ALIGN_8BYTES = 0x00400000
|
||||
IMAGE_SCN_ALIGN_16BYTES = 0x00500000
|
||||
IMAGE_SCN_ALIGN_32BYTES = 0x00600000
|
||||
IMAGE_SCN_ALIGN_64BYTES = 0x00700000
|
||||
IMAGE_SCN_ALIGN_128BYTES = 0x00800000
|
||||
IMAGE_SCN_ALIGN_256BYTES = 0x00900000
|
||||
IMAGE_SCN_ALIGN_512BYTES = 0x00A00000
|
||||
IMAGE_SCN_ALIGN_1024BYTES = 0x00B00000
|
||||
IMAGE_SCN_ALIGN_2048BYTES = 0x00C00000
|
||||
IMAGE_SCN_ALIGN_4096BYTES = 0x00D00000
|
||||
IMAGE_SCN_ALIGN_8192BYTES = 0x00E00000
|
||||
IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000
|
||||
IMAGE_SCN_MEM_DISCARDABLE = 0x02000000
|
||||
IMAGE_SCN_MEM_NOT_CACHED = 0x04000000
|
||||
IMAGE_SCN_MEM_NOT_PAGED = 0x08000000
|
||||
IMAGE_SCN_MEM_SHARED = 0x10000000
|
||||
IMAGE_SCN_MEM_EXECUTE = 0x20000000
|
||||
IMAGE_SCN_MEM_READ = 0x40000000
|
||||
IMAGE_SCN_MEM_WRITE = 0x80000000
|
||||
|
||||
IMAGE_REL_BASED_ABSOLUTE = 0
|
||||
IMAGE_REL_BASED_HIGH = 1
|
||||
IMAGE_REL_BASED_LOW = 2
|
||||
IMAGE_REL_BASED_HIGHLOW = 3
|
||||
IMAGE_REL_BASED_HIGHADJ = 4
|
||||
IMAGE_REL_BASED_DIR64 = 10
|
||||
|
||||
PE::
|
||||
|
||||
namespace PE
|
||||
|
||||
if defined Settings.Magic
|
||||
MAGIC = Settings.Magic
|
||||
else
|
||||
MAGIC = 0x10B
|
||||
end if
|
||||
|
||||
if defined Settings.Machine
|
||||
MACHINE = Settings.Machine
|
||||
else
|
||||
MACHINE = IMAGE_FILE_MACHINE_I386
|
||||
end if
|
||||
|
||||
if defined Settings.Characteristics
|
||||
CHARACTERISTICS = Settings.Characteristics
|
||||
else
|
||||
CHARACTERISTICS = IMAGE_FILE_EXECUTABLE_IMAGE or IMAGE_FILE_32BIT_MACHINE
|
||||
end if
|
||||
|
||||
if defined Settings.DllCharacteristics
|
||||
DLL_CHARACTERISTICS = Settings.DllCharacteristics
|
||||
else
|
||||
DLL_CHARACTERISTICS = 0
|
||||
end if
|
||||
|
||||
if defined Settings.Subsystem
|
||||
SUBSYSTEM = Settings.Subsystem
|
||||
else
|
||||
SUBSYSTEM = IMAGE_SUBSYSTEM_WINDOWS_CUI
|
||||
end if
|
||||
|
||||
if defined Settings.MajorSubsystemVersion
|
||||
MAJOR_SUBSYSTEM_VERSION = Settings.MajorSubsystemVersion
|
||||
else
|
||||
MAJOR_SUBSYSTEM_VERSION = 3
|
||||
end if
|
||||
|
||||
if defined Settings.MinorSubsystemVersion
|
||||
MINOR_SUBSYSTEM_VERSION = Settings.MinorSubsystemVersion
|
||||
else
|
||||
MINOR_SUBSYSTEM_VERSION = 10
|
||||
end if
|
||||
|
||||
if defined Settings.SectionAlignment
|
||||
SECTION_ALIGNMENT := Settings.SectionAlignment
|
||||
else
|
||||
SECTION_ALIGNMENT := 1000h
|
||||
end if
|
||||
|
||||
if defined Settings.FileAlignment
|
||||
FILE_ALIGNMENT := Settings.FileAlignment
|
||||
else
|
||||
FILE_ALIGNMENT := 512
|
||||
end if
|
||||
|
||||
if defined Fixups
|
||||
element RELOCATION
|
||||
DLL_CHARACTERISTICS = DLL_CHARACTERISTICS or IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
|
||||
align.assume RELOCATION, PE.SECTION_ALIGNMENT
|
||||
else
|
||||
RELOCATION := 0
|
||||
CHARACTERISTICS = CHARACTERISTICS or IMAGE_FILE_RELOCS_STRIPPED
|
||||
end if
|
||||
|
||||
if defined Settings.ImageBase
|
||||
IMAGE_BASE := RELOCATION + Settings.ImageBase
|
||||
else
|
||||
IMAGE_BASE := RELOCATION + 400000h
|
||||
end if
|
||||
|
||||
if defined Settings.LegacyHeaders
|
||||
LEGACY_HEADERS := Settings.LegacyHeaders
|
||||
else
|
||||
LEGACY_HEADERS := 1
|
||||
end if
|
||||
|
||||
NUMBER_OF_DIRECTORIES := 16
|
||||
|
||||
if defined Settings.Stub
|
||||
|
||||
virtual at 0
|
||||
file Settings.Stub
|
||||
if $ >= 1Ch
|
||||
load SIGNATURE : word from 0
|
||||
if SIGNATURE = "MZ" | SIGNATURE = "ZM"
|
||||
StubTemplate::
|
||||
end if
|
||||
end if
|
||||
end virtual
|
||||
|
||||
if defined StubTemplate
|
||||
|
||||
load .BYTES_IN_LAST_PAGE : word from StubTemplate:2
|
||||
load .NUMBER_OF_PAGES : word from StubTemplate:4
|
||||
.TEMPLATE_LENGTH = .NUMBER_OF_PAGES shl 9 - (-.BYTES_IN_LAST_PAGE) and 1FFh
|
||||
|
||||
load .RELOCATIONS_OFFSET : word from StubTemplate:18h
|
||||
if .RELOCATIONS_OFFSET >= 40h
|
||||
file Settings.Stub,.TEMPLATE_LENGTH
|
||||
else
|
||||
load .NUMBER_OF_RELOCATIONS : word from StubTemplate:6
|
||||
.RELOCATIONS_LENGTH = .NUMBER_OF_RELOCATIONS shl 2
|
||||
load .NUMBER_OF_HEADER_PARAGRAPHS : word from StubTemplate:8
|
||||
.TEMPLATE_HEADER_LENGTH = .NUMBER_OF_HEADER_PARAGRAPHS shl 4
|
||||
|
||||
file Settings.Stub,1Ch
|
||||
rb 40h - $
|
||||
file Settings.Stub:.RELOCATIONS_OFFSET,.RELOCATIONS_LENGTH
|
||||
align 16
|
||||
.HEADER_LENGTH = $
|
||||
file Settings.Stub:.TEMPLATE_HEADER_LENGTH,.TEMPLATE_LENGTH-.TEMPLATE_HEADER_LENGTH
|
||||
.LENGTH = $
|
||||
|
||||
store 40h : word at 18h
|
||||
store .HEADER_LENGTH shr 4 : word at 8
|
||||
store .LENGTH and 1FFh : word at 2
|
||||
store (.LENGTH-1) shr 9 + 1 : word at 4
|
||||
end if
|
||||
|
||||
store Header : dword at 3Ch
|
||||
|
||||
else
|
||||
|
||||
Stub:
|
||||
.signature dw "MZ"
|
||||
.bytes_in_last_page dw .LENGTH and 1FFh
|
||||
.number_of_pages dw (.LENGTH-1) shr 9 + 1
|
||||
.number_of_relocations dw 0
|
||||
.number_of_header_paragraphs dw .HEADER_LENGTH shr 4
|
||||
.minimum_heap dw (10000h - (.LENGTH-.HEADER_LENGTH)) shr 4
|
||||
.maximum_heap dw 0FFFFh
|
||||
.initial_ss dw (-100h) shr 4
|
||||
.initial_sp dw 0FFFEh
|
||||
.checksum dw 0
|
||||
.initial_ip dw 100h
|
||||
.initial_cs dw (-100h) shr 4
|
||||
.relocations_offset dw 40h
|
||||
.overlay_number dw 0
|
||||
rb 3Ch - $
|
||||
.new_header_offset dd Header
|
||||
|
||||
.HEADER_LENGTH = $
|
||||
|
||||
file Settings.Stub
|
||||
|
||||
.LENGTH = $
|
||||
|
||||
end if
|
||||
|
||||
else
|
||||
|
||||
Stub:
|
||||
.signature dw "MZ"
|
||||
.bytes_in_last_page dw .LENGTH and 1FFh
|
||||
.number_of_pages dw (.LENGTH-1) shr 9 + 1
|
||||
.number_of_relocations dw 0
|
||||
.number_of_header_paragraphs dw .HEADER_LENGTH shr 4
|
||||
.minimum_heap dw .STACK_LENGTH shr 4
|
||||
.maximum_heap dw 0FFFFh
|
||||
.initial_ss dw 0
|
||||
.initial_sp dw .LENGTH - .HEADER_LENGTH + .STACK_LENGTH
|
||||
.checksum dw 0
|
||||
.initial_ip dw 0
|
||||
.initial_cs dw 0
|
||||
.relocations_offset dw 40h
|
||||
.overlay_number dw 0
|
||||
rb 3Ch - $
|
||||
.new_header_offset dd Header
|
||||
|
||||
.HEADER_LENGTH = $
|
||||
.STACK_LENGTH = 100h
|
||||
|
||||
namespace Stub
|
||||
|
||||
use16
|
||||
|
||||
start:
|
||||
|
||||
push cs
|
||||
pop ds
|
||||
mov dx,message - start
|
||||
mov ah,9
|
||||
int 21h
|
||||
mov ax,4C01h
|
||||
int 21h
|
||||
|
||||
message db 'This program cannot be run in DOS mode.',0Dh,0Ah,24h
|
||||
|
||||
end namespace
|
||||
|
||||
align 16
|
||||
|
||||
.LENGTH = $
|
||||
|
||||
end if
|
||||
|
||||
if defined Settings.Stamp
|
||||
TIMESTAMP := Settings.Stamp
|
||||
else
|
||||
TIMESTAMP := __TIME__
|
||||
end if
|
||||
|
||||
align 8
|
||||
|
||||
Header:
|
||||
.Signature dw "PE",0
|
||||
.Machine dw MACHINE
|
||||
.NumberOfSections dw NUMBER_OF_SECTIONS
|
||||
.TimeDateStamp dd TIMESTAMP
|
||||
.PointerToSymbolTable dd 0
|
||||
.NumberOfSymbols dd 0
|
||||
.SizeOfOptionalHeader dw SectionTable - OptionalHeader
|
||||
.Characteristics dw CHARACTERISTICS
|
||||
|
||||
OptionalHeader:
|
||||
.Magic dw MAGIC
|
||||
.MajorLinkerVersion db 2
|
||||
.MinorLinkerVersion db 0
|
||||
.SizeOfCode dd 0
|
||||
.SizeOfInitializedData dd 0
|
||||
.SizeOfUninitializedData dd 0
|
||||
.AddressOfEntryPoint dd 0
|
||||
.BaseOfCode dd 0
|
||||
if MAGIC <> 0x20B
|
||||
.BaseOfData dd 0
|
||||
.ImageBase dd IMAGE_BASE - RELOCATION
|
||||
else
|
||||
.ImageBase dq IMAGE_BASE - RELOCATION
|
||||
end if
|
||||
.SectionAlignment dd SECTION_ALIGNMENT
|
||||
.FileAlignment dd FILE_ALIGNMENT
|
||||
.MajorOperatingSystemVersion dw 1
|
||||
.MinorOperatingSystemVersion dw 0
|
||||
.MajorImageVersion dw 0
|
||||
.MinorImageVersion dw 0
|
||||
.MajorSubsystemVersion dw MAJOR_SUBSYSTEM_VERSION
|
||||
.MinorSubsystemVersion dw MINOR_SUBSYSTEM_VERSION
|
||||
.Win32VersionValue dd 0
|
||||
.SizeOfImage dd SIZE_OF_IMAGE
|
||||
.SizeOfHeaders dd SIZE_OF_HEADERS
|
||||
.CheckSum dd 0
|
||||
.Subsystem dw SUBSYSTEM
|
||||
.DllCharacteristics dw DLL_CHARACTERISTICS
|
||||
if MAGIC <> 0x20B
|
||||
.SizeOfStackReserve dd 1000h
|
||||
.SizeOfStackCommit dd 1000h
|
||||
.SizeOfHeapReserve dd 10000h
|
||||
.SizeOfHeapCommit dd 0
|
||||
else
|
||||
.SizeOfStackReserve dq 1000h
|
||||
.SizeOfStackCommit dq 1000h
|
||||
.SizeOfHeapReserve dq 10000h
|
||||
.SizeOfHeapCommit dq 0
|
||||
end if
|
||||
.LoaderFlags dd 0
|
||||
.NumberOfRvaAndSizes dd NUMBER_OF_DIRECTORIES
|
||||
RvaAndSizes:
|
||||
.Rva dd 0
|
||||
.Size dd 0
|
||||
.ENTRY_LENGTH = $ - RvaAndSizes
|
||||
db (NUMBER_OF_DIRECTORIES-1)*RvaAndSizes.ENTRY_LENGTH dup 0
|
||||
SectionTable:
|
||||
.Name dq '.flat'
|
||||
.VirtualSize dd 0
|
||||
.VirtualAddress dd 0
|
||||
.SizeOfRawData dd 0
|
||||
.PointerToRawData dd 0
|
||||
.PointerToRelocations dd 0
|
||||
.PointerToLineNumbers dd 0
|
||||
.NumberOfRelocations dw 0
|
||||
.NumberOfLineNumbers dw 0
|
||||
.Characteristics dd IMAGE_SCN_MEM_EXECUTE + IMAGE_SCN_MEM_READ + IMAGE_SCN_MEM_WRITE
|
||||
.ENTRY_LENGTH = $ - SectionTable
|
||||
db (NUMBER_OF_SECTIONS-1)*SectionTable.ENTRY_LENGTH dup 0
|
||||
|
||||
HeadersEnd:
|
||||
define CheckSumBlocks PE,HeadersEnd
|
||||
|
||||
SECTION_INDEX = 0
|
||||
RELOCATION_INDEX = 0
|
||||
DEFINED_SECTION = 0
|
||||
SECTION_DIRECTORIES = 0
|
||||
align SECTION_ALIGNMENT
|
||||
FIRST_SECTION_RVA:
|
||||
section $%%
|
||||
align FILE_ALIGNMENT,0
|
||||
SIZE_OF_HEADERS = $%
|
||||
FILE_OFFSET = $%
|
||||
SECTION_BASE = IMAGE_BASE + FIRST_SECTION_RVA
|
||||
org SECTION_BASE
|
||||
|
||||
store SECTION_BASE-IMAGE_BASE at PE:OptionalHeader.AddressOfEntryPoint
|
||||
store SECTION_BASE-IMAGE_BASE at PE:SectionTable.VirtualAddress
|
||||
store FILE_OFFSET at PE:SectionTable.PointerToRawData
|
||||
|
||||
virtual at 0
|
||||
relocated_addresses:: rd NUMBER_OF_RELOCATIONS
|
||||
end virtual
|
||||
|
||||
virtual at 0
|
||||
relocation_types:: rw NUMBER_OF_RELOCATIONS
|
||||
end virtual
|
||||
|
||||
end namespace
|
||||
|
||||
RVA? equ -PE.IMAGE_BASE +
|
||||
|
||||
macro entry? address*
|
||||
namespace PE
|
||||
store address-IMAGE_BASE at PE:OptionalHeader.AddressOfEntryPoint
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro stack? reserve*,commit:1000h
|
||||
namespace PE
|
||||
store reserve at PE:OptionalHeader.SizeOfStackReserve
|
||||
store commit at PE:OptionalHeader.SizeOfStackCommit
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro heap? reserve*,commit:0
|
||||
namespace PE
|
||||
store reserve at PE:OptionalHeader.SizeOfHeapReserve
|
||||
store commit at PE:OptionalHeader.SizeOfHeapCommit
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro section?
|
||||
namespace PE
|
||||
|
||||
repeat SECTION_DIRECTORIES
|
||||
end data
|
||||
end repeat
|
||||
|
||||
local AREA,DATA_LENGTH
|
||||
AREA::
|
||||
DATA_LENGTH = $-$$-($%-$%%)
|
||||
CheckSumBlocks reequ CheckSumBlocks,AREA,DATA_LENGTH
|
||||
|
||||
SECTION_SIZE = $ - SECTION_BASE
|
||||
store SECTION_SIZE at PE:SectionTable.VirtualSize+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
align SECTION_ALIGNMENT
|
||||
SECTION_BASE = $
|
||||
section $%%
|
||||
align FILE_ALIGNMENT,0
|
||||
RAW_DATA_SIZE = $% - FILE_OFFSET
|
||||
store RAW_DATA_SIZE at PE:SectionTable.SizeOfRawData+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
FILE_OFFSET = $%
|
||||
org SECTION_BASE
|
||||
|
||||
load SECTION_CHARACTERISTICS from PE:SectionTable.Characteristics+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
if SECTION_SIZE > 0 & RAW_DATA_SIZE = 0
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
||||
store SECTION_CHARACTERISTICS at PE:SectionTable.Characteristics+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
end if
|
||||
|
||||
if LEGACY_HEADERS
|
||||
if SECTION_CHARACTERISTICS and IMAGE_SCN_CNT_CODE & RAW_DATA_SIZE > 0
|
||||
load CODE_SIZE from PE:OptionalHeader.SizeOfCode
|
||||
if CODE_SIZE = 0
|
||||
load CODE_BASE from PE:SectionTable.VirtualAddress+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
store CODE_BASE at PE:OptionalHeader.BaseOfCode
|
||||
end if
|
||||
CODE_SIZE = CODE_SIZE + RAW_DATA_SIZE
|
||||
store CODE_SIZE at PE:OptionalHeader.SizeOfCode
|
||||
end if
|
||||
if SECTION_CHARACTERISTICS and IMAGE_SCN_CNT_INITIALIZED_DATA & RAW_DATA_SIZE > 0
|
||||
load DATA_SIZE from PE:OptionalHeader.SizeOfInitializedData
|
||||
if DATA_SIZE = 0 & MAGIC <> 0x20B
|
||||
load DATA_BASE from PE:SectionTable.VirtualAddress+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
store DATA_BASE at PE:OptionalHeader.BaseOfData
|
||||
end if
|
||||
DATA_SIZE = DATA_SIZE + RAW_DATA_SIZE
|
||||
store DATA_SIZE at PE:OptionalHeader.SizeOfInitializedData
|
||||
end if
|
||||
if SECTION_CHARACTERISTICS and IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
||||
load BSS_SIZE from PE:OptionalHeader.SizeOfUninitializedData
|
||||
BSS_SIZE = BSS_SIZE + SECTION_SIZE
|
||||
store BSS_SIZE at PE:OptionalHeader.SizeOfUninitializedData
|
||||
end if
|
||||
end if
|
||||
|
||||
if DEFINED_SECTION | SECTION_SIZE > 0
|
||||
SECTION_INDEX = SECTION_INDEX + 1
|
||||
end if
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro section? declaration*
|
||||
namespace PE
|
||||
|
||||
section
|
||||
|
||||
DEFINED_SECTION = 1
|
||||
|
||||
store SECTION_BASE-IMAGE_BASE at PE:SectionTable.VirtualAddress+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
store FILE_OFFSET at PE:SectionTable.PointerToRawData+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
|
||||
SECTION_DIRECTORIES = 0
|
||||
|
||||
match name attributes, declaration
|
||||
|
||||
store name:qword at PE:SectionTable.Name+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
|
||||
SECTION_CHARACTERISTICS = 0
|
||||
|
||||
local seq
|
||||
define seq attributes:
|
||||
while 1
|
||||
match :, seq
|
||||
break
|
||||
else match =readable? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_MEM_READ
|
||||
else match =writeable? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_MEM_WRITE
|
||||
else match =writable? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_MEM_WRITE
|
||||
else match =executable? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_MEM_EXECUTE
|
||||
else match =discardable? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_MEM_DISCARDABLE
|
||||
else match =shareable? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_MEM_SHARED
|
||||
else match =import? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_DIRECTORIES = SECTION_DIRECTORIES + 1
|
||||
data import
|
||||
else match =export? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_DIRECTORIES = SECTION_DIRECTORIES + 1
|
||||
data export
|
||||
else match =resource? =from? path tail, seq
|
||||
redefine seq tail
|
||||
SECTION_DIRECTORIES = SECTION_DIRECTORIES + 1
|
||||
data resource from path
|
||||
else match =resource? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_DIRECTORIES = SECTION_DIRECTORIES + 1
|
||||
data resource
|
||||
else match =fixups? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_DIRECTORIES = SECTION_DIRECTORIES + 1
|
||||
data fixups
|
||||
else match =code? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_CNT_CODE
|
||||
else match =data? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_CNT_INITIALIZED_DATA
|
||||
else match =udata? tail, seq
|
||||
redefine seq tail
|
||||
SECTION_CHARACTERISTICS = SECTION_CHARACTERISTICS or IMAGE_SCN_CNT_UNINITIALIZED_DATA
|
||||
else match attribute tail, seq
|
||||
err 'unknown attribute "',`attribute,'"'
|
||||
redefine seq :
|
||||
end match
|
||||
end while
|
||||
|
||||
store SECTION_CHARACTERISTICS at PE:SectionTable.Characteristics+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
else
|
||||
|
||||
store declaration:qword at PE:SectionTable.Name+SECTION_INDEX*SectionTable.ENTRY_LENGTH
|
||||
|
||||
end match
|
||||
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro data? type*
|
||||
namespace PE
|
||||
local number,content
|
||||
define content
|
||||
match =export?, type
|
||||
number = 0
|
||||
else match =import?, type
|
||||
number = 1
|
||||
else match =resource? =from? path, type
|
||||
number = 2
|
||||
define content resource_from path
|
||||
else match =resource?, type
|
||||
number = 2
|
||||
else match =fixups?, type
|
||||
number = 5
|
||||
define content fixups
|
||||
else
|
||||
number = type
|
||||
end match
|
||||
define DATA_DIRECTORY number
|
||||
load DATA_BASE:dword from PE:RvaAndSizes.Rva+DATA_DIRECTORY*RvaAndSizes.ENTRY_LENGTH
|
||||
if DATA_BASE = 0
|
||||
store $-IMAGE_BASE:dword at PE:RvaAndSizes.Rva+DATA_DIRECTORY*RvaAndSizes.ENTRY_LENGTH
|
||||
match instruction, content
|
||||
instruction
|
||||
end match
|
||||
else
|
||||
err 'data already defined'
|
||||
end if
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro end?.data?
|
||||
namespace PE
|
||||
load DATA_BASE:dword from PE:RvaAndSizes.Rva+DATA_DIRECTORY*RvaAndSizes.ENTRY_LENGTH
|
||||
store $-IMAGE_BASE-DATA_BASE:dword at PE:RvaAndSizes.Size+DATA_DIRECTORY*RvaAndSizes.ENTRY_LENGTH
|
||||
restore DATA_DIRECTORY
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro PE.resource_directory?
|
||||
namespace PE
|
||||
Resource: rb RESOURCE_HEADERS_LENGTH
|
||||
Resource.counter = 0
|
||||
define RESOURCE_DIRECTORIES_LIST Resource_root
|
||||
Resource_root.counter = 0
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro PE.resource_data? type*,id*,lang*,codepage:0
|
||||
namespace PE
|
||||
local _type,_id,_lang
|
||||
_type = type
|
||||
_id = id
|
||||
_lang = lang
|
||||
if ~ type eqtype 0
|
||||
_type = _type shl 32
|
||||
end if
|
||||
if ~ id eqtype 0
|
||||
_id = id shl 32
|
||||
end if
|
||||
if ~ lang eqtype 0
|
||||
_lang = lang shl 32
|
||||
end if
|
||||
repeat 1, %type:_type, %id:_id, %lang:_lang
|
||||
if ~ defined Resource_#%type#_#%id.counter
|
||||
if ~ defined Resource_#%type.counter
|
||||
repeat 1, i:Resource_root.counter
|
||||
Resource_root.entry#i = type
|
||||
Resource_root.offset#i = (Resource_#%type - Resource) or 80000000h
|
||||
end repeat
|
||||
Resource_root.counter = Resource_root.counter + 1
|
||||
match list, RESOURCE_DIRECTORIES_LIST
|
||||
define RESOURCE_DIRECTORIES_LIST list,Resource_#%type
|
||||
end match
|
||||
Resource_#%type.counter = 0
|
||||
end if
|
||||
repeat 1, i:Resource_#%type.counter
|
||||
Resource_#%type.entry#i = id
|
||||
Resource_#%type.offset#i = (Resource_#%type#_#%id - Resource) or 80000000h
|
||||
end repeat
|
||||
Resource_#%type.counter = Resource_#%type.counter + 1
|
||||
|
||||
match list, RESOURCE_DIRECTORIES_LIST
|
||||
define RESOURCE_DIRECTORIES_LIST list,Resource_#%type#_#%id
|
||||
end match
|
||||
Resource_#%type#_#%id.counter = 0
|
||||
end if
|
||||
repeat 1, i:Resource_#%type#_#%id.counter
|
||||
Resource_#%type#_#%id.entry#i = lang
|
||||
Resource_#%type#_#%id.offset#i = Resource_#%type#_#%id#_#%lang - Resource
|
||||
end repeat
|
||||
Resource_#%type#_#%id.counter = Resource_#%type#_#%id.counter + 1
|
||||
repeat 1, i:Resource.counter
|
||||
Resource_#%type#_#%id#_#%lang := Resource.entry#i
|
||||
Resource.cp#i := codepage
|
||||
Resource.data#i:
|
||||
end repeat
|
||||
end repeat
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro PE.end_resource_data?
|
||||
namespace PE
|
||||
repeat 1, i:Resource.counter
|
||||
Resource.size#i := $ - Resource.data#i
|
||||
end repeat
|
||||
Resource.counter = Resource.counter + 1
|
||||
align 4
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro PE.end_resource_directory?
|
||||
namespace PE
|
||||
RESOURCE_HEADERS_POINTER = 0
|
||||
|
||||
match list, RESOURCE_DIRECTORIES_LIST
|
||||
iterate dir, list
|
||||
dir := Resource + RESOURCE_HEADERS_POINTER
|
||||
RESOURCE_HEADERS_POINTER = RESOURCE_HEADERS_POINTER + 16 + dir.counter * 8
|
||||
local x,y,z,a,b
|
||||
x = dir.counter shr 1
|
||||
while x > 0
|
||||
y = x
|
||||
while y < dir.counter
|
||||
z = y
|
||||
while z-x >= 0
|
||||
repeat 1, i:z, j:z-x
|
||||
if dir.entry#i eqtype 0
|
||||
if ~ dir.entry#j eqtype 0 | dir.entry#i >= dir.entry#j
|
||||
z = 0
|
||||
end if
|
||||
else if ~ dir.entry#j eqtype 0
|
||||
a = dir.entry#i bswap lengthof dir.entry#i
|
||||
b = dir.entry#j bswap lengthof dir.entry#j
|
||||
if ( lengthof a >= lengthof b & a shr ((lengthof a - lengthof b)*8) >= b ) | ( lengthof a < lengthof b & a > b shr ((lengthof b - lengthof a)*8) )
|
||||
z = 0
|
||||
end if
|
||||
end if
|
||||
if z > 0
|
||||
a = dir.entry#i
|
||||
b = dir.offset#i
|
||||
dir.entry#i = dir.entry#j
|
||||
dir.offset#i = dir.offset#j
|
||||
dir.entry#j = a
|
||||
dir.offset#j = b
|
||||
z = z - x
|
||||
end if
|
||||
end repeat
|
||||
end while
|
||||
y = y + 1
|
||||
end while
|
||||
x = x shr 1
|
||||
end while
|
||||
end iterate
|
||||
iterate dir, list
|
||||
store __TIME__ : 4 at dir + 4
|
||||
dir.names_counter = 0
|
||||
repeat dir.counter, i:0
|
||||
if dir.entry#i eqtype 0
|
||||
store dir.entry#i : 4 at dir + 16 + i * 8
|
||||
else
|
||||
dir.names_counter = dir.names_counter + 1
|
||||
repeat 1, %id:dir.entry#i
|
||||
if ~ defined Resource_string#%id
|
||||
restore Resource_string#%id
|
||||
Resource_string#%id = Resource + RESOURCE_HEADERS_POINTER
|
||||
if lengthof dir.entry#i and 1
|
||||
err 'a word-aligned string is expected as a name'
|
||||
end if
|
||||
RESOURCE_HEADERS_POINTER = RESOURCE_HEADERS_POINTER + lengthof dir.entry#i + 2
|
||||
store (lengthof dir.entry#i)/2 : 2 at Resource_string#%id
|
||||
store dir.entry#i : lengthof dir.entry#i at Resource_string#%id + 2
|
||||
end if
|
||||
store (Resource_string#%id - Resource) or 80000000h : 4 at dir + 16 + i * 8
|
||||
end repeat
|
||||
end if
|
||||
store dir.offset#i : 4 at dir + 16 + i * 8 + 4
|
||||
end repeat
|
||||
store dir.names_counter : 2 at dir + 12
|
||||
store dir.counter - dir.names_counter : 2 at dir + 14
|
||||
end iterate
|
||||
end match
|
||||
|
||||
if RESOURCE_HEADERS_POINTER and 11b
|
||||
RESOURCE_HEADERS_POINTER = RESOURCE_HEADERS_POINTER + 4 - RESOURCE_HEADERS_POINTER and 11b
|
||||
end if
|
||||
|
||||
repeat Resource.counter, i:0
|
||||
Resource.entry#i := Resource + RESOURCE_HEADERS_POINTER
|
||||
RESOURCE_HEADERS_POINTER = RESOURCE_HEADERS_POINTER + 16
|
||||
store RVA(Resource.data#i) : 4 at Resource.entry#i
|
||||
store Resource.size#i : 4 at Resource.entry#i + 4
|
||||
store Resource.cp#i : 4 at Resource.entry#i + 8
|
||||
end repeat
|
||||
|
||||
RESOURCE_HEADERS_LENGTH = RESOURCE_HEADERS_POINTER
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
macro PE.resource_from path*
|
||||
|
||||
local res_file,res_size,res_header_size,res_data_size,res_data
|
||||
local offset,char,type,id,lang
|
||||
|
||||
virtual at 0
|
||||
res_file:: file path
|
||||
res_size := $
|
||||
end virtual
|
||||
|
||||
PE.resource_directory
|
||||
|
||||
offset = 0
|
||||
while offset < res_size
|
||||
load res_header_size : 4 from res_file : offset + 4
|
||||
load res_data_size : 4 from res_file : offset + 0
|
||||
|
||||
if res_data_size > 0
|
||||
|
||||
offset =: offset + 8
|
||||
load char : 2 from res_file : offset
|
||||
if char = 0FFFFh
|
||||
load char : 2 from res_file : offset + 2
|
||||
type = +char
|
||||
offset = offset + 4
|
||||
else
|
||||
while 1
|
||||
if char = 0
|
||||
load type : (%-1)*2 from res_file : offset
|
||||
offset = offset + (% + % and 1)*2
|
||||
break
|
||||
end if
|
||||
load char : 2 from res_file : offset + %*2
|
||||
end while
|
||||
end if
|
||||
load char : 2 from res_file : offset
|
||||
if char = 0FFFFh
|
||||
load char : 2 from res_file : offset + 2
|
||||
id = +char
|
||||
offset = offset + 4
|
||||
else
|
||||
while 1
|
||||
if char = 0
|
||||
load id : (%-1)*2 from res_file : offset
|
||||
offset = offset + (% + % and 1)*2
|
||||
break
|
||||
end if
|
||||
load char : 2 from res_file : offset + %*2
|
||||
end while
|
||||
end if
|
||||
load char : 2 from res_file : offset + 6
|
||||
lang = +char
|
||||
|
||||
restore offset
|
||||
|
||||
PE.resource_data type,id,lang
|
||||
load res_data : res_data_size from res_file : offset + res_header_size
|
||||
db res_data
|
||||
PE.end_resource_data
|
||||
|
||||
end if
|
||||
|
||||
offset = offset + res_header_size + res_data_size
|
||||
if offset and 11b
|
||||
offset = offset + 4 - offset and 11b
|
||||
end if
|
||||
end while
|
||||
|
||||
PE.end_resource_directory
|
||||
|
||||
end macro
|
||||
|
||||
macro PE.fixups
|
||||
namespace PE
|
||||
Fixups:
|
||||
calminstruction BuildFixups
|
||||
local PAGE_RVA, BLOCK_HEADER, BLOCK_SIZE
|
||||
local INDEX, ADDRESS, TYPE, FIXUP
|
||||
check NUMBER_OF_RELOCATIONS = 0
|
||||
jyes dummy
|
||||
compute PAGE_RVA, -1
|
||||
compute BLOCK_HEADER, 0
|
||||
compute BLOCK_SIZE, 0
|
||||
compute INDEX,0
|
||||
process:
|
||||
check INDEX = NUMBER_OF_RELOCATIONS
|
||||
jyes close_block
|
||||
load ADDRESS, relocated_addresses:INDEX shl 2, 4
|
||||
check PAGE_RVA >= 0 & ADDRESS and not 0FFFh = PAGE_RVA
|
||||
jyes append_to_block
|
||||
close_block:
|
||||
check BLOCK_HEADER
|
||||
jno start_new_block
|
||||
check BLOCK_SIZE and 11b
|
||||
jno finish_block
|
||||
emit 2, 0
|
||||
compute BLOCK_SIZE, BLOCK_SIZE + 2
|
||||
finish_block:
|
||||
store BLOCK_HEADER+4, 4, BLOCK_SIZE
|
||||
start_new_block:
|
||||
check INDEX = NUMBER_OF_RELOCATIONS
|
||||
jyes done
|
||||
compute PAGE_RVA, ADDRESS and not 0FFFh
|
||||
compute BLOCK_HEADER, $%
|
||||
emit 4, PAGE_RVA
|
||||
emit 4, 0
|
||||
compute BLOCK_SIZE, 8
|
||||
append_to_block:
|
||||
load TYPE, relocation_types:INDEX shl 1, 2
|
||||
compute FIXUP, (ADDRESS and 0FFFh) or (TYPE shl 12)
|
||||
emit 2, FIXUP
|
||||
compute BLOCK_SIZE, BLOCK_SIZE + 2
|
||||
compute INDEX, INDEX + 1
|
||||
jump process
|
||||
dummy:
|
||||
emit 4, 0
|
||||
emit 4, 8
|
||||
done:
|
||||
end calminstruction
|
||||
BuildFixups
|
||||
end namespace
|
||||
end macro
|
||||
|
||||
if defined PE.Fixups
|
||||
|
||||
calminstruction dword? value*
|
||||
compute value, value
|
||||
check value relativeto 0 | ~ value relativeto PE.RELOCATION
|
||||
jyes plain
|
||||
local offset
|
||||
compute offset, $%
|
||||
emit 4, value - PE.RELOCATION
|
||||
check $% > offset
|
||||
jno done
|
||||
store PE.relocated_addresses:PE.RELOCATION_INDEX shl 2, 4, $-4-PE.IMAGE_BASE
|
||||
store PE.relocation_types:PE.RELOCATION_INDEX shl 1, 2, IMAGE_REL_BASED_HIGHLOW
|
||||
compute PE.RELOCATION_INDEX, PE.RELOCATION_INDEX + 1
|
||||
done:
|
||||
exit
|
||||
plain:
|
||||
emit 4, value
|
||||
end calminstruction
|
||||
|
||||
calminstruction qword? value*
|
||||
compute value, value
|
||||
check value relativeto 0 | ~ value relativeto PE.RELOCATION
|
||||
jyes plain
|
||||
local offset
|
||||
compute offset, $%
|
||||
emit 8, value - PE.RELOCATION
|
||||
check $% > offset
|
||||
jno done
|
||||
store PE.relocated_addresses:PE.RELOCATION_INDEX shl 2, 4, $-8-PE.IMAGE_BASE
|
||||
store PE.relocation_types:PE.RELOCATION_INDEX shl 1, 2, IMAGE_REL_BASED_DIR64
|
||||
compute PE.RELOCATION_INDEX, PE.RELOCATION_INDEX + 1
|
||||
done:
|
||||
exit
|
||||
plain:
|
||||
emit 8, value
|
||||
end calminstruction
|
||||
|
||||
end if
|
||||
|
||||
postpone
|
||||
purge section?
|
||||
section
|
||||
namespace PE
|
||||
SIZE_OF_IMAGE := SECTION_BASE - IMAGE_BASE
|
||||
NUMBER_OF_SECTIONS := SECTION_INDEX
|
||||
NUMBER_OF_RELOCATIONS := RELOCATION_INDEX
|
||||
end namespace
|
||||
end postpone
|
||||
|
||||
postpone ?
|
||||
namespace PE
|
||||
CHECKSUM = 0
|
||||
|
||||
calminstruction CheckSum
|
||||
local AREA, DATA_LENGTH, POS, H
|
||||
get_block:
|
||||
match AREA=,DATA_LENGTH=,CheckSumBlocks, CheckSumBlocks
|
||||
jyes block_ready
|
||||
match AREA=,DATA_LENGTH, CheckSumBlocks
|
||||
jyes last_block
|
||||
exit
|
||||
last_block:
|
||||
arrange CheckSumBlocks,
|
||||
block_ready:
|
||||
compute POS, 0
|
||||
process_block:
|
||||
check POS + 2 <= DATA_LENGTH
|
||||
jno finish_block
|
||||
load H, AREA:POS, 2
|
||||
compute CHECKSUM, CHECKSUM + H
|
||||
compute POS, POS + 2
|
||||
jump process_block
|
||||
finish_block:
|
||||
check POS + 1 = DATA_LENGTH
|
||||
jno reduce_checksum
|
||||
load H, AREA:POS, 1
|
||||
compute CHECKSUM, CHECKSUM + H
|
||||
reduce_checksum:
|
||||
check CHECKSUM shr 16
|
||||
jno get_block
|
||||
compute CHECKSUM, CHECKSUM shr 16 + CHECKSUM and 0FFFFh
|
||||
jump reduce_checksum
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
CheckSum
|
||||
CHECKSUM = CHECKSUM + $%
|
||||
store CHECKSUM at PE:OptionalHeader.CheckSum
|
||||
end namespace
|
||||
end postpone
|
46
toolchain/fasm2/include/iset/3dnow.inc
Normal file
46
toolchain/fasm2/include/iset/3dnow.inc
Normal file
@ -0,0 +1,46 @@
|
||||
|
||||
iterate <instr,opcode>, pf2id,1Dh, pfacc,0AEh, pfadd,9Eh, pfmax,0A4h, pfmin,94h, \
|
||||
pfmul,0B4h, pfrcp,96h, pfsub,9Ah, pi2fd,0Dh, pi2fw,0Ch, \
|
||||
pfsubr,0AAh, pavgusb,0BFh, pfcmpeq,0B0h, pfcmpge,90h, pfcmpgt,0A0h, \
|
||||
pfrsqrt,97h, pmulhrw,0B7h, pfrcpit2,0B6h, pfrsqit1,0A7h
|
||||
|
||||
calminstruction instr? dest*,src*
|
||||
call x86.require.3DNow
|
||||
call MMX.parse_operand@dest, dest
|
||||
call MMX.parse_operand@src, src
|
||||
check @src.size and not @dest.size
|
||||
jno size_ok
|
||||
err 'operand sizes do not match'
|
||||
size_ok:
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
jno invalid_combination_of_operands
|
||||
xcall x86.store_instruction@src, <0Fh,0Fh>,@dest.rm,(1),(opcode)
|
||||
exit
|
||||
invalid_combination_of_operands:
|
||||
err 'invalid combination of operands'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction femms?
|
||||
call x86.require.3DNow
|
||||
emit 1, 0Fh
|
||||
emit 1, 0Eh
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,postbyte>, prefetch,0, prefetchw,1
|
||||
calminstruction instr? src*
|
||||
call x86.require.3DNow
|
||||
call MMX.parse_operand@src, src
|
||||
check @src.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @src.size and not 1
|
||||
jno size_ok
|
||||
err 'invalid operand size'
|
||||
size_ok:
|
||||
xcall x86.store_instruction@src, <0Fh,0Dh>,(postbyte)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
end iterate
|
58
toolchain/fasm2/include/iset/aes.inc
Normal file
58
toolchain/fasm2/include/iset/aes.inc
Normal file
@ -0,0 +1,58 @@
|
||||
|
||||
iterate <instr,supp>, aesdec,0DEh, aesenc,0DCh, aesdeclast,0DFh, aesenclast,0DDh
|
||||
|
||||
macro instr? dest*,src*
|
||||
require AESNI
|
||||
SSE.basic_instruction 66h,<38h,supp>,16,dest,src
|
||||
end macro
|
||||
|
||||
macro v#instr? dest*,src*,src2*
|
||||
AVX_512.parse_operand@dest dest
|
||||
AVX_512.parse_operand@src src
|
||||
AVX_512.parse_operand@src2 src2
|
||||
if @dest.type = 'mmreg' & @src.type = 'mmreg' & (@src2.type = 'mem' | @src2.type = 'mmreg')
|
||||
if @dest.size <> @src.size | @src2.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
@src2.memsize = 0
|
||||
if x86.ext and x86.VAES.ext
|
||||
AVX_512.store_instruction@src2 @dest.size,VEX_66_0F38_W0,EVEX_AS_VEX+EVEX_VL,opcode,0,@dest.rm,@src.rm
|
||||
else
|
||||
require AESNI
|
||||
AVX_512.store_instruction@src2 @dest.size,VEX_66_0F38_W0,EVEX_FORBIDDEN,opcode,0,@dest.rm,@src.rm
|
||||
end if
|
||||
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, aesimc,0DBh
|
||||
|
||||
macro instr? dest*,src*
|
||||
require AESNI
|
||||
SSE.basic_instruction 66h,<38h,supp>,16,dest,src
|
||||
end macro
|
||||
|
||||
macro v#instr? dest*,src*
|
||||
require AESNI
|
||||
AVX_512.single_source_instruction VEX_66_0F38_W0,EVEX_FORBIDDEN,opcode,16,dest,src
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,supp>, aeskeygenassist,0DFh
|
||||
|
||||
macro instr? dest*,src*,imm*
|
||||
require AESNI
|
||||
SSE.basic_instruction_imm8 66h,<3Ah,supp>,16,dest,src,imm
|
||||
end macro
|
||||
|
||||
macro v#instr? dest*,src*,imm*
|
||||
require AESNI
|
||||
AVX_512.single_source_instruction_imm8 VEX_66_0F3A_W0,EVEX_FORBIDDEN,opcode,16,dest,src,imm
|
||||
end macro
|
||||
|
||||
end iterate
|
4319
toolchain/fasm2/include/iset/avx.inc
Normal file
4319
toolchain/fasm2/include/iset/avx.inc
Normal file
File diff suppressed because it is too large
Load Diff
290
toolchain/fasm2/include/iset/bmi.inc
Normal file
290
toolchain/fasm2/include/iset/bmi.inc
Normal file
@ -0,0 +1,290 @@
|
||||
|
||||
macro andn? dest*,src*,src2*
|
||||
require BMI1
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@src2 src2
|
||||
if @dest.type = 'reg' & @src.type = 'reg' & (@src2.type = 'mem' | @src2.type = 'reg')
|
||||
if @dest.size < 4
|
||||
err 'invalid operand size'
|
||||
else if @src.size <> @dest.size | @src2.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src2 16,VEX_0F38_W1,0F2h,@dest.rm,@src.rm
|
||||
else
|
||||
AVX.store_instruction@src2 16,VEX_0F38_W0,0F2h,@dest.rm,@src.rm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro bextr? dest*,src*,src2*
|
||||
require BMI1
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@src2 src2
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'reg') & @src2.type = 'reg'
|
||||
if @dest.size < 4
|
||||
err 'invalid operand size'
|
||||
else if @src.size and not @dest.size | @src2.size <> @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src 16,VEX_0F38_W1,0F7h,@dest.rm,@src2.rm
|
||||
else
|
||||
AVX.store_instruction@src 16,VEX_0F38_W0,0F7h,@dest.rm,@src2.rm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,opcode,postbyte>, blsi,0F3h,3, blsmsk,0F3h,2, blsr,0F3h,1
|
||||
|
||||
macro instr? dest*,src*
|
||||
require BMI1
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'reg')
|
||||
if @dest.size < 4
|
||||
err 'invalid operand size'
|
||||
else if @src.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src 16,VEX_0F38_W1,opcode,postbyte,@dest.rm
|
||||
else
|
||||
AVX.store_instruction@src 16,VEX_0F38_W0,opcode,postbyte,@dest.rm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, lzcnt,0BDh, tzcnt,0BCh
|
||||
|
||||
macro instr? dest*,src*
|
||||
require BMI1
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'reg' & ( @src.type = 'reg' | @src.type = 'mem' )
|
||||
if @src.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
@src.opcode_prefix = 0F3h
|
||||
if @dest.size > 1
|
||||
x86.select_operand_prefix@src @dest.size
|
||||
x86.store_instruction@src <0Fh,opcode>,@dest.rm
|
||||
else
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, bzhi,0F5h
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require BMI2
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@src2 src2
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'reg') & @src2.type = 'reg'
|
||||
if @dest.size < 4
|
||||
err 'invalid operand size'
|
||||
else if @src.size and not @dest.size | @src2.size <> @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src 16,VEX_0F38_W1,opcode,@dest.rm,@src2.rm
|
||||
else
|
||||
AVX.store_instruction@src 16,VEX_0F38_W0,opcode,@dest.rm,@src2.rm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,vex_mp,opcode>, mulx,VEX_F2_0F38,0F6h, pdep,VEX_F2_0F38,0F5h, pext,VEX_F3_0F38,0F5h
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require BMI2
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@src2 src2
|
||||
if @dest.type = 'reg' & @src.type = 'reg' & (@src2.type = 'mem' | @src2.type = 'reg')
|
||||
if @dest.size < 4
|
||||
err 'invalid operand size'
|
||||
else if @src.size <> @dest.size | @src2.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src2 16,vex_mp#_W1,opcode,@dest.rm,@src.rm
|
||||
else
|
||||
AVX.store_instruction@src2 16,vex_mp#_W0,opcode,@dest.rm,@src.rm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
macro rorx? dest*,src*,src2*
|
||||
require BMI2
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@src2 src2
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'reg') & @src2.type = 'imm'
|
||||
if @dest.size < 4 | @src2.size and not 1
|
||||
err 'invalid operand size'
|
||||
else if @src.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src 16,VEX_F2_0F3A_W1,0F0h,@dest.rm,,1,@src2.imm
|
||||
else
|
||||
AVX.store_instruction@src 16,VEX_F2_0F3A_W0,0F0h,@dest.rm,,1,@src2.imm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,vex_mp,opcode>, sarx,VEX_F3_0F38,0F7h, shlx,VEX_66_0F38,0F7h, shrx,VEX_F2_0F38,0F7h
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require BMI2
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@src2 src2
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'reg') & @src2.type = 'reg'
|
||||
if @dest.size < 4
|
||||
err 'invalid operand size'
|
||||
else if @src.size and not @dest.size | @src2.size <> @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
AVX.store_instruction@src 16,vex_mp#_W1,opcode,@dest.rm,@src2.rm
|
||||
else
|
||||
AVX.store_instruction@src 16,vex_mp#_W0,opcode,@dest.rm,@src2.rm
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,vex_mpw,opcode>, vpermb,VEX_66_0F38_W0,8Dh, vpermi2b,VEX_66_0F38_W0,75h, vpermt2b,VEX_66_0F38_W0,7Dh
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require AVX512_VBMI
|
||||
AVX_512.basic_instruction vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,0,dest,src,src2
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, vpmultishiftqb,83h
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require AVX512_VBMI
|
||||
AVX_512.basic_instruction_bcst VEX_66_0F38_W1,EVEX_REQUIRED+EVEX_VL,opcode,8,dest,src,src2
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,vex_mpw,opcode>, vpshldw,VEX_66_0F3A_W1,70h, vpshrdw,VEX_66_0F3A_W1,72h
|
||||
|
||||
macro instr? dest*,src*,src2*,aux*&
|
||||
require AVX512_VBMI2
|
||||
AVX_512.basic_instruction_imm8 vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,0,dest,src,src2,aux
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,unit,vex_mpw,opcode>, vpshldd,4,VEX_66_0F3A_W0,71h, vpshldq,8,VEX_66_0F3A_W1,71h, \
|
||||
vpshrdd,4,VEX_66_0F3A_W0,73h, vpshrdq,8,VEX_66_0F3A_W1,73h
|
||||
|
||||
macro instr? dest*,src*,src2*,aux*&
|
||||
require AVX512_VBMI2
|
||||
AVX_512.basic_instruction_bcst_imm8 vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,unit,dest,src,src2,aux
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,vex_mpw,opcode>, vpshldvw,VEX_66_0F38_W1,70h, vpshrdvw,VEX_66_0F38_W1,72h
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require AVX512_VBMI2
|
||||
AVX_512.basic_instruction vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,0,dest,src,src2
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,unit,vex_mpw,opcode>, vpshldvd,4,VEX_66_0F38_W0,71h, vpshldvq,8,VEX_66_0F38_W1,71h, \
|
||||
vpshrdvd,4,VEX_66_0F38_W0,73h, vpshrdvq,8,VEX_66_0F38_W1,73h
|
||||
|
||||
macro instr? dest*,src*,src2*
|
||||
require AVX512_VBMI2
|
||||
AVX_512.basic_instruction_bcst vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,unit,dest,src,src2
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,vex_mpw,opcode>, vpcompressb,VEX_66_0F38_W0,63h, vpcompressw,VEX_66_0F38_W1,63h
|
||||
|
||||
macro instr? dest*,src*
|
||||
require AVX512_VBMI2
|
||||
AVX_512.parse_k1z_operand@dest dest
|
||||
AVX_512.parse_operand@src src
|
||||
if (@dest.type = 'mmreg' | @dest.type = 'mem') & @src.type = 'mmreg'
|
||||
if @dest.size and not @src.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
AVX_512.store_instruction@dest @src.size,vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,@dest.mask,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,vex_mpw,opcode>, vpexpandb,VEX_66_0F38_W0,62h, vpexpandw,VEX_66_0F38_W1,62h
|
||||
|
||||
macro instr? dest*,src*
|
||||
require AVX512_VBMI2
|
||||
AVX_512.single_source_instruction vex_mpw,EVEX_REQUIRED+EVEX_VL,opcode,0,dest,src
|
||||
end macro
|
||||
|
||||
end iterate
|
122
toolchain/fasm2/include/iset/cet.inc
Normal file
122
toolchain/fasm2/include/iset/cet.inc
Normal file
@ -0,0 +1,122 @@
|
||||
|
||||
|
||||
iterate <instr,modrm>, endbr32,0FBh, endbr64,0FAh
|
||||
|
||||
macro instr?
|
||||
require CET_IBT
|
||||
db 0F3h,0Fh,1Eh,modrm
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext,postbyte>, clrssbsy,0AEh,6, rstorssp,01h,5
|
||||
|
||||
macro instr? src*
|
||||
require CET_SS
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size and not 8
|
||||
err 'invalid operand size'
|
||||
else
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,ext>,postbyte
|
||||
end if
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext,postbyte>, incsspd,0AEh,5, rdsspd,1Eh,1
|
||||
|
||||
macro instr? src*
|
||||
require CET_SS
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'reg'
|
||||
if @src.size <> 4
|
||||
err 'invalid operand size'
|
||||
else
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,ext>,postbyte
|
||||
end if
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext,postbyte>, incsspq,0AEh,5, rdsspq,1Eh,1
|
||||
|
||||
macro instr? src*
|
||||
require CET_SS
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'reg'
|
||||
if @src.size <> 8
|
||||
err 'invalid operand size'
|
||||
else
|
||||
x86.select_operand_prefix@src 8
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,ext>,postbyte
|
||||
end if
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,modrm>, saveprevssp,0EAh, setssbsy,0E8h
|
||||
|
||||
macro instr?
|
||||
require CET_SS
|
||||
db 0F3h,0Fh,01h,modrm
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,prefix,ext>, wrssd,0,0F6h, wrussd,66h,0F5h
|
||||
|
||||
macro instr? dest*,src*
|
||||
require CET_SS
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
local size
|
||||
if @src.size <> 4
|
||||
err 'invalid operand size'
|
||||
else if @dest.size and not @src.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @src.type = 'reg' & ( @dest.type = 'reg' | @dest.type = 'mem' )
|
||||
@dest.opcode_prefix = prefix
|
||||
x86.store_instruction@dest <0Fh,38h,ext>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,prefix,ext>, wrssq,0,0F6h, wrussq,66h,0F5h
|
||||
|
||||
macro instr? dest*,src*
|
||||
require CET_SS
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
local size
|
||||
if @src.size <> 8
|
||||
err 'invalid operand size'
|
||||
else if @dest.size and not @src.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @src.type = 'reg' & ( @dest.type = 'reg' | @dest.type = 'mem' )
|
||||
x86.select_operand_prefix@dest 8
|
||||
@dest.opcode_prefix = prefix
|
||||
x86.store_instruction@dest <0Fh,38h,ext>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
742
toolchain/fasm2/include/iset/fpu.inc
Normal file
742
toolchain/fasm2/include/iset/fpu.inc
Normal file
@ -0,0 +1,742 @@
|
||||
|
||||
element st?
|
||||
|
||||
repeat 8, i:0
|
||||
element st#i? : st? + i
|
||||
end repeat
|
||||
|
||||
iterate context, @dest,@src,@src2,@aux
|
||||
|
||||
namespace context
|
||||
|
||||
calminstruction x87.parse_operand#context operand
|
||||
|
||||
local i
|
||||
|
||||
match =st?(i), operand
|
||||
jyes indexed_streg_operand
|
||||
|
||||
call x86.parse_operand#context, operand
|
||||
|
||||
check type = 'imm' & size = 0
|
||||
jno done
|
||||
check imm eq 1 elementof imm & 1 metadataof imm relativeto st?
|
||||
jyes streg_operand
|
||||
check imm relativeto st? & imm = st?
|
||||
jno done
|
||||
|
||||
compute type, 'streg'
|
||||
compute mod, 11b
|
||||
compute rm, 0
|
||||
|
||||
exit
|
||||
|
||||
streg_operand:
|
||||
|
||||
compute type, 'streg'
|
||||
compute mod, 11b
|
||||
compute rm, 1 metadataof imm - st?
|
||||
|
||||
exit
|
||||
|
||||
indexed_streg_operand:
|
||||
|
||||
compute size, 0
|
||||
compute type, 'streg'
|
||||
compute mod, 11b
|
||||
compute rm, +i
|
||||
|
||||
done:
|
||||
|
||||
end calminstruction
|
||||
|
||||
end namespace
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, fwait,9Bh, wait,9Bh
|
||||
|
||||
calminstruction instr?
|
||||
call x86.require.8087
|
||||
emit 1, opcode
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,byte1,byte2>, fnop,0D9h,0D0h, fchs,0D9h,0E0h, fabs,0D9h,0E1h, ftst,0D9h,0E4h, fxam,0D9h,0E5h, fld1,0D9h,0E8h, \
|
||||
fldl2t,0D9h,0E9h, fldl2e,0D9h,0EAh, fldpi,0D9h,0EBh, fldlg2,0D9h,0ECh, fldln2,0D9h,0EDh, fldz,0D9h,0EEh, \
|
||||
f2xm1,0D9h,0F0h, fyl2x,0D9h,0F1h, fptan,0D9h,0F2h, fpatan,0D9h,0F3h, fxtract,0D9h,0F4h, \
|
||||
fdecstp,0D9h,0F6h, fincstp,0D9h,0F7h, fprem,0D9h,0F8h, \
|
||||
fyl2xp1,0D9h,0F9h, fsqrt,0D9h,0FAh, frndint,0D9h,0FCh, fscale,0D9h,0FDh, \
|
||||
fneni,0DBh,0E0h, fndisi,0DBh,0E1h, fnclex,0DBh,0E2h, fninit,0DBh,0E3h, \
|
||||
fcompp,0DEh,0D9h
|
||||
|
||||
calminstruction instr?
|
||||
call x86.require.8087
|
||||
emit 1, byte1
|
||||
emit 1, byte2
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, fneni,0E0h, fndisi,0E1h
|
||||
|
||||
calminstruction instr?
|
||||
call x86.requireexact.8087
|
||||
emit 1, 0DBh
|
||||
emit 1, opcode
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate op, eni, disi, clex, init
|
||||
calminstruction f#op?
|
||||
asm fwait?
|
||||
asm fn#op?
|
||||
end calminstruction
|
||||
end iterate
|
||||
|
||||
calminstruction fsetpm?
|
||||
call x86.requireexact.80287
|
||||
emit 1, 0DBh
|
||||
emit 1, 0E4h
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,postbyte>, fadd,0, fmul,1, fsub,4, fsubr,5, fdiv,6, fdivr,7
|
||||
|
||||
calminstruction instr? operand&
|
||||
call x86.require.8087
|
||||
local dest, src
|
||||
match dest=,src, operand
|
||||
jyes st
|
||||
call x87.parse_operand@dest, operand
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_combination_of_operands
|
||||
check @dest.size = 4
|
||||
jyes mem_dword
|
||||
check @dest.size = 8
|
||||
jyes mem_qword
|
||||
check @dest.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_dword
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@dest, (0D8h),(postbyte)
|
||||
exit
|
||||
mem_qword:
|
||||
xcall x86.store_instruction@dest, (0DCh),(postbyte)
|
||||
exit
|
||||
st:
|
||||
call x87.parse_operand@dest, dest
|
||||
call x87.parse_operand@src, src
|
||||
check @dest.type = 'streg' & @src.type = 'streg'
|
||||
jno invalid_combination_of_operands
|
||||
check @dest.rm = 0
|
||||
jyes st0_sti
|
||||
check @src.rm = 0
|
||||
jyes sti_st0
|
||||
jump invalid_combination_of_operands
|
||||
st0_sti:
|
||||
emit 1, 0D8h
|
||||
emit 1, 11b shl 6 + postbyte shl 3 + @src.rm
|
||||
exit
|
||||
sti_st0:
|
||||
check postbyte >= 4
|
||||
jyes switched
|
||||
emit 1, 0DCh
|
||||
emit 1, 11b shl 6 + postbyte shl 3 + @dest.rm
|
||||
exit
|
||||
switched:
|
||||
emit 1, 0DCh
|
||||
emit 1, 11b shl 6 + (postbyte xor 1) shl 3 + @dest.rm
|
||||
exit
|
||||
invalid_combination_of_operands:
|
||||
err 'invalid combination of operands'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, faddp,0, fmulp,1, fsubrp,4, fsubp,5, fdivrp,6, fdivp,7
|
||||
|
||||
calminstruction instr? operand&
|
||||
call x86.require.8087
|
||||
local dest, src
|
||||
match , operand
|
||||
jyes default
|
||||
match dest=,src, operand
|
||||
jno invalid_combination_of_operands
|
||||
call x87.parse_operand@dest, dest
|
||||
call x87.parse_operand@src, src
|
||||
check @dest.type = 'streg' & @src.type = 'streg' & @src.rm = 0
|
||||
jyes ok
|
||||
invalid_combination_of_operands:
|
||||
err 'invalid combination of operands'
|
||||
exit
|
||||
default:
|
||||
compute @dest.rm, 1
|
||||
ok:
|
||||
emit 1, 0DEh
|
||||
emit 1, 11b shl 6 + postbyte shl 3 + @dest.rm
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, fcom,2, fcomp,3
|
||||
|
||||
calminstruction instr? src:st1
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'streg'
|
||||
jyes st
|
||||
check @src.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @src.size = 4
|
||||
jyes mem_dword
|
||||
check @src.size = 8
|
||||
jyes mem_qword
|
||||
check @src.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_dword
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_dword: st:
|
||||
xcall x86.store_instruction@src, (0D8h),(postbyte)
|
||||
exit
|
||||
mem_qword:
|
||||
xcall x86.store_instruction@src, (0DCh),(postbyte)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, fiadd,0, fimul,1, ficom,2, ficomp,3, fisub,4, fisubr,5, fidiv,6, fidivr,7
|
||||
|
||||
calminstruction instr? src*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @src.size = 2
|
||||
jyes mem_word
|
||||
check @src.size = 4
|
||||
jyes mem_dword
|
||||
check @src.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_word
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_word:
|
||||
xcall x86.store_instruction@src, (0DEh),(postbyte)
|
||||
exit
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@src, (0DAh),(postbyte)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction fld? src*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'streg'
|
||||
jyes st
|
||||
check @src.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @src.size = 4
|
||||
jyes mem_dword
|
||||
check @src.size = 8
|
||||
jyes mem_qword
|
||||
check @src.size = 10
|
||||
jyes mem_tword
|
||||
check @src.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_dword
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_dword: st:
|
||||
xcall x86.store_instruction@src, (0D9h),(0)
|
||||
exit
|
||||
mem_qword:
|
||||
xcall x86.store_instruction@src, (0DDh),(0)
|
||||
exit
|
||||
mem_tword:
|
||||
xcall x86.store_instruction@src, (0DBh),(5)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
calminstruction fst? dest*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@dest, dest
|
||||
check @dest.type = 'streg'
|
||||
jyes st
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @dest.size = 4
|
||||
jyes mem_dword
|
||||
check @dest.size = 8
|
||||
jyes mem_qword
|
||||
check @dest.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_dword
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@dest, (0D9h),(2)
|
||||
exit
|
||||
mem_qword: st:
|
||||
xcall x86.store_instruction@dest, (0DDh),(2)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
calminstruction fstp? dest*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@dest, dest
|
||||
check @dest.type = 'streg'
|
||||
jyes st
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @dest.size = 4
|
||||
jyes mem_dword
|
||||
check @dest.size = 8
|
||||
jyes mem_qword
|
||||
check @dest.size = 10
|
||||
jyes mem_tword
|
||||
check @dest.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_dword
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@dest, (0D9h),(3)
|
||||
exit
|
||||
mem_qword: st:
|
||||
xcall x86.store_instruction@dest, (0DDh),(3)
|
||||
exit
|
||||
mem_tword:
|
||||
xcall x86.store_instruction@dest, (0DBh),(7)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
calminstruction fild? src*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @src.size = 2
|
||||
jyes mem_word
|
||||
check @src.size = 4
|
||||
jyes mem_dword
|
||||
check @src.size = 8
|
||||
jyes mem_qword
|
||||
check @src.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_word
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_word:
|
||||
xcall x86.store_instruction@src, (0DFh),(0)
|
||||
exit
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@src, (0DBh),(0)
|
||||
exit
|
||||
mem_qword:
|
||||
xcall x86.store_instruction@src, (0DFh),(5)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
calminstruction fist? dest*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@dest, dest
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @dest.size = 2
|
||||
jyes mem_word
|
||||
check @dest.size = 4
|
||||
jyes mem_dword
|
||||
check @dest.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_word
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_word:
|
||||
xcall x86.store_instruction@dest, (0DFh),(2)
|
||||
exit
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@dest, (0DBh),(2)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
calminstruction fistp? dest*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@dest, dest
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @dest.size = 2
|
||||
jyes mem_word
|
||||
check @dest.size = 4
|
||||
jyes mem_dword
|
||||
check @dest.size = 8
|
||||
jyes mem_qword
|
||||
check @dest.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_word
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_word:
|
||||
xcall x86.store_instruction@dest, (0DFh),(3)
|
||||
exit
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@dest, (0DBh),(3)
|
||||
exit
|
||||
mem_qword:
|
||||
xcall x86.store_instruction@dest, (0DFh),(7)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
calminstruction fisttp? dest*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@dest, dest
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @dest.size = 2
|
||||
jyes mem_word
|
||||
check @dest.size = 4
|
||||
jyes mem_dword
|
||||
check @dest.size = 8
|
||||
jyes mem_qword
|
||||
check @dest.size
|
||||
jno unknown_size
|
||||
err 'invalid operand size'
|
||||
jump mem_word
|
||||
unknown_size:
|
||||
err 'operand size not specified'
|
||||
mem_word:
|
||||
xcall x86.store_instruction@dest, (0DFh),(1)
|
||||
exit
|
||||
mem_dword:
|
||||
xcall x86.store_instruction@dest, (0DBh),(1)
|
||||
exit
|
||||
mem_qword:
|
||||
xcall x86.store_instruction@dest, (0DDh),(1)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,postbyte>, fbld,4, fbstp,6
|
||||
|
||||
calminstruction instr? src*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'mem'
|
||||
jno invalid_operand
|
||||
check @src.size and not 10
|
||||
jyes invalid_operand_size
|
||||
xcall x86.store_instruction@src, (0DFh),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction fxch? src:st1
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'streg'
|
||||
jno invalid_operand
|
||||
emit 1, 0D9h
|
||||
emit 1, 11b shl 6 + 1 shl 3 + @src.rm
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,basecode>, ffree,0DDh, ffreep,0DFh
|
||||
|
||||
calminstruction instr? src*
|
||||
call x86.require.8087
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'streg'
|
||||
jno invalid_operand
|
||||
emit 1, basecode
|
||||
emit 1, 11b shl 6 + @src.rm
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction fnstsw? dest*
|
||||
call x86.require.8087
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 2
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jyes mem
|
||||
check @dest.type = 'reg' & @dest.rm = 0
|
||||
jno invalid_operand
|
||||
emit 1, 0DFh
|
||||
emit 1, 0E0h
|
||||
exit
|
||||
mem:
|
||||
xcall x86.store_instruction@dest, (0DDh),(7)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,postbyte>, fldcw,5, fnstcw,7
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 2
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_instruction@dest, (0D9h),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, fldenv,4, fnstenv,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.8087
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 14
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_instruction@dest, (0D9h),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, frstor,4, fnsave,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.8087
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 94
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_instruction@dest, (0DDh),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate op, stsw, stcw, stenv, save
|
||||
calminstruction f#op? dest*
|
||||
asm fwait?
|
||||
asm fn#op? dest
|
||||
end calminstruction
|
||||
end iterate
|
||||
|
||||
iterate <instr,byte1,byte2>, fprem1,0D9h,0F5h, fsincos,0D9h,0FBh, fsin,0D9h,0FEh, fcos,0D9h,0FFh, fucompp,0DAh,0E9h
|
||||
|
||||
calminstruction instr?
|
||||
call x86.require.80387
|
||||
emit 1, byte1
|
||||
emit 1, byte2
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, fucom,4, fucomp,5
|
||||
|
||||
calminstruction instr? src:st1
|
||||
call x86.require.80387
|
||||
call x87.parse_operand@src, src
|
||||
check @src.type = 'streg'
|
||||
jno invalid_operand
|
||||
xcall x86.store_instruction@src, (0DDh),(postbyte)
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
|
||||
iterate <instr,postbyte>, fldenv,4, fnstenv,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.80387
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size & ( ( x86.mode = 16 & @dest.size <> 14 ) | ( x86.mode = 32 & @dest.size <> 28 ) )
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_instruction@dest, (0D9h),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, fldenvw,4, fnstenvw,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.80387
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 14
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_operand_prefix, (2)
|
||||
xcall x86.store_instruction@dest, (0D9h),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, fldenvd,4, fnstenvd,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.80387
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 28
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_operand_prefix, (4)
|
||||
xcall x86.store_instruction@dest, (0D9h),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, frstor,4, fnsave,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.80387
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size & ( ( x86.mode = 16 & @dest.size <> 94 ) | ( x86.mode = 32 & @dest.size <> 108 ) )
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_instruction@dest, (0DDh),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, frstorw,4, fnsavew,6
|
||||
|
||||
calminstruction instr? dest*
|
||||
call x86.require.80387
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 94
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_operand_prefix, (2)
|
||||
xcall x86.store_instruction@dest, (0DDh),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, frstord,4, fnsaved,6
|
||||
calminstruction instr? dest*
|
||||
call x86.require.80387
|
||||
call x86.parse_operand@dest, dest
|
||||
check @dest.size and not 108
|
||||
jyes invalid_operand_size
|
||||
check @dest.type = 'mem'
|
||||
jno invalid_operand
|
||||
xcall x86.store_operand_prefix, (4)
|
||||
xcall x86.store_instruction@dest, (0DDh),(postbyte)
|
||||
exit
|
||||
invalid_operand_size:
|
||||
err 'invalid operand size'
|
||||
exit
|
||||
invalid_operand:
|
||||
err 'invalid operand'
|
||||
end calminstruction
|
||||
|
||||
end iterate
|
||||
|
||||
iterate op, stenvw, stenvd, savew, saved
|
||||
calminstruction f#op? dest*
|
||||
asm fwait?
|
||||
asm fn#op? dest
|
||||
end calminstruction
|
||||
end iterate
|
33
toolchain/fasm2/include/iset/gfni.inc
Normal file
33
toolchain/fasm2/include/iset/gfni.inc
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
iterate <instr,supp>, gf2p8mulb,0CFh
|
||||
macro instr? dest*,src*
|
||||
require GFNI
|
||||
SSE.basic_instruction 66h,<38h,supp>,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,supp>, gf2p8affineinvqb,0CFh, gf2p8affineqb,0CEh
|
||||
macro instr? dest*,src*,imm*
|
||||
require GFNI
|
||||
SSE.basic_instruction_imm8 66h,<3Ah,supp>,16,dest,src,imm
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, gf2p8mulb,0CFh
|
||||
|
||||
macro v#instr? dest*,src*,src2*&
|
||||
require GFNI
|
||||
AVX_512.basic_instruction VEX_66_0F38_W0,EVEX_AS_VEX+EVEX_VL,opcode,0,dest,src,src2
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
iterate <instr,opcode>, gf2p8affineinvqb,0CFh, gf2p8affineqb,0CEh
|
||||
|
||||
macro v#instr? dest*,src*,src2*,imm*&
|
||||
require GFNI
|
||||
AVX_512.basic_instruction_bcst_imm8 VEX_66_0F3A_W1,EVEX_W1+EVEX_VL,opcode,8,dest,src,src2,imm
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
164
toolchain/fasm2/include/iset/mmx.inc
Normal file
164
toolchain/fasm2/include/iset/mmx.inc
Normal file
@ -0,0 +1,164 @@
|
||||
|
||||
element MMX.reg
|
||||
|
||||
repeat 8, i:0
|
||||
element mm#i? : MMX.reg + i
|
||||
end repeat
|
||||
|
||||
iterate context, @dest,@src,@src2,@aux
|
||||
|
||||
namespace context
|
||||
|
||||
calminstruction MMX.parse_operand#context operand
|
||||
|
||||
call x86.parse_operand#context, operand
|
||||
|
||||
check type = 'imm' & size = 0
|
||||
jno done
|
||||
check imm eq 1 elementof imm & 1 metadataof imm relativeto MMX.reg
|
||||
jno done
|
||||
|
||||
compute type, 'mmreg'
|
||||
compute mod, 11b
|
||||
compute rm, 1 metadataof imm - MMX.reg
|
||||
compute size, 8
|
||||
|
||||
done:
|
||||
|
||||
end calminstruction
|
||||
|
||||
calminstruction MMX.select_operand_prefix#context size*
|
||||
check size = 16
|
||||
jno no_prefix
|
||||
call x86.require.SSE2
|
||||
compute prefix, 66h
|
||||
exit
|
||||
no_prefix:
|
||||
check size <> 8
|
||||
jno done
|
||||
err 'invalid operand size'
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
end namespace
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction MMX.basic_instruction ext,dest,src
|
||||
call x86.require.MMX
|
||||
call SSE.parse_operand@dest, dest
|
||||
call SSE.parse_operand@src, src
|
||||
check @src.size and not @dest.size
|
||||
jno size_ok
|
||||
err 'operand sizes do not match'
|
||||
size_ok:
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
jno invalid_combination_of_operands
|
||||
call MMX.select_operand_prefix@src, @dest.size
|
||||
xcall x86.store_instruction@src, <0Fh,ext>,@dest.rm
|
||||
exit
|
||||
invalid_combination_of_operands:
|
||||
err 'invalid combination of operands'
|
||||
end calminstruction
|
||||
|
||||
calminstruction MMX.bit_shift_instruction ext,dest,src
|
||||
call x86.require.MMX
|
||||
call SSE.parse_operand@dest, dest
|
||||
call SSE.parse_operand@src, src
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
jyes mmreg_rm
|
||||
check @dest.type = 'mmreg' & @src.type = 'imm'
|
||||
jyes mmreg_imm
|
||||
err 'invalid combination of operands'
|
||||
exit
|
||||
mmreg_rm:
|
||||
check @src.size and not @dest.size
|
||||
jno mmreg_rm_ok
|
||||
err 'operand sizes do not match'
|
||||
mmreg_rm_ok:
|
||||
call MMX.select_operand_prefix@src, @dest.size
|
||||
xcall x86.store_instruction@src, <0Fh,ext>,@dest.rm
|
||||
exit
|
||||
mmreg_imm:
|
||||
check @src.size and not 1
|
||||
jno rm_mmreg_ok
|
||||
err 'invalid operand size'
|
||||
rm_mmreg_ok:
|
||||
local iext, irm
|
||||
compute iext, 70h+(ext and 0Fh)
|
||||
compute irm, ((ext shr 4)-0Ch) shl 1
|
||||
call MMX.select_operand_prefix@dest, @dest.size
|
||||
xcall x86.store_instruction@dest, <0Fh,iext>,irm,byte,@src.imm
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,opcode>, punpcklbw,60h, punpcklwd,61h, punpckldq,62h, packsswb,63h, pcmpgtb,64h, pcmpgtw,65h, pcmpgtd,66h, packuswb,67h, punpckhbw,68h, \
|
||||
punpckhwd,69h, punpckhdq,6Ah, packssdw,6Bh, pcmpeqb,74h, pcmpeqw,75h, pcmpeqd,76h, pmullw,0D5h, psubusb,0D8h, psubusw,0D9h, \
|
||||
pand,0DBh, paddusb,0DCh, paddusw,0DDh, pandn,0DFh, pmulhw,0E5h, psubsb,0E8h, psubsw,0E9h, por,0EBh, paddsb,0ECh, paddsw,0EDh, \
|
||||
pxor,0EFh, pmaddwd,0F5h, psubb,0F8h, psubw,0F9h, psubd,0FAh, paddb,0FCh, paddw,0FDh, paddd,0FEh
|
||||
|
||||
macro instr? dest*,src*
|
||||
MMX.basic_instruction opcode,dest,src
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction movq? dest*,src*
|
||||
call x86.require.MMX
|
||||
call MMX.parse_operand@dest, dest
|
||||
call MMX.parse_operand@src, src
|
||||
check (@src.size or @dest.size) and not 8
|
||||
jno size_ok
|
||||
err 'invalid operand size'
|
||||
size_ok:
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
jyes mmreg_mem
|
||||
check @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
jyes mem_mmreg
|
||||
err 'invalid combination of operands'
|
||||
exit
|
||||
mmreg_mem:
|
||||
xcall x86.store_instruction@src, <0Fh,6Fh>,@dest.rm
|
||||
exit
|
||||
mem_mmreg:
|
||||
xcall x86.store_instruction@dest, <0Fh,7Fh>,@src.rm
|
||||
exit
|
||||
end calminstruction
|
||||
|
||||
calminstruction movd? dest*,src*
|
||||
call x86.require.MMX
|
||||
call MMX.parse_operand@dest, dest
|
||||
call MMX.parse_operand@src, src
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'reg')
|
||||
jyes mmreg_rm
|
||||
check (@dest.type = 'mem' | @dest.type = 'reg') & @src.type = 'mmreg'
|
||||
jyes rm_mmreg
|
||||
err 'invalid combination of operands'
|
||||
exit
|
||||
mmreg_rm:
|
||||
check @src.size and not 4
|
||||
jno mmreg_rm_ok
|
||||
err 'invalid operand size'
|
||||
mmreg_rm_ok:
|
||||
xcall x86.store_instruction@src, <0Fh,6Eh>,@dest.rm
|
||||
exit
|
||||
rm_mmreg:
|
||||
check @dest.size and not 4
|
||||
jno rm_mmreg_ok
|
||||
err 'invalid operand size'
|
||||
rm_mmreg_ok:
|
||||
xcall x86.store_instruction@dest, <0Fh,7Eh>,@src.rm
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,opcode>, psrlw,0D1h, psrld,0D2h, psrlq,0D3h, psrad,0E2h, psraw,0E1h, psllw,0F1h, pslld,0F2h, psllq,0F3h
|
||||
|
||||
macro instr? dest*,src*
|
||||
MMX.bit_shift_instruction opcode,dest,src
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction emms?
|
||||
call x86.require.MMX
|
||||
emit 1, 0Fh
|
||||
emit 1, 77h
|
||||
end calminstruction
|
194
toolchain/fasm2/include/iset/mpx.inc
Normal file
194
toolchain/fasm2/include/iset/mpx.inc
Normal file
@ -0,0 +1,194 @@
|
||||
|
||||
element MPX.bnd
|
||||
|
||||
repeat 4, i:0
|
||||
element bnd#i? : MPX.bnd + i
|
||||
end repeat
|
||||
|
||||
macro MPX.parse_operand ns,op
|
||||
x86.parse_operand#ns op
|
||||
if ns.type = 'imm' & ns.size = 0 & ns.imm eq 1 elementof ns.imm & 1 metadataof ns.imm relativeto MPX.bnd
|
||||
ns.type = 'bnd'
|
||||
ns.mod = 11b
|
||||
ns.rm = 1 metadataof ns.imm - MPX.bnd
|
||||
ns.size = 0
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro MPX.parse_sib_operand ns,op&
|
||||
match [b=,si], op
|
||||
ns.split = 1
|
||||
ns.segment_prefix = 0
|
||||
ns.prefix = 0
|
||||
ns.opcode_prefix = 0
|
||||
ns.rex_prefix = 0
|
||||
ns.size = 0
|
||||
ns.type = 'mem'
|
||||
ns.base_part = +b
|
||||
ns.index_part = +si
|
||||
if x86.mode = 64
|
||||
ns.mode = 64
|
||||
ns.address_registers_type = x86.r64
|
||||
else
|
||||
ns.mode = 32
|
||||
ns.address_registers_type = x86.r32
|
||||
end if
|
||||
ns.base_registers = 0
|
||||
ns.index_registers = 0
|
||||
repeat elementsof ns.base_part
|
||||
if % metadataof ns.base_part relativeto x86.r16 | % metadataof ns.base_part relativeto x86.r32 | % metadataof ns.base_part relativeto x86.r64 | % metadataof ns.address relativeto x86.ip
|
||||
ns.base_registers = ns.base_registers + % elementof ns.base_part * % scaleof ns.base_part
|
||||
end if
|
||||
end repeat
|
||||
repeat elementsof ns.index_part
|
||||
if % metadataof ns.index_part relativeto x86.r16 | % metadataof ns.index_part relativeto x86.r32 | % metadataof ns.index_part relativeto x86.r64 | % metadataof ns.address relativeto x86.ip
|
||||
ns.index_registers = ns.index_registers + % elementof ns.index_part * % scaleof ns.index_part
|
||||
end if
|
||||
end repeat
|
||||
ns.displacement = ns.base_part - ns.base_registers + ns.index_part - ns.index_registers
|
||||
if ns.index_registers eq 0
|
||||
ns.index = 4
|
||||
ns.scale = 1
|
||||
else if elementsof ns.index_registers = 1 & 1 metadataof ns.index_registers relativeto ns.address_registers_type & 1 metadataof ns.index_registers - ns.address_registers_type <> 4
|
||||
ns.index = 1 metadataof ns.index_registers - ns.address_registers_type
|
||||
ns.scale = 1 scaleof ns.index_registers
|
||||
else
|
||||
err 'invalid address'
|
||||
end if
|
||||
if ns.base_registers eq 0
|
||||
ns.rm = 4
|
||||
ns.base = 5
|
||||
ns.index_only = 1
|
||||
else if ns.base_registers eq 1 elementof ns.base_registers & 1 metadataof ns.base_registers relativeto ns.address_registers_type
|
||||
ns.base = 1 metadataof ns.base_registers - ns.address_registers_type
|
||||
if ns.index = 4 & ns.base <> 4
|
||||
ns.rm = ns.base
|
||||
else
|
||||
ns.rm = 4
|
||||
end if
|
||||
ns.index_only = 0
|
||||
else
|
||||
err 'invalid address'
|
||||
end if
|
||||
ns.auto_relative = 0
|
||||
ns.displacement_size = 4
|
||||
ns.mod = 2
|
||||
if ns.index_only
|
||||
ns.mod = 0
|
||||
else if ns.displacement relativeto 0
|
||||
if ns.displacement = 0 & ns.rm and 111b <> 5 & (ns.rm <> 4 | ns.base and 111b <> 5)
|
||||
ns.displacement_size = 0
|
||||
ns.mod = 0
|
||||
else if ns.displacement < 80h & ns.displacement >= -80h
|
||||
ns.displacement_size = 1
|
||||
ns.mod = 1
|
||||
else if ns.displacement - 1 shl ns.mode >= -80h & ns.displacement < 1 shl ns.mode
|
||||
ns.displacement = ns.displacement - 1 shl ns.mode
|
||||
ns.displacement_size = 1
|
||||
ns.mod = 1
|
||||
end if
|
||||
end if
|
||||
else
|
||||
ns.split = 0
|
||||
x86.parse_operand#ns op
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro bndmk? dest*,src*&
|
||||
require MPX
|
||||
MPX.parse_operand @dest,dest
|
||||
MPX.parse_sib_operand @src,src
|
||||
if @dest.type = 'bnd' & @src.type = 'mem'
|
||||
if @src.split & ~ 0 scaleof @src.base_part eq 0
|
||||
err 'invalid base address'
|
||||
end if
|
||||
if (x86.mode = 64 & @src.size and not 8) | (x86.mode < 64 & @src.size and not 4)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,1Bh>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro bndmov? dest*,src*
|
||||
require MPX
|
||||
MPX.parse_operand @dest,dest
|
||||
MPX.parse_operand @src,src
|
||||
if @dest.type = 'bnd' & (@src.type = 'bnd' | @src.type = 'mem')
|
||||
if (x86.mode = 64 & @src.size and not 16) | (x86.mode < 64 & @src.size and not 8)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @src.type = 'mem' & @src.mode <> x86.mode
|
||||
err 'invalid address'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,1Ah>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'bnd'
|
||||
if (x86.mode = 64 & @dest.size and not 16) | (x86.mode < 64 & @dest.size and not 8)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.type = 'mem' & @dest.mode <> x86.mode
|
||||
err 'invalid address'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,1Bh>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,prefix,ext>, bndcl,0F3h,1Ah, bndcu,0F2h,1Ah, bndcn,0F2h,1Bh
|
||||
|
||||
macro instr? dest*,src*
|
||||
require MPX
|
||||
MPX.parse_operand @dest,dest
|
||||
x86.parse_operand @src,src
|
||||
if @dest.type = 'bnd' & (@src.type = 'reg' | @src.type = 'mem')
|
||||
if (x86.mode = 64 & @src.size and not 8) | (x86.mode < 64 & @src.size and not 4)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @src.type = 'mem' & @src.mode <> x86.mode
|
||||
err 'invalid address'
|
||||
end if
|
||||
@src.opcode_prefix = prefix
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
macro bndldx? dest*,src*&
|
||||
require MPX
|
||||
MPX.parse_operand @dest,dest
|
||||
MPX.parse_sib_operand @src,src
|
||||
if @dest.type = 'bnd' & @src.type = 'mem'
|
||||
if @src.scale > 1 | ( @src.split & ~ 0 scaleof @src.index_part eq 0 )
|
||||
err 'invalid index'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,1Ah>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro bndstx? operands*&
|
||||
require MPX
|
||||
match [dest] =, src, operands
|
||||
MPX.parse_sib_operand @dest,[dest]
|
||||
MPX.parse_operand @src,src
|
||||
if @dest.type = 'mem' & @src.type = 'bnd'
|
||||
if @dest.scale > 1 | ( @dest.split & ~ 0 scaleof @dest.index_part eq 0 )
|
||||
err 'invalid index'
|
||||
end if
|
||||
x86.store_instruction@dest <0Fh,1Bh>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end match
|
||||
end macro
|
24
toolchain/fasm2/include/iset/pclmulqdq.inc
Normal file
24
toolchain/fasm2/include/iset/pclmulqdq.inc
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
macro pclmulqdq? dest*,src*,imm*
|
||||
require PCLMULQDQ
|
||||
SSE.basic_instruction_imm8 66h,<3Ah,44h>,16,dest,src,imm
|
||||
end macro
|
||||
|
||||
macro vpclmulqdq? dest*,src*,src2*,aux*
|
||||
require VPCLMULQDQ
|
||||
AVX_512.parse_operand@dest dest
|
||||
AVX_512.parse_operand@src src
|
||||
AVX_512.parse_operand@src2 src2
|
||||
x86.parse_operand@aux aux
|
||||
if @dest.type = 'mmreg' & @src.type = 'mmreg' & (@src2.type = 'mem' | @src2.type = 'mmreg') & @aux.type = 'imm'
|
||||
if @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
else if @dest.size <> @src.size | @src2.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
@src2.memsize = 0
|
||||
AVX_512.store_instruction@src2 @dest.size,VEX_66_0F3A_W0,EVEX_AS_VEX+EVEX_VL,44h,@dest.mask,@dest.rm,@src.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
444
toolchain/fasm2/include/iset/sse.inc
Normal file
444
toolchain/fasm2/include/iset/sse.inc
Normal file
@ -0,0 +1,444 @@
|
||||
|
||||
element SSE.reg
|
||||
|
||||
repeat 16, i:0
|
||||
element xmm#i? : SSE.reg + i
|
||||
end repeat
|
||||
|
||||
iterate context, @dest,@src,@src2,@aux
|
||||
|
||||
namespace context
|
||||
|
||||
calminstruction SSE.parse_operand#context operand
|
||||
|
||||
call x86.parse_operand#context, operand
|
||||
|
||||
check type = 'imm' & size = 0
|
||||
jno done
|
||||
check imm eq 1 elementof imm & 1 metadataof imm relativeto MMX.reg
|
||||
jyes mm_register
|
||||
check imm eq 1 elementof imm & 1 metadataof imm relativeto SSE.reg
|
||||
jyes xmm_register
|
||||
exit
|
||||
|
||||
mm_register:
|
||||
|
||||
compute rm, 1 metadataof imm - MMX.reg
|
||||
compute size, 8
|
||||
|
||||
jump export_mmreg
|
||||
|
||||
xmm_register:
|
||||
|
||||
compute rm, 1 metadataof imm - SSE.reg
|
||||
compute size, 16
|
||||
|
||||
export_mmreg:
|
||||
|
||||
compute type, 'mmreg'
|
||||
compute mod, 11b
|
||||
|
||||
done:
|
||||
|
||||
end calminstruction
|
||||
|
||||
end namespace
|
||||
|
||||
end iterate
|
||||
|
||||
calminstruction SSE.basic_instruction pre,ext,msize,dest,src
|
||||
call x86.require.SSE
|
||||
call SSE.parse_operand@dest, dest
|
||||
call SSE.parse_operand@src, src
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
jno invalid_combination_of_operands
|
||||
check @dest.size <> 16 | (@src.type = 'mem' & @src.size and not msize) | (@src.type = 'mmreg' & @src.size <> 16)
|
||||
jno size_ok
|
||||
err 'invalid operand size'
|
||||
size_ok:
|
||||
compute @src.opcode_prefix, pre
|
||||
xcall x86.store_instruction@src, <0Fh,ext>,@dest.rm
|
||||
exit
|
||||
invalid_combination_of_operands:
|
||||
err 'invalid combination of operands'
|
||||
end calminstruction
|
||||
|
||||
calminstruction SSE.basic_instruction_imm8 pre,ext,msize,dest,src,aux
|
||||
call x86.require.SSE
|
||||
call SSE.parse_operand@dest, dest
|
||||
call SSE.parse_operand@src, src
|
||||
call x86.parse_operand@aux, aux
|
||||
check @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg') & @aux.type = 'imm'
|
||||
jno invalid_combination_of_operands
|
||||
check @dest.size <> 16 | (@src.type = 'mem' & @src.size and not msize) | (@src.type = 'mmreg' & @src.size <> 16) | @aux.size and not 1
|
||||
jno size_ok
|
||||
err 'invalid operand size'
|
||||
size_ok:
|
||||
compute @src.opcode_prefix, pre
|
||||
xcall x86.store_instruction@src, <0Fh,ext>,@dest.rm,byte,@aux.imm
|
||||
exit
|
||||
invalid_combination_of_operands:
|
||||
err 'invalid combination of operands'
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,ext>, sqrt,51h, rsqrt,52h, rcp,53h, add,58h, mul,59h, sub,5Ch, min,5Dh, div,5Eh, max,5Fh
|
||||
macro instr#ps? dest*,src*
|
||||
SSE.basic_instruction 0,ext,16,dest,src
|
||||
end macro
|
||||
macro instr#ss? dest*,src*
|
||||
SSE.basic_instruction 0F3h,ext,4,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, and,54h, andn,55h, or,56h, xor,57h, unpckl,14h, unpckh,15h
|
||||
macro instr#ps? dest*,src*
|
||||
SSE.basic_instruction 0,ext,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro cmpps? dest*,src*,code*
|
||||
SSE.basic_instruction_imm8 0,0C2h,16,dest,src,code
|
||||
end macro
|
||||
|
||||
macro cmpss? dest*,src*,code*
|
||||
SSE.basic_instruction_imm8 0F3h,0C2h,4,dest,src,code
|
||||
end macro
|
||||
|
||||
iterate <cond,code>, eq,0, lt,1, le,2, unord,3, neq,4, nlt,5, nle,6, ord,7
|
||||
macro cmp#cond#ps? dest*,src*
|
||||
cmpps dest,src,code
|
||||
end macro
|
||||
macro cmp#cond#ss? dest*,src*
|
||||
cmpss dest,src,code
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro shufps? dest*,src*,imm*
|
||||
SSE.basic_instruction_imm8 0,0C6h,16,dest,src,imm
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, movaps,28h, movups,10h
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
x86.store_instruction@dest <0Fh,ext+1>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, movlps,12h, movhps,16h
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & @src.type = 'mem'
|
||||
if @dest.size <> 16 | @src.size and not 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if @dest.size and not 8 | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@dest <0Fh,ext+1>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, movhlps,12h, movlhps,16h
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.type = 'mmreg' & @src.type = 'mmreg'
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro movss? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 16 | (@src.type = 'mem' & @src.size and not 4) | (@src.type = 'mmreg' & @src.size <> 16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,10h>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if @dest.size and not 4 | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 0F3h
|
||||
x86.store_instruction@dest <0Fh,11h>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro movntps? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@dest <0Fh,2Bh>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro movmskps? dest*,src*
|
||||
require SSE+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg'
|
||||
if (@dest.size <> 4 & (x86.mode < 64 | @dest.size <> 8)) | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,50h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, ucomiss,2Eh, comiss,2Fh
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 16 | (@src.type = 'mem' & @src.size and not 4) | (@src.type = 'mmreg' & @src.size <> 16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro cvtpi2ps? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 16 | @src.size and not 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,2Ah>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro cvtsi2ss? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'reg')
|
||||
if @src.size = 0
|
||||
err 'operand size not specified'
|
||||
else if @dest.size <> 16 | @src.size < 4
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.select_operand_prefix@src @src.size
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,2Ah>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, cvttps2pi,2Ch, cvtps2pi,2Dh
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 8 | (@src.size = 'mem' & @src.size and not 8) | (@src.size = 'mmreg' & @src.size <> 16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, cvttss2si,2Ch, cvtss2si,2Dh
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size < 4 | (@src.size = 'mem' & @src.size and not 4) | (@src.size = 'mmreg' & @src.size <> 16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.select_operand_prefix@src @dest.size
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, pminub,0DAh, pmaxub,0DEh, pavgb,0E0h, pavgw,0E3h, pmulhuw,0E4h, pminsw,0EAh, pmaxsw,0EEh, psadbw,0F6h
|
||||
macro instr? dest*,src*
|
||||
require SSE+
|
||||
MMX.basic_instruction ext,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro pinsrw? dest*,src*,sel*
|
||||
require SSE+
|
||||
MMX.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'mmreg' & (@src.type = 'reg' | @src.type = 'mem') & @aux.type = 'imm'
|
||||
if (@src.type = 'reg' & @src.size <> 4) | (@src.type = 'mem' & @src.size and not 2) | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,0C4h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pextrw? dest*,src*,sel*
|
||||
require SSE+
|
||||
x86.parse_operand@dest dest
|
||||
MMX.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg' & @aux.type = 'imm'
|
||||
if @dest.size <> 4 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,0C5h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pshufw? dest*,src*,sel*
|
||||
require SSE+
|
||||
MMX.parse_operand@dest dest
|
||||
MMX.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg') & @aux.type = 'imm'
|
||||
if @src.size and not 8 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,70h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pmovmskb? dest*,src*
|
||||
require SSE+
|
||||
x86.parse_operand@dest dest
|
||||
MMX.parse_operand@src src
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg'
|
||||
if @dest.size <> 4
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,0D7h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro movntq? dest*,src*
|
||||
require SSE+
|
||||
MMX.parse_operand@dest dest
|
||||
MMX.parse_operand@src src
|
||||
if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if @dest.size and not 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@dest <0Fh,0E7h>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro maskmovq? src*,sel*
|
||||
require SSE+
|
||||
MMX.parse_operand@src src
|
||||
MMX.parse_operand@aux sel
|
||||
if @src.type = 'mmreg' & @aux.type = 'mmreg'
|
||||
x86.store_instruction@aux <0Fh,0F7h>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,postbyte>, prefetchnta,0, prefetcht0,1, prefetcht1,2, prefetcht2,3
|
||||
macro instr? src*
|
||||
require SSE+
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,18h>,postbyte
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro sfence?
|
||||
db 0Fh,0AEh,0F8h
|
||||
end macro
|
||||
|
||||
iterate <instr,postbyte>, fxsave,0, fxrstor,1
|
||||
macro instr? src*
|
||||
require SSE+
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size and not 512
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,0AEh>,postbyte
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,postbyte>, ldmxcsr,2, stmxcsr,3
|
||||
macro instr? src*
|
||||
require SSE+
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size and not 4
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,0AEh>,postbyte
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
579
toolchain/fasm2/include/iset/sse2.inc
Normal file
579
toolchain/fasm2/include/iset/sse2.inc
Normal file
@ -0,0 +1,579 @@
|
||||
|
||||
iterate <instr,ext>, sqrt,51h, rsqrt,52h, rcp,53h, add,58h, mul,59h, sub,5Ch, min,5Dh, div,5Eh, max,5Fh
|
||||
macro instr#pd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 66h,ext,16,dest,src
|
||||
end macro
|
||||
macro instr#sd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0F2h,ext,8,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, and,54h, andn,55h, or,56h, xor,57h, unpckl,14h, unpckh,15h
|
||||
macro instr#pd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 66h,ext,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro cmppd? dest*,src*,code*
|
||||
require SSE2+
|
||||
SSE.basic_instruction_imm8 66h,0C2h,16,dest,src,code
|
||||
end macro
|
||||
|
||||
macro SSE.cmpsd? dest*,src*,code*
|
||||
require SSE2+
|
||||
SSE.basic_instruction_imm8 0F2h,0C2h,8,dest,src,code
|
||||
end macro
|
||||
|
||||
calminstruction cmpsd? args&
|
||||
match , args
|
||||
jno sse
|
||||
xcall x86.store_operand_prefix, (4)
|
||||
emit 1, 0A7h
|
||||
exit
|
||||
sse:
|
||||
arrange args, =SSE.=cmpsd args
|
||||
assemble args
|
||||
end calminstruction
|
||||
|
||||
iterate <cond,code>, eq,0, lt,1, le,2, unord,3, neq,4, nlt,5, nle,6, ord,7
|
||||
macro cmp#cond#pd? dest*,src*
|
||||
require SSE2+
|
||||
cmppd dest,src,code
|
||||
end macro
|
||||
macro cmp#cond#sd? dest*,src*
|
||||
require SSE2+
|
||||
cmpsd dest,src,code
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro shufpd? dest*,src*,imm*
|
||||
require SSE2+
|
||||
SSE.basic_instruction_imm8 66h,0C6h,16,dest,src,imm
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, movapd,28h, movupd,10h
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,ext+1>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, movlpd,12h, movhpd,16h
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & @src.type = 'mem'
|
||||
if @dest.size <> 16 | @src.size and not 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if @dest.size and not 8 | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,ext+1>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro SSE.movsd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 16 | (@src.type = 'mem' & @src.size and not 8) | (@src.type = 'mmreg' & @src.size <> 16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 0F2h
|
||||
x86.store_instruction@src <0Fh,10h>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if @dest.size and not 8 | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 0F2h
|
||||
x86.store_instruction@dest <0Fh,11h>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
calminstruction movsd? args&
|
||||
match , args
|
||||
jno sse
|
||||
xcall x86.store_operand_prefix, (4)
|
||||
emit 1, 0A5h
|
||||
exit
|
||||
sse:
|
||||
arrange args, =SSE.=movsd args
|
||||
assemble args
|
||||
end calminstruction
|
||||
|
||||
iterate <instr,pre>, movdqa,66h, movdqu,0F3h
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
@src.opcode_prefix = pre
|
||||
x86.store_instruction@src <0Fh,6Fh>,@dest.rm
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
@dest.opcode_prefix = pre
|
||||
x86.store_instruction@dest <0Fh,7Fh>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, movntpd,2Bh, movntdq,0E7h
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,ext>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro movmskpd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg'
|
||||
if (@dest.size <> 4 & (x86.mode < 64 | @dest.size <> 8)) | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,50h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro maskmovdqu? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & @src.type = 'mmreg'
|
||||
if (@dest.size or @src.size) <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,0F7h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, ucomisd,2Eh, comisd,2Fh
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 16 | (@src.type = 'mem' & @src.size and not 8) | (@src.type = 'mmreg' & @src.size <> 16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro cvtps2pd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0,5Ah,8,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtpd2ps? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 66h,5Ah,16,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtsd2ss? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0F2h,5Ah,8,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtss2sd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0F3h,5Ah,4,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtdq2ps? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0,5Bh,16,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtps2dq? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 66h,5Bh,16,dest,src
|
||||
end macro
|
||||
|
||||
macro cvttps2dq? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0F3h,5Bh,16,dest,src
|
||||
end macro
|
||||
|
||||
macro cvttpd2dq? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 66h,0E6h,16,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtpd2dq? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0F2h,0E6h,16,dest,src
|
||||
end macro
|
||||
|
||||
macro cvtdq2pd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.basic_instruction 0F3h,0E6h,8,dest,src
|
||||
end macro
|
||||
|
||||
macro movdq2q? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & @src.type = 'mmreg'
|
||||
if @dest.size <> 8 | @src.size <> 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 0F2h
|
||||
x86.store_instruction@src <0Fh,0D6h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro movq2dq? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & @src.type = 'mmreg'
|
||||
if @dest.size <> 16 | @src.size <> 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,0D6h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro cvtpi2pd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 16 | @src.size and not 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,2Ah>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro cvtsi2sd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'reg')
|
||||
if @src.size = 0
|
||||
err 'operand size not specified'
|
||||
else if @dest.size <> 16 | @src.size < 4
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.select_operand_prefix@src @src.size
|
||||
@src.opcode_prefix = 0F2h
|
||||
x86.store_instruction@src <0Fh,2Ah>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, cvttpd2pi,2Ch, cvtpd2pi,2Dh
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size <> 8 | @src.size and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, cvttsd2si,2Ch, cvtsd2si,2Dh
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if @dest.size < 4 | (@src.type = 'mem' & @src.size and not 8) | (@src.type = 'mmreg' & @src.size <>16)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.select_operand_prefix@src @dest.size
|
||||
@src.opcode_prefix = 0F2h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, paddq,0D4h, pmuludq,0F4h, psubq,0FBh
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
MMX.basic_instruction ext,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro movq? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if (@src.type = 'mem' & @src.size and not 8) | (@src.type = 'mmreg' & @src.size <> @dest.size)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.size = 8
|
||||
x86.store_instruction@src <0Fh,6Fh>,@dest.rm
|
||||
else
|
||||
@src.opcode_prefix = 0F3h
|
||||
x86.store_instruction@src <0Fh,7Eh>,@dest.rm
|
||||
end if
|
||||
else if @dest.type = 'mem' & @src.type = 'mmreg'
|
||||
if @dest.size and not 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @src.size = 8
|
||||
x86.store_instruction@dest <0Fh,7Fh>,@src.rm
|
||||
else
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,0D6h>,@src.rm
|
||||
end if
|
||||
else if @dest.type = 'reg' & @src.type = 'mmreg'
|
||||
if @dest.size <> 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @src.size = 16
|
||||
@dest.opcode_prefix = 66h
|
||||
end if
|
||||
@dest.prefix = 48h
|
||||
x86.store_instruction@dest <0Fh,7Eh>,@src.rm
|
||||
else if @dest.type = 'mmreg' & @src.type = 'reg'
|
||||
if @src.size <> 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.size = 16
|
||||
@src.opcode_prefix = 66h
|
||||
end if
|
||||
@src.prefix = 48h
|
||||
x86.store_instruction@src <0Fh,6Eh>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro movd? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'reg')
|
||||
if @src.size and not 4
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@src @dest.size
|
||||
x86.store_instruction@src <0Fh,6Eh>,@dest.rm
|
||||
else if (@dest.type = 'mem' | @dest.type = 'reg') & @src.type = 'mmreg'
|
||||
if @dest.size and not 4
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@dest @src.size
|
||||
x86.store_instruction@dest <0Fh,7Eh>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pinsrw? dest*,src*,sel*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'mmreg' & (@src.type = 'reg' | @src.type = 'mem') & @aux.type = 'imm'
|
||||
if (@src.type = 'reg' & @src.size <> 4) | (@src.type = 'mem' & @src.size and not 2) | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@src @dest.size
|
||||
x86.store_instruction@src <0Fh,0C4h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pextrw? dest*,src*,sel*
|
||||
require SSE2+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg' & @aux.type = 'imm'
|
||||
if x86.mode = 64 & @dest.size = 8
|
||||
@dest.size = 4
|
||||
end if
|
||||
if @dest.size <> 4 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@src @src.size
|
||||
x86.store_instruction@src <0Fh,0C5h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,pre>, pshufd,66h, pshuflw,0F2h, pshufhw,0F3h
|
||||
macro instr? dest*,src*,sel*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg') & @aux.type = 'imm'
|
||||
if @dest.size <> 16 | @src.size and not 16 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = pre
|
||||
x86.store_instruction@src <0Fh,70h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro pmovmskb? dest*,src*
|
||||
require SSE2+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg'
|
||||
if @dest.size <> 4 & (x86.mode < 64 | @dest.size <> 8)
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@src @src.size
|
||||
x86.store_instruction@src <0Fh,0D7h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,postbyte>, psrldq,3, pslldq,7
|
||||
macro instr? dest*,cnt*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@aux cnt
|
||||
if @dest.type = 'mmreg' & @aux.type = 'imm'
|
||||
if @dest.size <> 16 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,73h>,postbyte,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, punpcklqdq,6Ch, punpckhqdq,6Dh
|
||||
macro instr? dest*,src*
|
||||
require SSE2+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg')
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,ext>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro movnti? dest*,src*
|
||||
require SSE2+
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'mem' & @src.type = 'reg'
|
||||
if @dest.size and not @src.size
|
||||
err 'operand sizes do not match'
|
||||
else if @src.size <> 4 & @src.size <> 8
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.select_operand_prefix@dest @src.size
|
||||
x86.store_instruction@dest <0Fh,0C3h>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro clflush? src*
|
||||
require SSE2+
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,0AEh>,7
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro lfence?
|
||||
require SSE2+
|
||||
db 0Fh,0AEh,0E8h
|
||||
end macro
|
||||
|
||||
macro mfence?
|
||||
require SSE2+
|
||||
db 0Fh,0AEh,0F0h
|
||||
end macro
|
84
toolchain/fasm2/include/iset/sse3.inc
Normal file
84
toolchain/fasm2/include/iset/sse3.inc
Normal file
@ -0,0 +1,84 @@
|
||||
|
||||
macro fisttp? src*
|
||||
require SSE3+
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size = 2
|
||||
x86.store_instruction@src 0DFh,1
|
||||
else if @src.size = 4
|
||||
x86.store_instruction@src 0DBh,1
|
||||
else if @src.size = 8
|
||||
x86.store_instruction@src 0DDh,1
|
||||
else if @src.size
|
||||
err 'invalid operand size'
|
||||
else
|
||||
err 'operand size not specified'
|
||||
end if
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,ext>, addsub,0D0h, hadd,7Ch, hsub,7Dh
|
||||
macro instr#pd? dest*,src*
|
||||
require SSE3+
|
||||
SSE.basic_instruction 66h,ext,16,dest,src
|
||||
end macro
|
||||
macro instr#ps? dest*,src*
|
||||
require SSE3+
|
||||
SSE.basic_instruction 0F2h,ext,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,ext>, movsldup,12h, movshdup,16h
|
||||
macro instr? dest*,src*
|
||||
require SSE3+
|
||||
SSE.basic_instruction 0F3h,ext,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro movddup? dest*,src*
|
||||
require SSE3+
|
||||
SSE.basic_instruction 0F2h,12h,8,dest,src
|
||||
end macro
|
||||
|
||||
macro lddqu? dest*,src*
|
||||
require SSE3+
|
||||
SSE.parse_operand@src dest
|
||||
SSE.parse_operand@src src
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if @dest.type = 'mmreg' & @src.type = 'mem'
|
||||
@src.opcode_prefix = 0F2h
|
||||
x86.store_instruction@src <0Fh,0F0h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
iterate <instr,supp>, pshufb,0, phaddw,1, phaddd,2, phaddsw,3, pmaddubsw,4, phsubw,5, phsubd,6, phsubsw,7, psignb,8, psignw,9, psignd,0Ah, pmulhrsw,0Bh, pabsb,1Ch, pabsw,1Dh, pabsd,1Eh
|
||||
macro instr? dest*,src*
|
||||
require SSSE3+
|
||||
MMX.basic_instruction <38h,supp>,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro palignr? dest*,src*,aux*
|
||||
require SSSE3+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux aux
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg') & @aux.type = 'imm'
|
||||
if @src.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
if @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@src @dest.size
|
||||
x86.store_instruction@src <0Fh,3Ah,0Fh>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
278
toolchain/fasm2/include/iset/sse4.inc
Normal file
278
toolchain/fasm2/include/iset/sse4.inc
Normal file
@ -0,0 +1,278 @@
|
||||
|
||||
iterate <instr,supp>, ptest,17h, pmuldq,28h, pcmpeqq,29h, packusdw,2Bh, pminsb,38h, pminsd,39h, pminuw,3Ah, pminud,3Bh, pmaxsb,3Ch, pmaxsd,3Dh, pmaxuw,3Eh, pmaxud,3Fh, pmulld,40h, phminposuw,41h
|
||||
macro instr? dest*,src*
|
||||
require SSE4.1+
|
||||
SSE.basic_instruction 66h,<38h,supp>,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,supp>, roundps,08h, roundpd,09h, roundss,0Ah, roundsd,0Bh, blendps,0Ch, blendpd,0Dh, pblendw,0Eh, dpps,40h, dppd,41h, mpsadbw,42h
|
||||
macro instr? dest*,src*,imm*
|
||||
require SSE4.1+
|
||||
SSE.basic_instruction_imm8 66h,<3Ah,supp>,16,dest,src,imm
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,supp>, pblendvb,10h, blendvps,14h, blendvpd,15h
|
||||
macro instr? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
SSE.parse_operand@aux sel
|
||||
if @dest.type = 'mmreg' & (@src.type = 'mem' | @src.type = 'mmreg') & @aux.type = 'mmreg' & @aux.size = 16 & @aux.rm = 0
|
||||
if @dest.size or @src.size and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,38h,supp>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <conv,code,msize>, bw,0,8, bd,1,4, bq,2,2, wd,3,8, wq,4,4, dq,5,8
|
||||
macro pmovsx#conv? dest*,src*
|
||||
require SSE4.1+
|
||||
SSE.basic_instruction 66h,<38h,20h+code>,msize,dest,src
|
||||
end macro
|
||||
macro pmovzx#conv? dest*,src*
|
||||
require SSE4.1+
|
||||
SSE.basic_instruction 66h,<38h,30h+code>,msize,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro insertps? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
SSE.basic_instruction_imm8 66h,<3Ah,21h>,4,dest,src,sel
|
||||
end macro
|
||||
|
||||
macro extractps? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg' & @aux.type = 'imm'
|
||||
if x86.mode = 64 & @dest.size = 8
|
||||
@dest.size = 4
|
||||
end if
|
||||
if @dest.size <> 4 | @src.size and not 16 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,3Ah,17h>,@src.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pinsrb? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if (@dest.type = 'mmreg' & @dest.size = 16) & (@src.type = 'reg' | @src.type = 'mem') & @aux.type = 'imm'
|
||||
if (@src.type = 'reg' & @src.size <> 4) | (@src.type = 'mem' & @src.size and not 1) | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,3Ah,20h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pinsrd? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if (@dest.type = 'mmreg' & @dest.size = 16) & (@src.type = 'reg' | @src.type = 'mem') & @aux.type = 'imm'
|
||||
if @src.size and not 4 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,3Ah,22h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pinsrq? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
SSE.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if (@dest.type = 'mmreg' & @dest.size = 16) & (@src.type = 'reg' | @src.type = 'mem') & @aux.type = 'imm'
|
||||
if @src.size and not 8 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
@src.rex_prefix = 48h
|
||||
x86.store_instruction@src <0Fh,3Ah,22h>,@dest.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pextrb? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if (@dest.type = 'reg' | @dest.type = 'mem') & (@src.type = 'mmreg' & @src.size = 16) & @aux.type = 'imm'
|
||||
if x86.mode = 64 & @dest.type = 'reg' & @dest.size = 8
|
||||
@dest.size = 4
|
||||
end if
|
||||
if (@dest.type = 'reg' & @dest.size <> 4) | (@dest.size = 'mem' & @dest.size and not 1) | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,3Ah,14h>,@src.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pextrw? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if @dest.type = 'reg' & @src.type = 'mmreg' & @aux.type = 'imm'
|
||||
if x86.mode = 64 & @dest.size = 8
|
||||
@dest.size = 4
|
||||
end if
|
||||
if @dest.size <> 4 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
MMX.select_operand_prefix@src @src.size
|
||||
x86.store_instruction@src <0Fh,0C5h>,@dest.rm,1,@aux.imm
|
||||
else if @dest.type = 'mem' & (@src.type = 'mmreg' & @src.size = 16) & @aux.type = 'imm'
|
||||
if @dest.size and not 2 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,3Ah,15h>,@src.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pextrd? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if (@dest.type = 'reg' | @dest.type = 'mem') & (@src.type = 'mmreg' & @src.size = 16) & @aux.type = 'imm'
|
||||
if x86.mode = 64 & @dest.type = 'reg' & @dest.size = 8
|
||||
@dest.size = 4
|
||||
end if
|
||||
if @dest.size and not 4 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
x86.store_instruction@dest <0Fh,3Ah,16h>,@src.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro pextrq? dest*,src*,sel*
|
||||
require SSE4.1+
|
||||
x86.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
x86.parse_operand@aux sel
|
||||
if (@dest.type = 'reg' | @dest.type = 'mem') & (@src.type = 'mmreg' & @src.size = 16) & @aux.type = 'imm'
|
||||
if @dest.size and not 8 | @aux.size and not 1
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
if x86.mode < 64
|
||||
err 'instruction requires long mode'
|
||||
end if
|
||||
@dest.opcode_prefix = 66h
|
||||
@dest.rex_prefix = 48h
|
||||
x86.store_instruction@dest <0Fh,3Ah,16h>,@src.rm,1,@aux.imm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro movntdqa? dest*,src*
|
||||
require SSE4.1+
|
||||
SSE.parse_operand@dest dest
|
||||
SSE.parse_operand@src src
|
||||
if @dest.type = 'mmreg' & @src.type = 'mem'
|
||||
if (@dest.size or @src.size) and not 16
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 66h
|
||||
x86.store_instruction@src <0Fh,38h,2Ah>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
|
||||
iterate <instr,supp>, pcmpgtq,37h
|
||||
macro instr? dest*,src*
|
||||
require SSE4.2+
|
||||
SSE.basic_instruction 66h,<38h,supp>,16,dest,src
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
iterate <instr,supp>, pcmpestrm,60h, pcmpestri,61h, pcmpistrm,62h, pcmpistri,63h
|
||||
macro instr? dest*,src*,imm*
|
||||
require SSE4.2+
|
||||
SSE.basic_instruction_imm8 66h,<3Ah,supp>,16,dest,src,imm
|
||||
end macro
|
||||
macro v#instr? dest*,src*,imm*
|
||||
require AVX+
|
||||
AVX_512.single_source_instruction_imm8 VEX_66_0F3A_W0,EVEX_FORBIDDEN,supp,16,dest,src,imm
|
||||
end macro
|
||||
end iterate
|
||||
|
||||
macro crc32? dest*,src*
|
||||
require SSE4.2+
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'reg' & ( @src.type = 'reg' | @src.type = 'mem' )
|
||||
if @dest.size <> 4 & ( @dest.size <> 8 | x86.mode <> 64 )
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
@src.opcode_prefix = 0F2h
|
||||
if @src.size > 1
|
||||
x86.select_operand_prefix@src @src.size
|
||||
x86.store_instruction@src <0Fh,38h,0F1h>,@dest.rm
|
||||
else if @src.size > 0
|
||||
x86.store_instruction@src <0Fh,38h,0F0h>,@dest.rm
|
||||
else
|
||||
err 'operand size not specified'
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro popcnt? dest*,src*
|
||||
require POPCNT
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'reg' & ( @src.type = 'reg' | @src.type = 'mem' )
|
||||
if @src.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
@src.opcode_prefix = 0F3h
|
||||
if @dest.size > 1
|
||||
x86.select_operand_prefix@src @dest.size
|
||||
x86.store_instruction@src <0Fh,0B8h>,@dest.rm
|
||||
else
|
||||
err 'invalid operand size'
|
||||
end if
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
72
toolchain/fasm2/include/iset/vmx.inc
Normal file
72
toolchain/fasm2/include/iset/vmx.inc
Normal file
@ -0,0 +1,72 @@
|
||||
|
||||
iterate <instr,prefix,ext,postbyte>, vmxon,0F3h,0C7h,6, vmclear,66h,0C7h,6, \
|
||||
vmptrld,0,0C7h,6, vmptrst,0,0C7h,7
|
||||
|
||||
macro instr? src*
|
||||
require VMX
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'mem'
|
||||
if @src.size and not 8
|
||||
err 'invalid operand size'
|
||||
else
|
||||
@src.opcode_prefix = prefix
|
||||
x86.store_instruction@src <0Fh,ext>,postbyte
|
||||
end if
|
||||
else
|
||||
err 'invalid operand'
|
||||
end if
|
||||
end macro
|
||||
|
||||
end iterate
|
||||
|
||||
macro vmxoff?
|
||||
require VMX
|
||||
db 0Fh,1,0C4h
|
||||
end macro
|
||||
|
||||
macro vmcall?
|
||||
require VMX
|
||||
db 0Fh,1,0C1h
|
||||
end macro
|
||||
|
||||
macro vmlaunch?
|
||||
require VMX
|
||||
db 0Fh,1,0C2h
|
||||
end macro
|
||||
|
||||
macro vmresume?
|
||||
require VMX
|
||||
db 0Fh,1,0C3h
|
||||
end macro
|
||||
|
||||
macro vmread? dest*,src*
|
||||
require VMX
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @src.type = 'reg' & (@dest.type = 'mem' | @dest.type = 'reg')
|
||||
if (x86.mode < 64 & @src.size <> 4) | (x86.mode = 64 & @src.size <> 8)
|
||||
err 'invalid operand size'
|
||||
else if @dest.size and not @src.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
x86.store_instruction@dest <0Fh,78h>,@src.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro vmwrite? dest*,src*
|
||||
require VMX
|
||||
x86.parse_operand@dest dest
|
||||
x86.parse_operand@src src
|
||||
if @dest.type = 'reg' & (@src.type = 'mem' | @src.type = 'reg')
|
||||
if (x86.mode < 64 & @dest.size <> 4) | (x86.mode = 64 & @dest.size <> 8)
|
||||
err 'invalid operand size'
|
||||
else if @src.size and not @dest.size
|
||||
err 'operand sizes do not match'
|
||||
end if
|
||||
x86.store_instruction@src <0Fh,79h>,@dest.rm
|
||||
else
|
||||
err 'invalid combination of operands'
|
||||
end if
|
||||
end macro
|
155
toolchain/fasm2/include/listing.inc
Normal file
155
toolchain/fasm2/include/listing.inc
Normal file
@ -0,0 +1,155 @@
|
||||
|
||||
; Listing generator, which shows generated bytes next to offset in the output file
|
||||
; and assumed address in memory (limited to the constant term if an address is a linear polynomial).
|
||||
; The listing is stored in a file with .LST extension.
|
||||
|
||||
define Listing? Listing
|
||||
|
||||
namespace Listing
|
||||
|
||||
virtual at 0
|
||||
HexDigits:: db '0123456789ABCDEF'
|
||||
end virtual
|
||||
|
||||
spc0 := ''
|
||||
repeat 34, i:0
|
||||
spc#% := spc#i bappend ' '
|
||||
end repeat
|
||||
|
||||
collected_source = ''
|
||||
collected_$ = $
|
||||
collected_$% = $%
|
||||
collected_$%% = $%%
|
||||
|
||||
calminstruction generate
|
||||
local source, $, $%, $%%
|
||||
|
||||
reverse:
|
||||
take source, collected_source
|
||||
take $, collected_$
|
||||
take $%, collected_$%
|
||||
take $%%, collected_$%%
|
||||
jyes reverse
|
||||
|
||||
local offset
|
||||
compute offset, $%
|
||||
|
||||
main:
|
||||
take , $%
|
||||
take , $%%
|
||||
take $%, $%
|
||||
jno done
|
||||
|
||||
check source
|
||||
jno next
|
||||
|
||||
local undefined_bytes, defined_bytes
|
||||
compute undefined_bytes, $% - $%%
|
||||
compute defined_bytes, $%% - offset
|
||||
compute offset, $%
|
||||
|
||||
local counter, digit
|
||||
|
||||
compute counter, 16
|
||||
emit 1, '['
|
||||
print_address:
|
||||
compute counter, counter - 1
|
||||
compute digit, ($ shr (counter shl 2)) and 0Fh
|
||||
load digit, HexDigits:digit, 1
|
||||
emit 1, digit
|
||||
check counter
|
||||
jyes print_address
|
||||
emit 2, '] '
|
||||
|
||||
check defined_bytes > 0
|
||||
jyes bytes_present
|
||||
emit 34, spc34
|
||||
jump print_source
|
||||
|
||||
bytes_present:
|
||||
compute counter, 8
|
||||
print_offset:
|
||||
compute counter, counter - 1
|
||||
compute digit, (($%-undefined_bytes-defined_bytes) shr (counter shl 2)) and 0Fh
|
||||
load digit, HexDigits:digit, 1
|
||||
emit 1, digit
|
||||
check counter
|
||||
jyes print_offset
|
||||
|
||||
local column, byte
|
||||
|
||||
emit 2, ': '
|
||||
compute column, 0
|
||||
print_bytes:
|
||||
check defined_bytes > 0
|
||||
jno fill_up
|
||||
load byte, $% - undefined_bytes - defined_bytes, 1
|
||||
check column = 8
|
||||
jno print_byte
|
||||
compute column, 0
|
||||
emit 1, ' '
|
||||
emit lengthof source, source
|
||||
emit 2, 0A0Dh
|
||||
emit 29, spc29
|
||||
compute source, ''
|
||||
print_byte:
|
||||
compute digit, byte shr 4
|
||||
load digit, HexDigits:digit, 1
|
||||
emit 1, digit
|
||||
compute digit, byte and 0Fh
|
||||
load digit, HexDigits:digit, 1
|
||||
emit 1, digit
|
||||
emit 1, ' '
|
||||
compute defined_bytes, defined_bytes - 1
|
||||
compute column, column + 1
|
||||
jump print_bytes
|
||||
fill_up:
|
||||
check column >= 8
|
||||
jyes print_source
|
||||
emit 3, spc3
|
||||
compute column, column + 1
|
||||
jump fill_up
|
||||
print_source:
|
||||
emit 1, ' '
|
||||
emit lengthof source, source
|
||||
emit 2, 0A0Dh
|
||||
next:
|
||||
take , source
|
||||
take , $
|
||||
jump main
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
end namespace
|
||||
|
||||
postpone ?
|
||||
purge ?
|
||||
virtual as 'lst'
|
||||
Listing.generate
|
||||
end virtual
|
||||
end postpone
|
||||
|
||||
calminstruction ? &line&
|
||||
local tmp
|
||||
arrange tmp, line
|
||||
stringify tmp
|
||||
take Listing.collected_source, tmp
|
||||
compute tmp, $ scale 0
|
||||
take Listing.collected_$, tmp
|
||||
compute tmp, $%
|
||||
take Listing.collected_$%, tmp
|
||||
compute tmp, $%%
|
||||
take Listing.collected_$%%, tmp
|
||||
assemble line
|
||||
end calminstruction
|
||||
|
||||
calminstruction restartout? origin
|
||||
arrange origin, =restartout origin
|
||||
assemble origin
|
||||
reset:
|
||||
take , Listing.collected_source
|
||||
take , Listing.collected_$
|
||||
take , Listing.collected_$%
|
||||
take , Listing.collected_$%%
|
||||
jyes reset
|
||||
end calminstruction
|
54
toolchain/fasm2/include/macro/com32.inc
Normal file
54
toolchain/fasm2/include/macro/com32.inc
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
macro cominvk Object,proc,args&
|
||||
iterate arg, args
|
||||
indx 1+%%-%
|
||||
pushd arg
|
||||
end iterate
|
||||
if ~ defined Object#.com.object
|
||||
err `Object,' is not a COM object'
|
||||
end if
|
||||
mov eax,[Object]
|
||||
push eax
|
||||
mov eax,[eax]
|
||||
call [eax+Object.proc]
|
||||
end macro
|
||||
|
||||
macro comcall handle,Interface,proc,args&
|
||||
iterate arg, args
|
||||
indx 1+%%-%
|
||||
pushd arg
|
||||
end iterate
|
||||
if ~ defined Interface#.com.interface
|
||||
err `Interface,' is not a COM interface'
|
||||
end if
|
||||
match prefix [addr], :handle
|
||||
mov eax,handle
|
||||
push eax
|
||||
mov eax,[eax]
|
||||
else
|
||||
push handle
|
||||
local _handle
|
||||
_handle := handle
|
||||
mov eax,[_handle]
|
||||
end match
|
||||
call [eax+Interface.proc]
|
||||
end macro
|
||||
|
||||
macro interface name,methods&
|
||||
struc name
|
||||
. dd ?
|
||||
virtual at 0
|
||||
iterate method, methods
|
||||
.method dd ?
|
||||
end iterate
|
||||
end virtual
|
||||
.com.object = name.com.interface
|
||||
end struc
|
||||
virtual at 0
|
||||
iterate method, methods
|
||||
name.method dd ?
|
||||
end iterate
|
||||
define name
|
||||
name.com.interface = $ shr 2
|
||||
end virtual
|
||||
end macro
|
51
toolchain/fasm2/include/macro/com64.inc
Normal file
51
toolchain/fasm2/include/macro/com64.inc
Normal file
@ -0,0 +1,51 @@
|
||||
|
||||
macro cominvk Object,proc,args&
|
||||
if ~ defined Object#.com.object
|
||||
err `Object,' is not a COM object'
|
||||
end if
|
||||
macro call dummy
|
||||
mov rax,[rcx]
|
||||
Call [rax+Object.proc]
|
||||
end macro
|
||||
match any, args
|
||||
fastcall -,[Object],args
|
||||
else
|
||||
fastcall -,[Object]
|
||||
end match
|
||||
purge call
|
||||
end macro
|
||||
|
||||
macro comcall handle,Interface,proc,args&
|
||||
if ~ defined Interface#.com.interface
|
||||
err `Interface,' is not a COM interface'
|
||||
end if
|
||||
macro call dummy
|
||||
mov rax,[rcx]
|
||||
Call [rax+Interface.proc]
|
||||
end macro
|
||||
match any, args
|
||||
fastcall -,handle,args
|
||||
else
|
||||
fastcall -,handle
|
||||
end match
|
||||
purge call
|
||||
end macro
|
||||
|
||||
macro interface name,methods&
|
||||
struc name
|
||||
. dq ?
|
||||
virtual at 0
|
||||
iterate method, methods
|
||||
.method dq ?
|
||||
end iterate
|
||||
end virtual
|
||||
.com.object = name.com.interface
|
||||
end struc
|
||||
virtual at 0
|
||||
iterate method, methods
|
||||
name.method dq ?
|
||||
end iterate
|
||||
define name
|
||||
name.com.interface = $ shr 3
|
||||
end virtual
|
||||
end macro
|
67
toolchain/fasm2/include/macro/export.inc
Normal file
67
toolchain/fasm2/include/macro/export.inc
Normal file
@ -0,0 +1,67 @@
|
||||
|
||||
macro export dllname,exports&
|
||||
iterate <label,string>, exports
|
||||
|
||||
local module,addresses,names,ordinal,count
|
||||
count = %%
|
||||
dd 0,0,0,RVA module,1
|
||||
dd count,count,RVA addresses,RVA names,RVA ordinal
|
||||
addresses:
|
||||
repeat count
|
||||
indx %
|
||||
dd RVA label
|
||||
end repeat
|
||||
names:
|
||||
repeat count
|
||||
dd RVA names.name#%
|
||||
end repeat
|
||||
ordinal:
|
||||
repeat count
|
||||
dw %-1
|
||||
end repeat
|
||||
module db dllname,0
|
||||
repeat count
|
||||
indx %
|
||||
names.name#% db string,0
|
||||
end repeat
|
||||
|
||||
local x,y,z,str1,str2,v1,v2
|
||||
x = count shr 1
|
||||
while x > 0
|
||||
y = x
|
||||
while y < count
|
||||
z = y
|
||||
while z-x >= 0
|
||||
load v1:dword from names+z*4
|
||||
str1 = ($-(RVA $))+v1
|
||||
load v2:dword from names+(z-x)*4
|
||||
str2 = ($-(RVA $))+v2
|
||||
while v1 > 0
|
||||
load v1:byte from str1+%-1
|
||||
load v2:byte from str2+%-1
|
||||
if v1 <> v2
|
||||
break
|
||||
end if
|
||||
end while
|
||||
if v1 < v2
|
||||
load v1:dword from names+z*4
|
||||
load v2:dword from names+(z-x)*4
|
||||
store v1:dword at names+(z-x)*4
|
||||
store v2:dword at names+z*4
|
||||
load v1:word from ordinal+z*2
|
||||
load v2:word from ordinal+(z-x)*2
|
||||
store v1:word at ordinal+(z-x)*2
|
||||
store v2:word at ordinal+z*2
|
||||
else
|
||||
break
|
||||
end if
|
||||
z = z-x
|
||||
end while
|
||||
y = y+1
|
||||
end while
|
||||
x = x shr 1
|
||||
end while
|
||||
|
||||
break
|
||||
end iterate
|
||||
end macro
|
337
toolchain/fasm2/include/macro/if.inc
Normal file
337
toolchain/fasm2/include/macro/if.inc
Normal file
@ -0,0 +1,337 @@
|
||||
|
||||
define _if _if
|
||||
|
||||
define _if..if? _if
|
||||
define _if..else? _else
|
||||
define _if..elseif? _elseif
|
||||
define _if..endif? _endif
|
||||
define _if..while? _while
|
||||
define _if..endw? _endw
|
||||
define _if..repeat? _repeat
|
||||
define _if..until? _until
|
||||
|
||||
calminstruction (cmd) ? &a&
|
||||
transform cmd,_if
|
||||
arrange cmd, cmd a
|
||||
assemble cmd
|
||||
end calminstruction
|
||||
|
||||
macro _if cond
|
||||
__IF equ :
|
||||
local endif
|
||||
__ENDIF equ endif
|
||||
local else
|
||||
__ELSE equ else
|
||||
jcondexpr __ELSE,1,cond
|
||||
end macro
|
||||
|
||||
macro _else
|
||||
jmp __ENDIF
|
||||
match _else, __ELSE
|
||||
_else:
|
||||
end match
|
||||
restore __IF
|
||||
__IF equ
|
||||
end macro
|
||||
|
||||
macro _elseif cond
|
||||
jmp __ENDIF
|
||||
match _else, __ELSE
|
||||
_else:
|
||||
end match
|
||||
restore __ELSE
|
||||
local else
|
||||
__ELSE equ else
|
||||
jcondexpr __ELSE,1,cond
|
||||
end macro
|
||||
|
||||
macro _endif
|
||||
match :_else, __IF __ELSE
|
||||
_else:
|
||||
end match
|
||||
match endif, __ENDIF
|
||||
endif:
|
||||
end match
|
||||
restore __ELSE
|
||||
restore __ENDIF
|
||||
restore __IF
|
||||
end macro
|
||||
|
||||
macro _while cond
|
||||
local while
|
||||
while:
|
||||
__WHILE equ while
|
||||
local endw
|
||||
__ENDW equ endw
|
||||
jcondexpr __ENDW,1,cond
|
||||
end macro
|
||||
|
||||
macro _endw
|
||||
jmp __WHILE
|
||||
match endw, __ENDW
|
||||
endw:
|
||||
end match
|
||||
restore __ENDW
|
||||
restore __WHILE
|
||||
end macro
|
||||
|
||||
macro _repeat
|
||||
local repeat
|
||||
repeat:
|
||||
__REPEAT equ repeat
|
||||
end macro
|
||||
|
||||
macro _until cond
|
||||
jcondexpr __REPEAT,1,cond
|
||||
restore __REPEAT
|
||||
end macro
|
||||
|
||||
macro newlocal? var
|
||||
local new
|
||||
redefine var new
|
||||
end macro
|
||||
|
||||
macro JCONDEXPR?: target,mode,cond
|
||||
local buffer,current,counter
|
||||
local neg,conj
|
||||
local f,t
|
||||
buffer equ cond
|
||||
newlocal f
|
||||
newlocal t
|
||||
while 1
|
||||
match ~x, buffer
|
||||
buffer equ x
|
||||
neg = (mode) xor 1
|
||||
else
|
||||
neg = mode
|
||||
end match
|
||||
|
||||
match (x, buffer
|
||||
counter = 1
|
||||
current equ (
|
||||
buffer equ x
|
||||
while counter > 0
|
||||
match p)s, buffer
|
||||
match (ps, p
|
||||
counter = counter + 1
|
||||
current equ current (
|
||||
buffer equ ps)s
|
||||
else match pp(ps, p
|
||||
counter = counter + 1
|
||||
current equ current pp(
|
||||
buffer equ ps)s
|
||||
else
|
||||
counter = counter - 1
|
||||
current equ current p
|
||||
buffer equ )s
|
||||
end match
|
||||
else
|
||||
current equ current buffer
|
||||
buffer equ
|
||||
break
|
||||
end match
|
||||
end while
|
||||
else
|
||||
current equ
|
||||
end match
|
||||
|
||||
match a|b, buffer
|
||||
match c&d, a
|
||||
current equ current c
|
||||
buffer equ &d|b
|
||||
else
|
||||
current equ current a
|
||||
buffer equ |b
|
||||
end match
|
||||
else match c&d, buffer
|
||||
match a|b, c
|
||||
current equ current a
|
||||
buffer equ |b&d
|
||||
else
|
||||
current equ current c
|
||||
buffer equ &d
|
||||
end match
|
||||
else
|
||||
current equ current buffer
|
||||
buffer equ
|
||||
end match
|
||||
|
||||
match , buffer
|
||||
match (c), current
|
||||
jcondexpr t,neg,c
|
||||
else match c, current
|
||||
jcond t,neg,c
|
||||
end match
|
||||
break
|
||||
else
|
||||
match |b, buffer
|
||||
buffer equ b
|
||||
conj = 0
|
||||
else match &d, buffer
|
||||
buffer equ d
|
||||
conj = 1
|
||||
else
|
||||
err 'invalid expression'
|
||||
end match
|
||||
if (mode) xor conj
|
||||
match (c), current
|
||||
jcondexpr f,neg xor 1,c
|
||||
else match c, current
|
||||
jcond f,neg xor 1,c
|
||||
end match
|
||||
match t,t
|
||||
t:
|
||||
end match
|
||||
newlocal t
|
||||
|
||||
else
|
||||
match (c), current
|
||||
jcondexpr t,neg,c
|
||||
else match c, current
|
||||
jcond t,neg,c
|
||||
end match
|
||||
match f,f
|
||||
f:
|
||||
end match
|
||||
newlocal f
|
||||
end if
|
||||
end match
|
||||
end while
|
||||
match t,t
|
||||
label t at target
|
||||
end match
|
||||
match f,f
|
||||
f:
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro JCOND? target,neg,cond
|
||||
match =signed? v1>==v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jl target
|
||||
else
|
||||
jge target
|
||||
end if
|
||||
else match =signed? v1<==v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jg target
|
||||
else
|
||||
jle target
|
||||
end if
|
||||
else match v1>==v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jb target
|
||||
else
|
||||
jae target
|
||||
end if
|
||||
else match v1<==v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
ja target
|
||||
else
|
||||
jbe target
|
||||
end if
|
||||
else match v1==v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jne target
|
||||
else
|
||||
je target
|
||||
end if
|
||||
else match v1<>v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
je target
|
||||
else
|
||||
jne target
|
||||
end if
|
||||
else match =signed? v1>v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jle target
|
||||
else
|
||||
jg target
|
||||
end if
|
||||
else match =signed? v1<v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jge target
|
||||
else
|
||||
jl target
|
||||
end if
|
||||
else match v1>v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jbe target
|
||||
else
|
||||
ja target
|
||||
end if
|
||||
else match v1<v2, cond
|
||||
cmp v1,v2
|
||||
if neg
|
||||
jae target
|
||||
else
|
||||
jb target
|
||||
end if
|
||||
else match =ZERO=?, cond
|
||||
if neg
|
||||
jnz target
|
||||
else
|
||||
jz target
|
||||
end if
|
||||
else match =CARRY=?, cond
|
||||
if neg
|
||||
jnc target
|
||||
else
|
||||
jc target
|
||||
end if
|
||||
else match =OVERFLOW=?, cond
|
||||
if neg
|
||||
jno target
|
||||
else
|
||||
jo target
|
||||
end if
|
||||
else match =SIGN=?, cond
|
||||
if neg
|
||||
jns target
|
||||
else
|
||||
js target
|
||||
end if
|
||||
else match =PARITY?, cond
|
||||
if neg
|
||||
jnp target
|
||||
else
|
||||
jp target
|
||||
end if
|
||||
else match v, cond
|
||||
x86.parse_operand@aux v
|
||||
if @aux.type = 'imm'
|
||||
if neg
|
||||
if v = 0
|
||||
jmp target
|
||||
end if
|
||||
else
|
||||
if v
|
||||
jmp target
|
||||
end if
|
||||
end if
|
||||
else if @aux.type = 'reg'
|
||||
test v,v
|
||||
if neg
|
||||
jz target
|
||||
else
|
||||
jnz target
|
||||
end if
|
||||
else
|
||||
cmp v,0
|
||||
if neg
|
||||
je target
|
||||
else
|
||||
jne target
|
||||
end if
|
||||
end if
|
||||
end match
|
||||
end macro
|
59
toolchain/fasm2/include/macro/import32.inc
Normal file
59
toolchain/fasm2/include/macro/import32.inc
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
macro library? definitions&
|
||||
PE.Imports:
|
||||
iterate <name,string>, definitions
|
||||
if ~ name.redundant
|
||||
dd RVA name.lookup,0,0,RVA name.str,RVA name.address
|
||||
end if
|
||||
name.referred = 1
|
||||
end iterate
|
||||
dd 0,0,0,0,0
|
||||
iterate <name,string>, definitions
|
||||
if ~ name.redundant
|
||||
name.str db string,0
|
||||
align 2
|
||||
end if
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro import? name,definitions&
|
||||
align 4
|
||||
if defined name.referred
|
||||
name.lookup:
|
||||
iterate <label,string>, definitions
|
||||
if used label
|
||||
if string eqtype ''
|
||||
dd RVA name.label
|
||||
else
|
||||
dd 80000000h + string
|
||||
end if
|
||||
end if
|
||||
end iterate
|
||||
if $ > name.lookup
|
||||
name.redundant = 0
|
||||
dd 0
|
||||
else
|
||||
name.redundant = 1
|
||||
end if
|
||||
name.address:
|
||||
iterate <label,string>, definitions
|
||||
if used label
|
||||
if string eqtype ''
|
||||
label dd RVA name.label
|
||||
else
|
||||
label dd 80000000h + string
|
||||
end if
|
||||
end if
|
||||
end iterate
|
||||
if ~ name.redundant
|
||||
dd 0
|
||||
end if
|
||||
iterate <label,string>, definitions
|
||||
if used label & string eqtype ''
|
||||
name.label dw 0
|
||||
db string,0
|
||||
align 2
|
||||
end if
|
||||
end iterate
|
||||
end if
|
||||
end macro
|
59
toolchain/fasm2/include/macro/import64.inc
Normal file
59
toolchain/fasm2/include/macro/import64.inc
Normal file
@ -0,0 +1,59 @@
|
||||
|
||||
macro library? definitions&
|
||||
PE.Imports:
|
||||
iterate <name,string>, definitions
|
||||
if ~ name.redundant
|
||||
dd RVA name.lookup,0,0,RVA name.str,RVA name.address
|
||||
end if
|
||||
name.referred = 1
|
||||
end iterate
|
||||
dd 0,0,0,0,0
|
||||
iterate <name,string>, definitions
|
||||
if ~ name.redundant
|
||||
name.str db string,0
|
||||
align 2
|
||||
end if
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro import? name,definitions&
|
||||
align 8
|
||||
if defined name.referred
|
||||
name.lookup:
|
||||
iterate <label,string>, definitions
|
||||
if used label
|
||||
if string eqtype ''
|
||||
dq RVA name.label
|
||||
else
|
||||
dq 8000000000000000h + string
|
||||
end if
|
||||
end if
|
||||
end iterate
|
||||
if $ > name.lookup
|
||||
name.redundant = 0
|
||||
dq 0
|
||||
else
|
||||
name.redundant = 1
|
||||
end if
|
||||
name.address:
|
||||
iterate <label,string>, definitions
|
||||
if used label
|
||||
if string eqtype ''
|
||||
label dq RVA name.label
|
||||
else
|
||||
label dq 8000000000000000h + string
|
||||
end if
|
||||
end if
|
||||
end iterate
|
||||
if ~ name.redundant
|
||||
dq 0
|
||||
end if
|
||||
iterate <label,string>, definitions
|
||||
if used label & string eqtype ''
|
||||
name.label dw 0
|
||||
db string,0
|
||||
align 2
|
||||
end if
|
||||
end iterate
|
||||
end if
|
||||
end macro
|
88
toolchain/fasm2/include/macro/inline.inc
Normal file
88
toolchain/fasm2/include/macro/inline.inc
Normal file
@ -0,0 +1,88 @@
|
||||
|
||||
; Simple preprocessor for inline macros.
|
||||
|
||||
; Example of use:
|
||||
;
|
||||
; inlinemacro oddflip(number)
|
||||
; return = (number) xor 1
|
||||
; end inlinemacro
|
||||
;
|
||||
; db oddflip(3), oddflip(oddflip(0) shl 1)
|
||||
|
||||
; Any kind of definition of an expression-class symbol may be used for the return value.
|
||||
|
||||
include 'xcalm.inc'
|
||||
|
||||
define inlinemacro? inlinemacro?
|
||||
|
||||
inlinemacro... = 0
|
||||
|
||||
calminstruction inlinemacro?! &declaration&
|
||||
local name
|
||||
match name(arguments?), declaration
|
||||
jyes define
|
||||
match name= arguments?, declaration
|
||||
jyes define
|
||||
match name arguments?, declaration
|
||||
define:
|
||||
arrange tmp, =__inline__.name
|
||||
arrange name, =inlinemacro.name
|
||||
publish name, tmp
|
||||
arrange tmp, =struc (=return?) name arguments
|
||||
assemble tmp
|
||||
end calminstruction
|
||||
|
||||
calminstruction end?.inlinemacro?!
|
||||
asm end struc
|
||||
check inlinemacro...
|
||||
jyes done
|
||||
compute inlinemacro..., 1
|
||||
asm inlinemacro?.enable?
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
macro inlinemacro?.enable? chain
|
||||
chain
|
||||
macro include?! file*, head
|
||||
include file, inlinemacro.enable head
|
||||
purge ?, include?
|
||||
end macro
|
||||
calminstruction ?! &text&
|
||||
local head, tail, name, arguments, more, i
|
||||
init i, 0
|
||||
match =inlinemacro? more, text
|
||||
jyes ready
|
||||
transform text, inlinemacro
|
||||
jno ready
|
||||
match =else? more, text
|
||||
jno preprocess
|
||||
compute i, i+1
|
||||
arrange text, =__inline__.?(=else =if 1) =__inline__.?(=__return__.i==1) text =__inline__.?(=end =if) =__inline__.?(=if ~=definite =__return__.i)
|
||||
preprocess:
|
||||
match head? =__inline__.name tail?, text
|
||||
jno ready
|
||||
match (arguments?) tail?, tail, ()
|
||||
jyes inline
|
||||
arrange text, head name tail
|
||||
jump preprocess
|
||||
inline:
|
||||
match ?, name
|
||||
jyes special
|
||||
local tmp, return
|
||||
compute i, i+1
|
||||
arrange return, =__return__.i
|
||||
arrange tmp, return =inlinemacro.name arguments
|
||||
arrange text, head return tail
|
||||
take text, tmp
|
||||
jump preprocess
|
||||
special:
|
||||
arrange text, head tail
|
||||
take text, arguments
|
||||
jump preprocess
|
||||
ready:
|
||||
assemble text
|
||||
take , text
|
||||
take text, text
|
||||
jyes preprocess
|
||||
end calminstruction
|
||||
end macro
|
395
toolchain/fasm2/include/macro/proc32.inc
Normal file
395
toolchain/fasm2/include/macro/proc32.inc
Normal file
@ -0,0 +1,395 @@
|
||||
|
||||
define stdcall? stdcall
|
||||
|
||||
macro stdcall?.push_string value&
|
||||
local continue
|
||||
if sizeof.TCHAR > 1
|
||||
local alignment
|
||||
virtual at $+5
|
||||
align sizeof.TCHAR
|
||||
alignment = $-$$
|
||||
end virtual
|
||||
db alignment dup 90h
|
||||
end if
|
||||
call continue
|
||||
TCHAR value,0
|
||||
continue:
|
||||
end macro
|
||||
|
||||
macro stdcall?: proc*,args&
|
||||
local count
|
||||
count = 0
|
||||
iterate arg, args
|
||||
indx 1+%%-%
|
||||
match =addr? val, arg
|
||||
if val relativeto 0 | val relativeto $
|
||||
push dword val
|
||||
else
|
||||
lea edx,[val]
|
||||
push edx
|
||||
end if
|
||||
else match =double? [var], arg
|
||||
push dword [var+4]
|
||||
push dword [var]
|
||||
count = count + 1
|
||||
else match =double? val, arg
|
||||
local low,high
|
||||
virtual at 0
|
||||
dq val
|
||||
load low:dword from 0
|
||||
load high:dword from 4
|
||||
end virtual
|
||||
push dword high
|
||||
push dword low
|
||||
count = count + 1
|
||||
else match =invoke? func, arg
|
||||
invoke func
|
||||
push eax
|
||||
else match =cinvoke? func, arg
|
||||
cinvoke func
|
||||
push eax
|
||||
else match =stdcall? func, arg
|
||||
stdcall func
|
||||
push eax
|
||||
else match =ccall? func, arg
|
||||
ccall func
|
||||
push eax
|
||||
else match first=,rest, arg
|
||||
stdcall?.push_string arg
|
||||
else match size [var], arg
|
||||
if size = 4
|
||||
push arg
|
||||
else
|
||||
if size = 1
|
||||
mov al, arg
|
||||
else if size = 2
|
||||
mov ax, arg
|
||||
else
|
||||
mov eax, arg
|
||||
end if
|
||||
push eax
|
||||
end if
|
||||
else match [var], arg
|
||||
push dword arg
|
||||
else
|
||||
if arg eqtype ''
|
||||
stdcall?.push_string arg
|
||||
else
|
||||
push dword arg
|
||||
end if
|
||||
end match
|
||||
count = count + 1
|
||||
end iterate
|
||||
pcountcheck proc,count
|
||||
call proc
|
||||
end macro
|
||||
|
||||
macro ccall?: proc*,args&
|
||||
local count
|
||||
count = 0
|
||||
iterate arg, args
|
||||
indx 1+%%-%
|
||||
match =addr? val, arg
|
||||
if val relativeto 0 | val relativeto $
|
||||
push dword val
|
||||
else
|
||||
lea edx,[val]
|
||||
push edx
|
||||
end if
|
||||
else match =double? [var], arg
|
||||
push dword [var+4]
|
||||
push dword [var]
|
||||
count = count + 1
|
||||
else match =double? val, arg
|
||||
local low,high
|
||||
virtual at 0
|
||||
dq val
|
||||
load low:dword from 0
|
||||
load high:dword from 4
|
||||
end virtual
|
||||
push dword high
|
||||
push dword low
|
||||
count = count + 1
|
||||
else match =invoke? func, arg
|
||||
invoke func
|
||||
push eax
|
||||
else match =cinvoke? func, arg
|
||||
cinvoke func
|
||||
push eax
|
||||
else match =stdcall? func, arg
|
||||
stdcall func
|
||||
push eax
|
||||
else match =ccall? func, arg
|
||||
ccall func
|
||||
push eax
|
||||
else match first=,rest, arg
|
||||
stdcall?.push_string arg
|
||||
else match size [var], arg
|
||||
if size = 4
|
||||
push arg
|
||||
else
|
||||
if size = 1
|
||||
mov al, arg
|
||||
else if size = 2
|
||||
mov ax, arg
|
||||
else
|
||||
mov eax, arg
|
||||
end if
|
||||
push eax
|
||||
end if
|
||||
else match [var], arg
|
||||
push dword arg
|
||||
else
|
||||
if arg eqtype ''
|
||||
stdcall?.push_string arg
|
||||
else
|
||||
push dword arg
|
||||
end if
|
||||
end match
|
||||
count = count + 1
|
||||
end iterate
|
||||
pcountcheck proc,count
|
||||
call proc
|
||||
if count
|
||||
add esp,count*4
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro invoke?: proc*,args&
|
||||
stdcall [proc],args
|
||||
end macro
|
||||
|
||||
macro cinvoke?: proc*,args&
|
||||
ccall [proc],args
|
||||
end macro
|
||||
|
||||
macro pcountcheck? proc*,args*
|
||||
end macro
|
||||
|
||||
define pcountsuffix %
|
||||
|
||||
prologue@proc equ prologuedef
|
||||
|
||||
macro prologuedef procname,flag,parmbytes,localbytes,reglist
|
||||
local loc
|
||||
loc = (localbytes+3) and (not 3)
|
||||
parmbase@proc equ ebp+8
|
||||
localbase@proc equ ebp-loc
|
||||
if parmbytes | localbytes
|
||||
push ebp
|
||||
mov ebp,esp
|
||||
if localbytes
|
||||
sub esp,loc
|
||||
end if
|
||||
end if
|
||||
iterate reg, reglist
|
||||
push reg
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
epilogue@proc equ epiloguedef
|
||||
|
||||
macro epiloguedef procname,flag,parmbytes,localbytes,reglist
|
||||
iterate reg, reglist
|
||||
indx %%-%+1
|
||||
pop reg
|
||||
end iterate
|
||||
if parmbytes | localbytes
|
||||
leave
|
||||
end if
|
||||
if flag and 10000b
|
||||
retn
|
||||
else
|
||||
retn parmbytes
|
||||
end if
|
||||
end macro
|
||||
|
||||
close@proc equ
|
||||
|
||||
macro proc? statement&
|
||||
|
||||
local _local,params,flag,regs,parmbytes,localbytes,current,tmp,initlocal
|
||||
|
||||
macro endp?!
|
||||
|
||||
localbytes = current
|
||||
|
||||
purge ret?,locals?,endl?,proclocal?
|
||||
|
||||
match close:reglist, close@proc,<regs>
|
||||
close name,flag,parmbytes,localbytes,reglist
|
||||
end match
|
||||
|
||||
end match
|
||||
end namespace
|
||||
end if
|
||||
end match
|
||||
|
||||
purge endp?
|
||||
|
||||
end macro
|
||||
|
||||
match name declaration, statement :
|
||||
if used name
|
||||
name:
|
||||
namespace name
|
||||
outscope match local?, proclocal
|
||||
|
||||
match =stdcall? args :, declaration
|
||||
define params args
|
||||
flag = 11b
|
||||
else match =stdcall? :, declaration
|
||||
define params
|
||||
flag = 11b
|
||||
else match =c? args :, declaration
|
||||
define params args
|
||||
flag = 10001b
|
||||
else match =c? :, declaration
|
||||
define params
|
||||
flag = 10001b
|
||||
else match args :, declaration
|
||||
define params args
|
||||
flag = 0
|
||||
else
|
||||
define params
|
||||
flag = 0
|
||||
end match
|
||||
define regs
|
||||
match =uses? list, params
|
||||
define params list
|
||||
while 1
|
||||
match =, tail, params
|
||||
define params tail
|
||||
break
|
||||
else match reg tail, params&
|
||||
match more&, tail
|
||||
define params more
|
||||
else
|
||||
define params
|
||||
end match
|
||||
if % = 1
|
||||
regs equ reg
|
||||
else
|
||||
regs equ regs,reg
|
||||
end if
|
||||
else
|
||||
break
|
||||
end match
|
||||
end while
|
||||
else match =, tail, params
|
||||
define params tail
|
||||
end match
|
||||
|
||||
match prologue:reglist, prologue@proc:<regs>
|
||||
prologue name,flags,parmbytes,localbytes,reglist
|
||||
end match
|
||||
|
||||
virtual at parmbase@proc
|
||||
namespace name
|
||||
match args, params
|
||||
iterate arg, args
|
||||
match argname:type, arg
|
||||
label argname:type
|
||||
rb type
|
||||
else
|
||||
?arg dd ?
|
||||
end match
|
||||
end iterate
|
||||
end match
|
||||
parmbytes := $-(parmbase@proc)
|
||||
match p, pcountsuffix
|
||||
name#p = parmbytes/4
|
||||
end match
|
||||
end namespace
|
||||
end virtual
|
||||
|
||||
macro ret? operand
|
||||
match any, operand
|
||||
retn operand
|
||||
else
|
||||
match epilogue:reglist, epilogue@proc:<regs>
|
||||
epilogue name,flag,parmbytes,localbytes,reglist
|
||||
end match
|
||||
end match
|
||||
end macro
|
||||
|
||||
current = 0
|
||||
|
||||
macro initlocal
|
||||
local area,pointer,length,value
|
||||
area::
|
||||
pointer = localbase@proc+current
|
||||
length = $@ - (localbase@proc) - current
|
||||
current = $ - (localbase@proc)
|
||||
end virtual
|
||||
while length > 0
|
||||
if length < 2
|
||||
load value:byte from area:pointer
|
||||
mov byte [pointer],value
|
||||
pointer = pointer + 1
|
||||
length = length - 1
|
||||
else if length < 4
|
||||
load value:word from area:pointer
|
||||
mov word [pointer],value
|
||||
pointer = pointer + 2
|
||||
length = length - 2
|
||||
else
|
||||
load value:dword from area:pointer
|
||||
mov dword [pointer],value
|
||||
pointer = pointer + 4
|
||||
length = length - 4
|
||||
end if
|
||||
end while
|
||||
virtual at localbase@proc+current
|
||||
end macro
|
||||
|
||||
macro locals?
|
||||
virtual at localbase@proc+current
|
||||
iterate dword, dword,qword
|
||||
macro dword? value
|
||||
if value relativeto 0
|
||||
emit dword: value
|
||||
else
|
||||
initlocal
|
||||
local pointer
|
||||
pointer := $
|
||||
end virtual
|
||||
mov dword [pointer],value
|
||||
virtual at pointer+4
|
||||
current = $ - (localbase@proc)
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
macro ? line&
|
||||
line
|
||||
if $ > $@
|
||||
initlocal
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
macro endl?
|
||||
purge ?, dword?,qword?
|
||||
initlocal
|
||||
end virtual
|
||||
end macro
|
||||
|
||||
macro proclocal? args&
|
||||
locals
|
||||
iterate arg, args
|
||||
match varname[count]:type, arg
|
||||
?varname dbx type:count dup ?
|
||||
else match varname:type, arg
|
||||
?varname dbx type, ?
|
||||
else match varname[count], arg
|
||||
?varname rd count
|
||||
else match varname type, arg
|
||||
?varname type
|
||||
else
|
||||
?arg dd ?
|
||||
end match
|
||||
end iterate
|
||||
endl
|
||||
end macro
|
||||
|
||||
end macro
|
491
toolchain/fasm2/include/macro/proc64.inc
Normal file
491
toolchain/fasm2/include/macro/proc64.inc
Normal file
@ -0,0 +1,491 @@
|
||||
define fastcall? fastcall
|
||||
|
||||
fastcall.r1 equ rcx
|
||||
fastcall.rd1 equ ecx
|
||||
fastcall.rw1 equ cx
|
||||
fastcall.rb1 equ cl
|
||||
fastcall.rf1 equ xmm0
|
||||
|
||||
fastcall.r2 equ rdx
|
||||
fastcall.rd2 equ edx
|
||||
fastcall.rw2 equ dx
|
||||
fastcall.rb2 equ dl
|
||||
fastcall.rf2 equ xmm1
|
||||
|
||||
fastcall.r3 equ r8
|
||||
fastcall.rd3 equ r8d
|
||||
fastcall.rw3 equ r8w
|
||||
fastcall.rb3 equ r8b
|
||||
fastcall.rf3 equ xmm2
|
||||
|
||||
fastcall.r4 equ r9
|
||||
fastcall.rd4 equ r9d
|
||||
fastcall.rw4 equ r9w
|
||||
fastcall.rb4 equ r9b
|
||||
fastcall.rf4 equ xmm3
|
||||
|
||||
fastcall?.frame = -1
|
||||
|
||||
macro frame?
|
||||
local size
|
||||
define fastcall?.frame_size size
|
||||
fastcall?.frame =: 0
|
||||
sub rsp,size
|
||||
end macro
|
||||
|
||||
macro end?.frame?
|
||||
match size, fastcall?.frame_size
|
||||
size := fastcall?.frame
|
||||
add rsp,size
|
||||
end match
|
||||
restore fastcall?.frame,fastcall?.frame_size
|
||||
end macro
|
||||
|
||||
macro endf?
|
||||
end frame
|
||||
end macro
|
||||
|
||||
macro fastcall?.inline_string var
|
||||
local data,continue
|
||||
jmp continue
|
||||
if sizeof.TCHAR > 1
|
||||
align sizeof.TCHAR,90h
|
||||
end if
|
||||
match value, var
|
||||
data TCHAR value,0
|
||||
end match
|
||||
redefine var data
|
||||
continue:
|
||||
end macro
|
||||
|
||||
macro fastcall?: proc*,args&
|
||||
local offset,framesize,type,value
|
||||
if framesize & fastcall?.frame < 0
|
||||
sub rsp,framesize
|
||||
end if
|
||||
offset = 0
|
||||
local nest,called
|
||||
called = 0
|
||||
iterate arg, args
|
||||
nest = 0
|
||||
match =invoke? func, arg
|
||||
nest = %
|
||||
else match =fastcall? func, arg
|
||||
nest = %
|
||||
end match
|
||||
if nest
|
||||
if called
|
||||
mov [rsp+8*(called-1)],rax
|
||||
end if
|
||||
frame
|
||||
arg
|
||||
end frame
|
||||
called = nest
|
||||
end if
|
||||
end iterate
|
||||
iterate arg, args
|
||||
match =float? val, arg
|
||||
type = 'f'
|
||||
value reequ val
|
||||
SSE.parse_operand@src val
|
||||
else match =addr? val, arg
|
||||
type = 'a'
|
||||
value reequ val
|
||||
x86.parse_operand@src [val]
|
||||
else match =invoke? func, arg
|
||||
if called = %
|
||||
type = 0
|
||||
value reequ rax
|
||||
x86.parse_operand@src rax
|
||||
else
|
||||
type = 'r'
|
||||
end if
|
||||
else match =fastcall? func, arg
|
||||
if called = %
|
||||
type = 0
|
||||
value reequ rax
|
||||
x86.parse_operand@src rax
|
||||
else
|
||||
type = 'r'
|
||||
end if
|
||||
else match first=,rest, arg
|
||||
type = 's'
|
||||
value reequ arg
|
||||
else
|
||||
type = 0
|
||||
value reequ arg
|
||||
SSE.parse_operand@src arg
|
||||
if @src.type = 'imm' & @src.size = 0
|
||||
if value eqtype ''
|
||||
type = 's'
|
||||
end if
|
||||
end if
|
||||
end match
|
||||
if type = 's'
|
||||
fastcall.inline_string value
|
||||
type = 'a'
|
||||
end if
|
||||
if % < 5
|
||||
if type = 'f'
|
||||
if @src.size = 8 | ~ @src.size | @src.type = 'mmreg'
|
||||
if @src.type = 'imm'
|
||||
mov rax,value
|
||||
movq fastcall.rf#%,rax
|
||||
else
|
||||
movq fastcall.rf#%,value
|
||||
end if
|
||||
else if @src.size = 4
|
||||
if @src.type = 'imm'
|
||||
mov eax,value
|
||||
movd fastcall.rf#%,eax
|
||||
else
|
||||
movd fastcall.rf#%,value
|
||||
end if
|
||||
else
|
||||
err 'invalid argument ',`arg
|
||||
end if
|
||||
else
|
||||
if type = 'a'
|
||||
lea fastcall.r#%,[value]
|
||||
else
|
||||
if type = 'r'
|
||||
@src.size = 8
|
||||
@src.type = 'mem'
|
||||
value equ [rsp+8*(%-1)]
|
||||
end if
|
||||
if @src.size = 8 | ~ @src.size
|
||||
if @src.type <> 'reg' | ~ @src.imm eq fastcall.r#%
|
||||
mov fastcall.r#%,value
|
||||
end if
|
||||
else if @src.size = 4
|
||||
if @src.type <> 'reg' | ~ @src.imm eq fastcall.rd#%
|
||||
mov fastcall.rd#%,value
|
||||
end if
|
||||
else if @src.size = 2
|
||||
if @src.type <> 'reg' | ~ @src.imm eq fastcall.rw#%
|
||||
mov fastcall.rw#%,value
|
||||
end if
|
||||
else if @src.size = 1
|
||||
if @src.type <> 'reg' | ~ @src.imm eq fastcall.rb#%
|
||||
mov fastcall.rb#%,value
|
||||
end if
|
||||
else
|
||||
err 'invalid argument ',`arg
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
else
|
||||
if type = 'r'
|
||||
; already on stack
|
||||
else if @src.type = 'reg'
|
||||
mov [rsp+offset],value
|
||||
else if @src.type = 'mem'
|
||||
if type = 'a'
|
||||
lea rax,[value]
|
||||
mov [rsp+offset],rax
|
||||
else
|
||||
if @src.size = 8 | ~ @src.size
|
||||
mov rax,value
|
||||
mov [rsp+offset],rax
|
||||
else if @src.size = 4
|
||||
mov eax,value
|
||||
mov [rsp+offset],eax
|
||||
else if @src.size = 2
|
||||
mov ax,value
|
||||
mov [rsp+offset],ax
|
||||
else if @src.size = 1
|
||||
mov al,value
|
||||
mov [rsp+offset],al
|
||||
else
|
||||
err 'invalid argument ',`arg
|
||||
end if
|
||||
end if
|
||||
else if @src.type = 'imm'
|
||||
if @src.size = 8 | ~ @src.size
|
||||
if (value) relativeto 0 & (value) - 1 shl 64 >= -80000000h & (value) < 1 shl 64
|
||||
mov rax,(value) - 1 shl 64
|
||||
mov [rsp+offset],rax
|
||||
else if (value) relativeto 0 & ( (value) >= 80000000h | (value) < -80000000h )
|
||||
mov rax,value
|
||||
mov [rsp+offset],rax
|
||||
else
|
||||
mov qword [rsp+offset],value
|
||||
end if
|
||||
else if @src.size = 4
|
||||
mov dword [rsp+offset],value
|
||||
else if @src.size = 2
|
||||
mov word [rsp+offset],value
|
||||
else if @src.size = 1
|
||||
mov byte [rsp+offset],value
|
||||
else
|
||||
err 'invalid argument ',`arg
|
||||
end if
|
||||
else if type = 'f' & @src.type = 'mmreg' & @src.size = 16
|
||||
movq [rsp+offset],value
|
||||
else
|
||||
err 'invalid argument ',`arg
|
||||
end if
|
||||
end if
|
||||
offset = offset + 8
|
||||
end iterate
|
||||
pcountcheck proc,offset/8
|
||||
if offset < 20h
|
||||
offset = 20h
|
||||
end if
|
||||
framesize = offset + offset and 8
|
||||
call proc
|
||||
if framesize & fastcall?.frame < 0
|
||||
add rsp,framesize
|
||||
else if fastcall?.frame >= 0 & framesize > fastcall?.frame
|
||||
fastcall?.frame = framesize
|
||||
end if
|
||||
end macro
|
||||
|
||||
macro invoke?: proc*,args&
|
||||
fastcall [proc],args
|
||||
end macro
|
||||
|
||||
macro cinvoke?: proc*,args&
|
||||
fastcall [proc],args
|
||||
end macro
|
||||
|
||||
macro pcountcheck? proc*,args*
|
||||
end macro
|
||||
|
||||
define pcountsuffix %
|
||||
|
||||
prologue@proc equ prologuedef
|
||||
|
||||
macro prologuedef procname,flag,parmbytes,localbytes,reglist
|
||||
local loc,fill
|
||||
loc = (localbytes+15) and (not 15)
|
||||
parmbase@proc equ rbp+16
|
||||
localbase@proc equ rbp-loc
|
||||
push rbp
|
||||
mov rbp,rsp
|
||||
if loc+fill
|
||||
sub rsp,loc+fill
|
||||
end if
|
||||
match any, reglist
|
||||
iterate reg, reglist
|
||||
push reg
|
||||
if % = %%
|
||||
fill := 8*(% and 1)
|
||||
end if
|
||||
end iterate
|
||||
else
|
||||
fill := 0
|
||||
end match
|
||||
end macro
|
||||
|
||||
epilogue@proc equ epiloguedef
|
||||
|
||||
macro epiloguedef procname,flag,parmbytes,localbytes,reglist
|
||||
iterate reg, reglist
|
||||
indx %%-%+1
|
||||
pop reg
|
||||
end iterate
|
||||
leave
|
||||
retn
|
||||
end macro
|
||||
|
||||
close@proc equ
|
||||
|
||||
macro proc? statement&
|
||||
|
||||
local _local,params,flag,regs,parmbytes,localbytes,current,tmp,initlocal
|
||||
|
||||
macro endp?!
|
||||
|
||||
localbytes = current
|
||||
|
||||
purge ret?,locals?,endl?,proclocal?
|
||||
|
||||
match close:reglist, close@proc,<regs>
|
||||
close name,flag,parmbytes,localbytes,reglist
|
||||
end match
|
||||
|
||||
end match
|
||||
end namespace
|
||||
end if
|
||||
end match
|
||||
|
||||
purge endp?
|
||||
|
||||
end macro
|
||||
|
||||
match name declaration, statement :
|
||||
if used name
|
||||
name:
|
||||
namespace name
|
||||
outscope match local?, proclocal
|
||||
|
||||
match =stdcall? args :, declaration
|
||||
define params args
|
||||
flag = 11b
|
||||
else match =stdcall? :, declaration
|
||||
define params
|
||||
flag = 11b
|
||||
else match =c? args :, declaration
|
||||
define params args
|
||||
flag = 10001b
|
||||
else match =c? :, declaration
|
||||
define params
|
||||
flag = 10001b
|
||||
else match args :, declaration
|
||||
define params args
|
||||
flag = 0
|
||||
else
|
||||
define params
|
||||
flag = 0
|
||||
end match
|
||||
define regs
|
||||
match =uses? list, params
|
||||
define params list
|
||||
while 1
|
||||
match =, tail, params
|
||||
define params tail
|
||||
break
|
||||
else match reg tail, params&
|
||||
match more&, tail
|
||||
define params more
|
||||
else
|
||||
define params
|
||||
end match
|
||||
if % = 1
|
||||
regs equ reg
|
||||
else
|
||||
regs equ regs,reg
|
||||
end if
|
||||
else
|
||||
break
|
||||
end match
|
||||
end while
|
||||
else match =, tail, params
|
||||
define params tail
|
||||
end match
|
||||
|
||||
match prologue:reglist, prologue@proc:<regs>
|
||||
prologue name,flags,parmbytes,localbytes,reglist
|
||||
end match
|
||||
|
||||
virtual at parmbase@proc
|
||||
namespace name
|
||||
match args, params
|
||||
iterate arg, args
|
||||
match argname:type, arg
|
||||
label argname:type
|
||||
rb type
|
||||
else
|
||||
?arg dq ?
|
||||
end match
|
||||
end iterate
|
||||
end match
|
||||
parmbytes := $-(parmbase@proc)
|
||||
match p, pcountsuffix
|
||||
name#p = parmbytes/8
|
||||
end match
|
||||
end namespace
|
||||
end virtual
|
||||
|
||||
macro ret? operand
|
||||
match any, operand
|
||||
retn operand
|
||||
else
|
||||
match epilogue:reglist, epilogue@proc:<regs>
|
||||
epilogue name,flag,parmbytes,localbytes,reglist
|
||||
end match
|
||||
end match
|
||||
end macro
|
||||
|
||||
current = 0
|
||||
|
||||
macro initlocal
|
||||
local area,pointer,length,value
|
||||
area::
|
||||
pointer = localbase@proc+current
|
||||
length = $@ - (localbase@proc) - current
|
||||
current = $ - (localbase@proc)
|
||||
end virtual
|
||||
while length > 0
|
||||
if length < 2
|
||||
load value:byte from area:pointer
|
||||
mov byte [pointer],value
|
||||
pointer = pointer + 1
|
||||
length = length - 1
|
||||
else if length < 4
|
||||
load value:word from area:pointer
|
||||
mov word [pointer],value
|
||||
pointer = pointer + 2
|
||||
length = length - 2
|
||||
else if length < 8
|
||||
load value:dword from area:pointer
|
||||
mov dword [pointer],value
|
||||
pointer = pointer + 4
|
||||
length = length - 4
|
||||
else
|
||||
load value:qword from area:pointer
|
||||
if value < 80000000h | value >= 1 shl 64 - 80000000h
|
||||
mov qword [pointer],value
|
||||
pointer = pointer + 8
|
||||
length = length - 8
|
||||
else
|
||||
mov dword [pointer],value and 0FFFFFFFFh
|
||||
pointer = pointer + 4
|
||||
length = length - 4
|
||||
end if
|
||||
end if
|
||||
end while
|
||||
virtual at localbase@proc+current
|
||||
end macro
|
||||
|
||||
macro locals?
|
||||
virtual at localbase@proc+current
|
||||
iterate dword, dword,qword
|
||||
macro dword? value
|
||||
if value relativeto 0
|
||||
emit dword: value
|
||||
else
|
||||
initlocal
|
||||
local pointer
|
||||
pointer := $
|
||||
end virtual
|
||||
mov dword [pointer],value
|
||||
virtual at pointer+4
|
||||
current = $ - (localbase@proc)
|
||||
end if
|
||||
end macro
|
||||
end iterate
|
||||
macro ? line&
|
||||
line
|
||||
if $ > $@
|
||||
initlocal
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
macro endl?
|
||||
purge ?, dword?,qword?
|
||||
initlocal
|
||||
end virtual
|
||||
end macro
|
||||
|
||||
macro proclocal? args&
|
||||
locals
|
||||
iterate arg, args
|
||||
match varname[count]:type, arg
|
||||
?varname dbx type:count dup ?
|
||||
else match varname:type, arg
|
||||
?varname dbx type, ?
|
||||
else match varname[count], arg
|
||||
?varname rq count
|
||||
else match varname type, arg
|
||||
?varname type
|
||||
else
|
||||
?arg dq ?
|
||||
end match
|
||||
end iterate
|
||||
endl
|
||||
end macro
|
||||
|
||||
end macro
|
314
toolchain/fasm2/include/macro/resource.inc
Normal file
314
toolchain/fasm2/include/macro/resource.inc
Normal file
@ -0,0 +1,314 @@
|
||||
|
||||
macro directory definitions&
|
||||
iterate <type,label>, definitions
|
||||
root@resource dd 0,%t,0,%% shl 16
|
||||
local total,current,next
|
||||
total = %%
|
||||
current = -1
|
||||
next = 0
|
||||
while current < next
|
||||
current = next
|
||||
repeat total
|
||||
indx %
|
||||
if type = current
|
||||
dd type,80000000h+label-root@resource
|
||||
else if type > current & ( next = current | next > type )
|
||||
next = type
|
||||
end if
|
||||
end repeat
|
||||
end while
|
||||
break
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro resource dir,definitions&
|
||||
iterate <id,lang,label>, definitions
|
||||
dir dd 0,%t,0,%% shl 16
|
||||
local total,current,next,counter
|
||||
total = %%
|
||||
current = -1
|
||||
next = 0
|
||||
while current < next
|
||||
current = next
|
||||
counter = 0
|
||||
repeat total
|
||||
indx %
|
||||
if id = current
|
||||
if counter = 0
|
||||
dd id,80000000h+label.directory-root@resource
|
||||
end if
|
||||
counter = counter + 1
|
||||
label.count = counter
|
||||
else if id > current & ( next = current | next > id )
|
||||
next = id
|
||||
end if
|
||||
end repeat
|
||||
end while
|
||||
current = -1
|
||||
next = 0
|
||||
while current < next
|
||||
current = next
|
||||
counter = 0
|
||||
repeat total
|
||||
indx %
|
||||
if id = current
|
||||
if counter = 0
|
||||
label.directory dd 0,%t,0,label.count shl 16
|
||||
dd lang,label-root@resource
|
||||
label.resid = id
|
||||
else
|
||||
dd lang,label-root@resource
|
||||
end if
|
||||
counter = counter + 1
|
||||
else if id > current & ( next = current | next > id )
|
||||
next = id
|
||||
end if
|
||||
end repeat
|
||||
end while
|
||||
break
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro bitmap label,bitmap_file
|
||||
local data,size
|
||||
label dd RVA data,size,0,0
|
||||
data file bitmap_file:0Eh
|
||||
size = $ - data
|
||||
align 4
|
||||
end macro
|
||||
|
||||
macro icon group,definitions&
|
||||
local data,size,position,header
|
||||
iterate <label,icon_file>, definitions
|
||||
virtual at 0
|
||||
file icon_file:6,16
|
||||
load size:dword from 8
|
||||
load position:dword from 12
|
||||
end virtual
|
||||
label dd RVA data#%,size,0,0
|
||||
data#% file icon_file:position,size
|
||||
if % = %%
|
||||
align 4
|
||||
group dd RVA header,6+%%*14,0,0
|
||||
header dw 0,1,%%
|
||||
repeat %%
|
||||
indx %
|
||||
file icon_file:6,12
|
||||
dw label.resid
|
||||
end repeat
|
||||
align 4
|
||||
end if
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro cursor group,definitions&
|
||||
local data,header
|
||||
iterate <label,cursor_file>, definitions
|
||||
virtual at 0
|
||||
file cursor_file:6,16
|
||||
load label.width:byte from 0
|
||||
load label.height:byte from 1
|
||||
load label.size:dword from 8
|
||||
load label.position:dword from 12
|
||||
end virtual
|
||||
label dd RVA data#%,label.size+4,0,0
|
||||
data#% file cursor_file:10,4
|
||||
file cursor_file:label.position,label.size
|
||||
if % = %%
|
||||
align 4
|
||||
group dd RVA header,6+%%*14,0,0
|
||||
header dw 0,2,%%
|
||||
repeat %%
|
||||
indx %
|
||||
dw label.width,label.height,1,0
|
||||
dd label.size+4
|
||||
dw label.resid
|
||||
end repeat
|
||||
align 4
|
||||
end if
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro menu label
|
||||
local data,size
|
||||
label dd RVA data,size,0,0
|
||||
data dw 1,4,0,0
|
||||
local menu_level
|
||||
menu_level = 1
|
||||
macro menuitem string,id,resinfo:0,status:0,type:0
|
||||
dd MFT_STRING or type,status,id
|
||||
dw resinfo
|
||||
du string,0
|
||||
align 4
|
||||
if resinfo and MFR_END
|
||||
menu_level = menu_level - 1
|
||||
end if
|
||||
if resinfo and MFR_POPUP
|
||||
menu_level = menu_level + 1
|
||||
dd 0
|
||||
end if
|
||||
if menu_level = 0
|
||||
size = $ - data
|
||||
purge menuitem,menuseparator
|
||||
end if
|
||||
end macro
|
||||
macro menuseparator resinfo:0
|
||||
dd MFT_SEPARATOR,0,0
|
||||
dw resinfo,0
|
||||
if resinfo and MFR_END
|
||||
menu_level = menu_level - 1
|
||||
end if
|
||||
if menu_level = 0
|
||||
size = $ - data
|
||||
purge menuitem,menuseparator
|
||||
end if
|
||||
end macro
|
||||
end macro
|
||||
|
||||
macro dialog label,title,x,y,cx,cy,style,exstyle:0,menu:0,fontname:'MS Sans Serif',fontsize:8
|
||||
local data,size,items
|
||||
label dd RVA data,size,0,0
|
||||
data dd style or DS_SETFONT,exstyle
|
||||
dw items,x,y,cx,cy
|
||||
if menu <> 0
|
||||
dw 0FFFFh
|
||||
end if
|
||||
du menu,0,title,0
|
||||
du fontsize,fontname,0
|
||||
align 4
|
||||
local dialog_items_counter
|
||||
dialog_items_counter = 0
|
||||
macro dialogitem class,it_title,it_id,it_x,it_y,it_cx,it_cy,it_style,it_exstyle:0
|
||||
dd it_style or WS_CHILD,it_exstyle
|
||||
dw it_x,it_y,it_cx,it_cy,it_id
|
||||
if class eq 'BUTTON'
|
||||
dw 0FFFFh,80h
|
||||
else if class eq 'EDIT'
|
||||
dw 0FFFFh,81h
|
||||
else if class eq 'STATIC'
|
||||
dw 0FFFFh,82h
|
||||
else if class eq 'LISTBOX'
|
||||
dw 0FFFFh,83h
|
||||
else if class eq 'SCROLLBAR'
|
||||
dw 0FFFFh,84h
|
||||
else if class eq 'COMBOBOX'
|
||||
dw 0FFFFh,85h
|
||||
else
|
||||
du class,0
|
||||
end if
|
||||
match any=,any, it_title
|
||||
du it_title,0
|
||||
else if it_title eqtype ''
|
||||
du it_title,0
|
||||
else
|
||||
dw 0FFFFh,it_title
|
||||
end if
|
||||
dw 0
|
||||
align 4
|
||||
dialog_items_counter = dialog_items_counter + 1
|
||||
end macro
|
||||
macro enddialog
|
||||
size = $ - data
|
||||
items = dialog_items_counter
|
||||
purge dialogitem,enddialog
|
||||
end macro
|
||||
end macro
|
||||
|
||||
macro accelerator label,definitions&
|
||||
local data,size
|
||||
label dd RVA data,size,0,0
|
||||
data:
|
||||
iterate <fvirt,key,cmd>, definitions
|
||||
if % = %%
|
||||
dw fvirt or 80h,key
|
||||
size = %% * 8
|
||||
else
|
||||
dw fvirt,key
|
||||
end if
|
||||
dd cmd
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
macro versioninfo label,fileos,filetype:0,filesubtype:0,lang,cp:0,values&
|
||||
local data,size,vivalue,visize
|
||||
label dd RVA data,size,0,0
|
||||
data dw size,visize,0
|
||||
du 'VS_VERSION_INFO',0,0
|
||||
vivalue dd 0FEEF04BDh,00010000h
|
||||
local version,count,shift,char,filever,productver
|
||||
filever = 0
|
||||
productver = 0
|
||||
iterate <name,value>, values
|
||||
if name eq 'FileVersion' | name eq 'ProductVersion'
|
||||
virtual at 0
|
||||
db value
|
||||
count = $
|
||||
version = 0
|
||||
shift = 16
|
||||
repeat count
|
||||
load char:byte from %-1
|
||||
if char='.'
|
||||
if shift mod 32
|
||||
shift = shift-16
|
||||
else
|
||||
shift = shift+32+16
|
||||
end if
|
||||
else
|
||||
version = (version and not (0FFFFh shl shift)) or ((version shr shift and 0FFFFh)*10+char-'0') shl shift
|
||||
end if
|
||||
end repeat
|
||||
end virtual
|
||||
if name eq 'FileVersion'
|
||||
filever = version
|
||||
else if name eq 'ProductVersion'
|
||||
productver = version
|
||||
end if
|
||||
end if
|
||||
end iterate
|
||||
dq filever,productver
|
||||
dd 0,0,fileos,filetype,filesubtype,0,0
|
||||
visize = $ - vivalue
|
||||
local sfi_data,sfi_size
|
||||
sfi_data dd sfi_size
|
||||
du 1,'StringFileInfo',0
|
||||
local str_data,str_size
|
||||
str_data dd str_size
|
||||
du 1,'040904E4',0
|
||||
macro vdata name,value&
|
||||
local vs_data,vs_size,value_data,value_size
|
||||
align 4
|
||||
vs_data dw vs_size,value_size/2
|
||||
du 1,name,0
|
||||
align 4
|
||||
value_data du value,0
|
||||
value_size = $ - value_data
|
||||
vs_size = $ - vs_data
|
||||
end macro
|
||||
iterate <name,value>, values
|
||||
vdata name,value
|
||||
end iterate
|
||||
purge vdata
|
||||
align 4
|
||||
str_size = $ - str_data
|
||||
sfi_size = $ - sfi_data
|
||||
local vfi_data,vfi_size,var_data,var_size
|
||||
vfi_data dd vfi_size
|
||||
du 1,'VarFileInfo',0,0
|
||||
var_data dw var_size,4
|
||||
du 0,'Translation',0,0
|
||||
dw lang,cp
|
||||
var_size = $ - var_data
|
||||
vfi_size = $ - vfi_data
|
||||
size = $ - data
|
||||
end macro
|
||||
|
||||
macro resdata label
|
||||
local data,size
|
||||
label dd RVA data,size,0,0
|
||||
data = $
|
||||
macro endres
|
||||
size = $ - data
|
||||
align 4
|
||||
purge endres
|
||||
end macro
|
||||
end macro
|
456
toolchain/fasm2/include/macro/struct.inc
Normal file
456
toolchain/fasm2/include/macro/struct.inc
Normal file
@ -0,0 +1,456 @@
|
||||
|
||||
define struct? struct?
|
||||
|
||||
namespace struct?
|
||||
|
||||
calminstruction instantiate: instance*, sname*, &values&
|
||||
|
||||
local tmp
|
||||
arrange tmp, =label instance : sname.=__size__
|
||||
assemble tmp
|
||||
arrange tmp, =namespace instance
|
||||
assemble tmp
|
||||
|
||||
match , values
|
||||
jyes values_ready
|
||||
call struct?.initialize, sname, values
|
||||
values_ready:
|
||||
|
||||
local i
|
||||
compute i, 1
|
||||
local field, val, stack
|
||||
process_statement:
|
||||
arrange field, sname.=__label#i
|
||||
transform field
|
||||
jyes labeled_statement
|
||||
arrange field,
|
||||
arrange tmp, sname.=__statement#i
|
||||
transform tmp
|
||||
jyes statement_ready
|
||||
jump finish
|
||||
|
||||
labeled_statement:
|
||||
arrange tmp, sname.=__label#i sname.=__definition#i
|
||||
transform tmp
|
||||
arrange val, =__init__.#field
|
||||
transform val
|
||||
jyes got_value
|
||||
arrange val, sname.=__default__.#field
|
||||
arrange field,
|
||||
transform val
|
||||
jno statement_ready
|
||||
got_value:
|
||||
arrange tmp, tmp val
|
||||
|
||||
statement_ready:
|
||||
|
||||
take stack, field
|
||||
take stack, i
|
||||
take stack, sname
|
||||
assemble tmp
|
||||
take , sname
|
||||
take sname, stack
|
||||
take , i
|
||||
take i, stack
|
||||
take , field
|
||||
take field, stack
|
||||
match , field
|
||||
jyes next_statement
|
||||
|
||||
arrange tmp, sname.=__size__.#field - (=$ - field)
|
||||
compute tmp, tmp
|
||||
check tmp = 0
|
||||
jyes next_statement
|
||||
check tmp > 0
|
||||
jyes fill_up
|
||||
stringify field
|
||||
err 'value too long to fit in ' bappend field
|
||||
jump next_statement
|
||||
fill_up:
|
||||
arrange tmp, =rb tmp
|
||||
assemble tmp
|
||||
|
||||
next_statement:
|
||||
compute i, i + 1
|
||||
jump process_statement
|
||||
|
||||
finish:
|
||||
asm end namespace
|
||||
end calminstruction
|
||||
|
||||
calminstruction initialize sname*, values&
|
||||
|
||||
local j, a
|
||||
compute j, 0
|
||||
arrange a, sname.=__argument
|
||||
|
||||
local tmp, field, val, sub
|
||||
process_argument:
|
||||
match field=, values, values, <>
|
||||
jyes got_argument
|
||||
arrange field, values
|
||||
arrange values,
|
||||
got_argument:
|
||||
match field:val?, field, <>
|
||||
jyes labeled_argument
|
||||
check j < 0
|
||||
jyes mixed_arguments
|
||||
compute j, j + 1
|
||||
arrange val, field
|
||||
match <val>, val
|
||||
arrange field, a#j
|
||||
transform field
|
||||
jno excess_arguments
|
||||
match <tmp>, field
|
||||
jno got_argument_field
|
||||
take a, tmp
|
||||
compute tmp, 0
|
||||
take j, tmp
|
||||
take values, val
|
||||
jump process_argument
|
||||
|
||||
excess_arguments:
|
||||
err 'excess arguments'
|
||||
jump arguments_processed
|
||||
mixed_arguments:
|
||||
err 'unsupported mixing of labeled and ordered values'
|
||||
jump arguments_processed
|
||||
|
||||
labeled_argument:
|
||||
check j > 0
|
||||
jyes mixed_arguments
|
||||
compute j, -1
|
||||
match <val>, val
|
||||
got_argument_field:
|
||||
arrange tmp, sname.=__default__.#field
|
||||
transform tmp
|
||||
jyes argument_ok
|
||||
match field.sub, field
|
||||
jno unknown_field
|
||||
arrange tmp, sname.=__default__.#field
|
||||
transform tmp
|
||||
jno unknown_field
|
||||
arrange val, sub:val
|
||||
arrange tmp, =__multi__.#field
|
||||
transform tmp
|
||||
jno append_value
|
||||
arrange val, tmp, val
|
||||
arrange tmp, =__multi__.#field
|
||||
append_value:
|
||||
publish tmp, val
|
||||
jump argument_ok
|
||||
unknown_field:
|
||||
stringify field
|
||||
arrange tmp, sname
|
||||
stringify tmp
|
||||
err tmp bappend ' has no field named ' bappend field
|
||||
jump next_argument
|
||||
|
||||
argument_ok:
|
||||
arrange tmp, =__init__.#field
|
||||
publish tmp, val
|
||||
next_argument:
|
||||
match , values
|
||||
jno process_argument
|
||||
arguments_processed:
|
||||
take , values
|
||||
take , j
|
||||
take , a
|
||||
take values, values
|
||||
jyes next_argument
|
||||
|
||||
end calminstruction
|
||||
|
||||
define pname
|
||||
define i
|
||||
define j
|
||||
define u
|
||||
define a
|
||||
|
||||
calminstruction (&label) collect? &definition&
|
||||
local sym, default, tmp
|
||||
match , definition
|
||||
jyes plain
|
||||
match :tmp?, definition
|
||||
jyes ignored
|
||||
match ==tmp?, definition
|
||||
jyes ignored
|
||||
arrange default,
|
||||
match definition= default, definition
|
||||
arrange sym, pname.=__definition#i
|
||||
publish sym:, definition
|
||||
arrange sym, pname.=__label#i
|
||||
publish sym:, label
|
||||
arrange sym, pname.=__default__.#label
|
||||
publish sym:, default
|
||||
arrange definition, label definition default
|
||||
assemble definition
|
||||
arrange definition, =__size__.#label == =$ - label
|
||||
assemble definition
|
||||
match , a
|
||||
jyes done
|
||||
compute j, j + 1
|
||||
arrange sym, a#j
|
||||
publish sym:, label
|
||||
done:
|
||||
exit
|
||||
ignored:
|
||||
arrange label, label definition
|
||||
plain:
|
||||
assemble label
|
||||
end calminstruction
|
||||
|
||||
calminstruction collect? &statement&
|
||||
local proto, sym, tmp
|
||||
check i
|
||||
jyes in_body
|
||||
|
||||
compute u, 0
|
||||
compute i, 1
|
||||
compute j, 1
|
||||
asm virtual at 0
|
||||
match pname= proto, pname
|
||||
arrange tmp, =namespace pname
|
||||
assemble tmp
|
||||
jno prototype_copied
|
||||
use_prototype:
|
||||
arrange a,
|
||||
arrange tmp, proto.=__statement#i
|
||||
transform tmp
|
||||
jno prototype_arguments
|
||||
arrange sym, pname.=__statement#i
|
||||
publish sym:, tmp
|
||||
assemble tmp
|
||||
compute i, i + 1
|
||||
jump use_prototype
|
||||
prototype_arguments:
|
||||
arrange tmp, proto.=__argument#j
|
||||
transform tmp
|
||||
jno prototype_copied
|
||||
arrange sym, pname.=__argument#j
|
||||
publish sym:, tmp
|
||||
compute j, j + 1
|
||||
jump prototype_arguments
|
||||
prototype_copied:
|
||||
compute j, j - 1
|
||||
arrange a, pname.=__argument
|
||||
|
||||
in_body:
|
||||
match =ends?, statement
|
||||
jyes close
|
||||
check u
|
||||
jno process_definition
|
||||
check u > 1
|
||||
jno union_divider_ok
|
||||
arrange tmp, =__union_divider
|
||||
arrange sym, pname.=__statement#i
|
||||
publish sym:, tmp
|
||||
assemble tmp
|
||||
compute i, i + 1
|
||||
arrange a,
|
||||
union_divider_ok:
|
||||
compute u, u + 1
|
||||
process_definition:
|
||||
match =struct?, statement
|
||||
jyes open_struct
|
||||
match =union?, statement
|
||||
jyes open_union
|
||||
arrange sym, pname.=__statement#i
|
||||
publish sym:, statement
|
||||
assemble statement
|
||||
compute i, i + 1
|
||||
exit
|
||||
open_union:
|
||||
arrange tmp, =__union_start
|
||||
arrange sym, pname.=__statement#i
|
||||
publish sym:, tmp
|
||||
assemble tmp
|
||||
compute i, i + 1
|
||||
arrange tmp, a
|
||||
take a, tmp
|
||||
compute tmp, 1
|
||||
take u, tmp
|
||||
exit
|
||||
open_struct:
|
||||
match , a
|
||||
jyes unlisted_substruct
|
||||
compute j, j + 1
|
||||
arrange sym, a#j
|
||||
arrange tmp, a#j#=_
|
||||
take a, tmp
|
||||
arrange tmp, <a>
|
||||
publish sym:, tmp
|
||||
jump begin_substruct
|
||||
unlisted_substruct:
|
||||
arrange tmp,
|
||||
take a, tmp
|
||||
begin_substruct:
|
||||
compute tmp, 0
|
||||
take j, tmp
|
||||
compute tmp, 0
|
||||
take u, tmp
|
||||
exit
|
||||
close:
|
||||
check u
|
||||
jno close_struct
|
||||
arrange tmp, =__union_end
|
||||
arrange sym, pname.=__statement#i
|
||||
publish sym:, tmp
|
||||
assemble tmp
|
||||
compute i, i + 1
|
||||
take , a
|
||||
take , u
|
||||
exit
|
||||
close_struct:
|
||||
take , a
|
||||
take , j
|
||||
take , u
|
||||
take a, a
|
||||
jyes done
|
||||
asm end namespace
|
||||
arrange sym, pname.=__size__
|
||||
compute tmp, $
|
||||
publish sym:, tmp
|
||||
arrange tmp, #sym
|
||||
arrange sym, =sizeof.pname
|
||||
publish sym, tmp
|
||||
asm end virtual
|
||||
assemble statement
|
||||
done:
|
||||
end calminstruction
|
||||
|
||||
end namespace
|
||||
|
||||
macro struct? declaration*, attributes
|
||||
if defined Struct.CheckAlignment & Struct.CheckAlignment
|
||||
struct?.packed = 0
|
||||
else
|
||||
struct?.packed = 1
|
||||
end if
|
||||
match =packed?, attributes
|
||||
struct?.packed = 1
|
||||
else match any, attributes
|
||||
err 'unknown attribute ',`any
|
||||
end match
|
||||
|
||||
define struct?.pname declaration
|
||||
struct?.i = 0
|
||||
mvstruc ?, struct?.collect?
|
||||
mvmacro ?, struct?.collect?
|
||||
end macro
|
||||
|
||||
macro ends?
|
||||
mvmacro struct?.collect?, ?
|
||||
mvstruc struct?.collect?, ?
|
||||
|
||||
match name, struct?.pname
|
||||
|
||||
label name: name.__size__ at name.__size__
|
||||
|
||||
struct?.check name
|
||||
|
||||
local sname
|
||||
define sname name
|
||||
|
||||
calminstruction (instance) name values&
|
||||
call struct?.instantiate, instance, sname, values
|
||||
end calminstruction
|
||||
|
||||
calminstruction name &values&
|
||||
local ic, iname
|
||||
init ic
|
||||
compute ic, ic + 1
|
||||
arrange iname, sname#ic
|
||||
call struct?.instantiate, iname, sname, values
|
||||
end calminstruction
|
||||
|
||||
end match
|
||||
end macro
|
||||
|
||||
macro __union_start
|
||||
local union
|
||||
union:
|
||||
union.i = 0
|
||||
union.size = 0
|
||||
union.initialized = 0
|
||||
macro __union_open
|
||||
union.i = union.i + 1
|
||||
if (defined union.init & union.i <> union.init) | (~ defined union.init & union.i > 1)
|
||||
virtual at union
|
||||
end if
|
||||
end macro
|
||||
macro __union_close
|
||||
if $@ > union
|
||||
if union.i > 1
|
||||
union.init := union.i
|
||||
end if
|
||||
if union.initialized
|
||||
err 'conflicting initialization of union'
|
||||
else
|
||||
union.initialized = union.i
|
||||
end if
|
||||
end if
|
||||
if $ - union > union.size
|
||||
union.size = $ - union
|
||||
end if
|
||||
if (defined union.init & union.i <> union.init) | (~ defined union.init & union.i > 1)
|
||||
end virtual
|
||||
end if
|
||||
end macro
|
||||
macro __union_divider
|
||||
__union_close
|
||||
__union_open
|
||||
end macro
|
||||
macro __union_end
|
||||
__union_close
|
||||
if $ - union < union.size
|
||||
rb union.size - ($ - union)
|
||||
end if
|
||||
purge __union_open,__union_close,__union_divider,__union_end
|
||||
end macro
|
||||
__union_open
|
||||
end macro
|
||||
|
||||
calminstruction breakifndef? sym
|
||||
transform sym
|
||||
jyes ok
|
||||
asm break
|
||||
ok:
|
||||
end calminstruction
|
||||
|
||||
macro struct?.check name
|
||||
if ~ struct?.packed
|
||||
local alignment, maxalignment
|
||||
maxalignment = 1
|
||||
while 1
|
||||
breakifndef name.__statement#%
|
||||
match label, name.__label#%
|
||||
if defined name.label
|
||||
local alignment
|
||||
alignment = 1
|
||||
if sizeof name.label > 0
|
||||
alignment = 1 shl (bsf sizeof name.label)
|
||||
end if
|
||||
match type, name.__definition#%
|
||||
if defined type.__alignment
|
||||
alignment = type.__alignment
|
||||
end if
|
||||
end match
|
||||
if name.label mod alignment > 0
|
||||
repeat 1, natural: alignment
|
||||
display 'warning: ',`name,'.',`label,' not aligned to its natural boundary (',`natural,')',13,10
|
||||
end repeat
|
||||
else if alignment > maxalignment
|
||||
maxalignment = alignment
|
||||
end if
|
||||
end if
|
||||
end match
|
||||
end while
|
||||
if sizeof name mod maxalignment > 0
|
||||
repeat 1, size: sizeof name, natural: maxalignment
|
||||
display 'warning: size of ',`name,' (',`size,') not aligned to its natural boundary (',`natural,')',13,10
|
||||
end repeat
|
||||
end if
|
||||
name.__alignment := maxalignment
|
||||
end if
|
||||
end macro
|
340
toolchain/fasm2/include/pcount/advapi32.inc
Normal file
340
toolchain/fasm2/include/pcount/advapi32.inc
Normal file
@ -0,0 +1,340 @@
|
||||
|
||||
; ADVAPI32 API calls parameters' count
|
||||
|
||||
AbortSystemShutdown% = 1
|
||||
AccessCheck% = 8
|
||||
AccessCheckAndAuditAlarm% = 11
|
||||
AccessCheckByType% = 11
|
||||
AccessCheckByTypeAndAuditAlarm% = 16
|
||||
AccessCheckByTypeResultList% = 11
|
||||
AccessCheckByTypeResultListAndAuditAlarm% = 16
|
||||
AddAccessAllowedAce% = 4
|
||||
AddAccessAllowedAceEx% = 5
|
||||
AddAccessAllowedObjectAce% = 7
|
||||
AddAccessDeniedAce% = 4
|
||||
AddAccessDeniedAceEx% = 5
|
||||
AddAccessDeniedObjectAce% = 7
|
||||
AddAce% = 5
|
||||
AddAuditAccessAce% = 6
|
||||
AddAuditAccessAceEx% = 7
|
||||
AddAuditAccessObjectAce% = 9
|
||||
AdjustTokenGroups% = 6
|
||||
AdjustTokenPrivileges% = 6
|
||||
AllocateAndInitializeSid% = 11
|
||||
AllocateLocallyUniqueId% = 1
|
||||
AreAllAccessesGranted% = 2
|
||||
AreAnyAccessesGranted% = 2
|
||||
BackupEventLog% = 2
|
||||
BuildExplicitAccessWithName% = 5
|
||||
BuildImpersonateExplicitAccessWithName% = 6
|
||||
BuildImpersonateTrustee% = 2
|
||||
BuildSecurityDescriptor% = 9
|
||||
BuildTrusteeWithName% = 2
|
||||
BuildTrusteeWithSid% = 2
|
||||
CancelOverlappedAccess% = 1
|
||||
ChangeServiceConfig2% = 3
|
||||
ChangeServiceConfig% = 11
|
||||
ClearEventLog% = 2
|
||||
CloseEventLog% = 1
|
||||
CloseRaw% = 1
|
||||
CloseServiceHandle% = 1
|
||||
ControlService% = 3
|
||||
ConvertAccessToSecurityDescriptor% = 5
|
||||
ConvertSecurityDescriptorToAccess% = 7
|
||||
ConvertSecurityDescriptorToAccessNamed% = 7
|
||||
ConvertToAutoInheritPrivateObjectSecurity% = 6
|
||||
CopySid% = 3
|
||||
CreatePrivateObjectSecurity% = 6
|
||||
CreatePrivateObjectSecurityEx% = 8
|
||||
CreateProcessAsUser% = 11
|
||||
CreateRestrictedToken% = 9
|
||||
CreateService% = 13
|
||||
CryptAcquireContext% = 5
|
||||
CryptContextAddRef% = 3
|
||||
CryptCreateHash% = 5
|
||||
CryptDecrypt% = 6
|
||||
CryptDeriveKey% = 5
|
||||
CryptDestroyHash% = 1
|
||||
CryptDestroyKey% = 1
|
||||
CryptDuplicateHash% = 4
|
||||
CryptDuplicateKey% = 4
|
||||
CryptEncrypt% = 7
|
||||
CryptEnumProviderTypes% = 6
|
||||
CryptEnumProviders% = 6
|
||||
CryptExportKey% = 6
|
||||
CryptGenKey% = 4
|
||||
CryptGenRandom% = 3
|
||||
CryptGetDefaultProvider% = 5
|
||||
CryptGetHashParam% = 5
|
||||
CryptGetKeyParam% = 5
|
||||
CryptGetProvParam% = 5
|
||||
CryptGetUserKey% = 3
|
||||
CryptHashData% = 4
|
||||
CryptHashSessionKey% = 3
|
||||
CryptImportKey% = 6
|
||||
CryptReleaseContext% = 2
|
||||
CryptSetHashParam% = 4
|
||||
CryptSetKeyParam% = 4
|
||||
CryptSetProvParam% = 4
|
||||
CryptSetProvider% = 2
|
||||
CryptSetProviderEx% = 4
|
||||
CryptSignHash% = 6
|
||||
CryptVerifySignature% = 6
|
||||
DecryptFile% = 2
|
||||
DeleteAce% = 2
|
||||
DeleteService% = 1
|
||||
DeregisterEventSource% = 1
|
||||
DestroyPrivateObjectSecurity% = 1
|
||||
DuplicateToken% = 3
|
||||
DuplicateTokenEx% = 6
|
||||
ElfBackupEventLogFile% = 2
|
||||
ElfChangeNotify% = 2
|
||||
ElfClearEventLogFile% = 2
|
||||
ElfCloseEventLog% = 1
|
||||
ElfDeregisterEventSource% = 1
|
||||
ElfNumberOfRecords% = 2
|
||||
ElfOldestRecord% = 2
|
||||
ElfOpenBackupEventLog% = 3
|
||||
ElfOpenEventLog% = 3
|
||||
ElfReadEventLog% = 7
|
||||
ElfRegisterEventSource% = 3
|
||||
ElfReportEvent% = 12
|
||||
EncryptFile% = 1
|
||||
EnumDependentServices% = 6
|
||||
EnumServicesStatus% = 8
|
||||
EqualPrefixSid% = 2
|
||||
EqualSid% = 2
|
||||
FindFirstFreeAce% = 2
|
||||
FreeSid% = 1
|
||||
GetAccessPermissionsForObject% = 9
|
||||
GetAce% = 3
|
||||
GetAclInformation% = 4
|
||||
GetAuditedPermissionsFromAcl% = 4
|
||||
GetCurrentHwProfile% = 1
|
||||
GetEffectiveRightsFromAcl% = 3
|
||||
GetExplicitEntriesFromAcl% = 3
|
||||
GetFileSecurity% = 5
|
||||
GetKernelObjectSecurity% = 5
|
||||
GetLengthSid% = 1
|
||||
GetMultipleTrustee% = 1
|
||||
GetMultipleTrusteeOperation% = 1
|
||||
GetNamedSecurityInfo% = 8
|
||||
GetNamedSecurityInfoEx% = 9
|
||||
GetNumberOfEventLogRecords% = 2
|
||||
GetOldestEventLogRecord% = 2
|
||||
GetOverlappedAccessResults% = 4
|
||||
GetPrivateObjectSecurity% = 5
|
||||
GetSecurityDescriptorControl% = 3
|
||||
GetSecurityDescriptorDacl% = 4
|
||||
GetSecurityDescriptorGroup% = 3
|
||||
GetSecurityDescriptorLength% = 1
|
||||
GetSecurityDescriptorOwner% = 3
|
||||
GetSecurityDescriptorSacl% = 4
|
||||
GetSecurityInfo% = 8
|
||||
GetSecurityInfoEx% = 9
|
||||
GetServiceDisplayName% = 4
|
||||
GetServiceKeyName% = 4
|
||||
GetSidLengthRequired% = 1
|
||||
GetSidSubAuthority% = 2
|
||||
GetSidSubAuthorityCount% = 1
|
||||
GetTokenInformation% = 5
|
||||
GetTrusteeName% = 1
|
||||
GetTrusteeType% = 1
|
||||
GetUserName% = 2
|
||||
I_ScSetServiceBits% = 5
|
||||
ImpersonateLoggedOnUser% = 1
|
||||
ImpersonateNamedPipeClient% = 1
|
||||
ImpersonateSelf% = 1
|
||||
InitializeAcl% = 3
|
||||
InitializeSecurityDescriptor% = 2
|
||||
InitializeSid% = 3
|
||||
InitiateSystemShutdown% = 5
|
||||
IsTextUnicode% = 3
|
||||
IsTokenRestricted% = 1
|
||||
IsValidAcl% = 1
|
||||
IsValidSecurityDescriptor% = 1
|
||||
IsValidSid% = 1
|
||||
LockServiceDatabase% = 1
|
||||
LogonUser% = 6
|
||||
LookupAccountName% = 7
|
||||
LookupAccountSid% = 7
|
||||
LookupPrivilegeDisplayName% = 5
|
||||
LookupPrivilegeName% = 4
|
||||
LookupPrivilegeValue% = 3
|
||||
LookupSecurityDescriptorParts% = 7
|
||||
LsaAddAccountRights% = 4
|
||||
LsaAddPrivilegesToAccount% = 2
|
||||
LsaClearAuditLog% = 1
|
||||
LsaClose% = 1
|
||||
LsaCreateAccount% = 4
|
||||
LsaCreateSecret% = 4
|
||||
LsaCreateTrustedDomain% = 4
|
||||
LsaCreateTrustedDomainEx% = 5
|
||||
LsaDelete% = 1
|
||||
LsaDeleteTrustedDomain% = 2
|
||||
LsaEnumerateAccountRights% = 4
|
||||
LsaEnumerateAccounts% = 5
|
||||
LsaEnumerateAccountsWithUserRight% = 4
|
||||
LsaEnumeratePrivileges% = 5
|
||||
LsaEnumeratePrivilegesOfAccount% = 2
|
||||
LsaEnumerateTrustedDomains% = 5
|
||||
LsaEnumerateTrustedDomainsEx% = 6
|
||||
LsaFreeMemory% = 1
|
||||
LsaGetQuotasForAccount% = 2
|
||||
LsaGetSystemAccessAccount% = 2
|
||||
LsaGetUserName% = 2
|
||||
LsaICLookupNames% = 7
|
||||
LsaICLookupSids% = 7
|
||||
LsaIGetTrustedDomainAuthInfoBlobs% = 4
|
||||
LsaISetTrustedDomainAuthInfoBlobs% = 4
|
||||
LsaLookupNames% = 5
|
||||
LsaLookupPrivilegeDisplayName% = 4
|
||||
LsaLookupPrivilegeName% = 3
|
||||
LsaLookupPrivilegeValue% = 3
|
||||
LsaLookupSids% = 5
|
||||
LsaNtStatusToWinError% = 1
|
||||
LsaOpenAccount% = 4
|
||||
LsaOpenPolicy% = 4
|
||||
LsaOpenSecret% = 4
|
||||
LsaOpenTrustedDomain% = 4
|
||||
LsaQueryDomainInformationPolicy% = 3
|
||||
LsaQueryInfoTrustedDomain% = 3
|
||||
LsaQueryInformationPolicy% = 3
|
||||
LsaQueryLocalInformationPolicy% = 3
|
||||
LsaQuerySecret% = 5
|
||||
LsaQuerySecurityObject% = 3
|
||||
LsaQueryTrustedDomainInfo% = 4
|
||||
LsaQueryTrustedDomainInfoByName% = 4
|
||||
LsaRemoveAccountRights% = 5
|
||||
LsaRemovePrivilegesFromAccount% = 3
|
||||
LsaRetrievePrivateData% = 3
|
||||
LsaSetDomainInformationPolicy% = 3
|
||||
LsaSetInformationPolicy% = 3
|
||||
LsaSetInformationTrustedDomain% = 3
|
||||
LsaSetLocalInformationPolicy% = 3
|
||||
LsaSetQuotasForAccount% = 2
|
||||
LsaSetSecret% = 3
|
||||
LsaSetSecurityObject% = 3
|
||||
LsaSetSystemAccessAccount% = 2
|
||||
LsaSetTrustedDomainInfoByName% = 4
|
||||
LsaSetTrustedDomainInformation% = 4
|
||||
LsaStorePrivateData% = 3
|
||||
MakeAbsoluteSD% = 11
|
||||
MakeSelfRelativeSD% = 3
|
||||
MapGenericMask% = 2
|
||||
NotifyBootConfigStatus% = 1
|
||||
NotifyChangeEventLog% = 2
|
||||
ObjectCloseAuditAlarm% = 3
|
||||
ObjectDeleteAuditAlarm% = 3
|
||||
ObjectOpenAuditAlarm% = 12
|
||||
ObjectPrivilegeAuditAlarm% = 6
|
||||
OpenBackupEventLog% = 2
|
||||
OpenEventLog% = 2
|
||||
OpenProcessToken% = 3
|
||||
OpenRaw% = 3
|
||||
OpenSCManager% = 3
|
||||
OpenService% = 3
|
||||
OpenThreadToken% = 4
|
||||
PrivilegeCheck% = 3
|
||||
PrivilegedServiceAuditAlarm% = 5
|
||||
QueryRecoveryAgents% = 3
|
||||
QueryServiceConfig2% = 5
|
||||
QueryServiceConfig% = 4
|
||||
QueryServiceLockStatus% = 4
|
||||
QueryServiceObjectSecurity% = 5
|
||||
QueryServiceStatus% = 2
|
||||
QueryWindows31FilesMigration% = 1
|
||||
ReadEventLog% = 7
|
||||
ReadRaw% = 3
|
||||
RegCloseKey% = 1
|
||||
RegConnectRegistry% = 3
|
||||
RegCreateKey% = 3
|
||||
RegCreateKeyEx% = 9
|
||||
RegDeleteKey% = 2
|
||||
RegDeleteValue% = 2
|
||||
RegEnumKey% = 4
|
||||
RegEnumKeyEx% = 8
|
||||
RegEnumValue% = 8
|
||||
RegFlushKey% = 1
|
||||
RegGetKeySecurity% = 4
|
||||
RegLoadKey% = 3
|
||||
RegNotifyChangeKeyValue% = 5
|
||||
RegOpenKey% = 3
|
||||
RegOpenKeyEx% = 5
|
||||
RegOverridePredefKey% = 2
|
||||
RegQueryInfoKey% = 12
|
||||
RegQueryMultipleValues% = 5
|
||||
RegQueryValue% = 4
|
||||
RegQueryValueEx% = 6
|
||||
RegReplaceKey% = 4
|
||||
RegRestoreKey% = 3
|
||||
RegSaveKey% = 3
|
||||
RegSetKeySecurity% = 3
|
||||
RegSetValue% = 5
|
||||
RegSetValueEx% = 6
|
||||
RegUnLoadKey% = 2
|
||||
RegisterEventSource% = 2
|
||||
RegisterServiceCtrlHandler% = 2
|
||||
ReportEvent% = 9
|
||||
RevertToSelf% = 0
|
||||
SetAclInformation% = 4
|
||||
SetEntriesInAccessList% = 6
|
||||
SetEntriesInAcl% = 4
|
||||
SetEntriesInAuditList% = 6
|
||||
SetFileSecurity% = 3
|
||||
SetKernelObjectSecurity% = 3
|
||||
SetNamedSecurityInfo% = 7
|
||||
SetNamedSecurityInfoEx% = 9
|
||||
SetPrivateObjectSecurity% = 5
|
||||
SetPrivateObjectSecurityEx% = 6
|
||||
SetSecurityDescriptorControl% = 3
|
||||
SetSecurityDescriptorDacl% = 4
|
||||
SetSecurityDescriptorGroup% = 3
|
||||
SetSecurityDescriptorOwner% = 3
|
||||
SetSecurityDescriptorSacl% = 4
|
||||
SetSecurityInfo% = 7
|
||||
SetSecurityInfoEx% = 9
|
||||
SetServiceBits% = 4
|
||||
SetServiceObjectSecurity% = 3
|
||||
SetServiceStatus% = 2
|
||||
SetThreadToken% = 2
|
||||
SetTokenInformation% = 4
|
||||
StartService% = 3
|
||||
StartServiceCtrlDispatcher% = 1
|
||||
SynchronizeWindows31FilesAndWindowsNTRegistry% = 4
|
||||
SystemFunction001% = 3
|
||||
SystemFunction002% = 3
|
||||
SystemFunction003% = 2
|
||||
SystemFunction004% = 3
|
||||
SystemFunction005% = 3
|
||||
SystemFunction006% = 2
|
||||
SystemFunction007% = 2
|
||||
SystemFunction008% = 3
|
||||
SystemFunction009% = 3
|
||||
SystemFunction010% = 3
|
||||
SystemFunction011% = 3
|
||||
SystemFunction012% = 3
|
||||
SystemFunction013% = 3
|
||||
SystemFunction014% = 3
|
||||
SystemFunction015% = 3
|
||||
SystemFunction016% = 3
|
||||
SystemFunction017% = 3
|
||||
SystemFunction018% = 3
|
||||
SystemFunction019% = 3
|
||||
SystemFunction020% = 3
|
||||
SystemFunction021% = 3
|
||||
SystemFunction022% = 3
|
||||
SystemFunction023% = 3
|
||||
SystemFunction024% = 3
|
||||
SystemFunction025% = 3
|
||||
SystemFunction026% = 3
|
||||
SystemFunction027% = 3
|
||||
SystemFunction028% = 2
|
||||
SystemFunction029% = 2
|
||||
SystemFunction030% = 2
|
||||
SystemFunction031% = 2
|
||||
SystemFunction032% = 2
|
||||
SystemFunction033% = 2
|
||||
TrusteeAccessToObject% = 6
|
||||
UnlockServiceDatabase% = 1
|
||||
WriteRaw% = 3
|
69
toolchain/fasm2/include/pcount/comctl32.inc
Normal file
69
toolchain/fasm2/include/pcount/comctl32.inc
Normal file
@ -0,0 +1,69 @@
|
||||
|
||||
; COMCTL32 API calls parameters' count
|
||||
|
||||
CreateMappedBitmap% = 5
|
||||
CreatePropertySheetPage% = 1
|
||||
CreateStatusWindow% = 4
|
||||
CreateToolbar% = 8
|
||||
CreateToolbarEx% = 13
|
||||
CreateUpDownControl% = 12
|
||||
DestroyPropertySheetPage% = 1
|
||||
DrawInsert% = 3
|
||||
DrawStatusText% = 4
|
||||
FlatSB_EnableScrollBar% = 3
|
||||
FlatSB_GetScrollInfo% = 3
|
||||
FlatSB_GetScrollPos% = 2
|
||||
FlatSB_GetScrollProp% = 3
|
||||
FlatSB_GetScrollRange% = 4
|
||||
FlatSB_SetScrollInfo% = 4
|
||||
FlatSB_SetScrollPos% = 4
|
||||
FlatSB_SetScrollProp% = 4
|
||||
FlatSB_SetScrollRange% = 5
|
||||
FlatSB_ShowScrollBar% = 3
|
||||
GetEffectiveClientRect% = 3
|
||||
ImageList_Add% = 3
|
||||
ImageList_AddIcon% = 2
|
||||
ImageList_AddMasked% = 3
|
||||
ImageList_BeginDrag% = 4
|
||||
ImageList_Copy% = 5
|
||||
ImageList_Create% = 5
|
||||
ImageList_Destroy% = 1
|
||||
ImageList_DragEnter% = 3
|
||||
ImageList_DragLeave% = 1
|
||||
ImageList_DragMove% = 2
|
||||
ImageList_DragShowNolock% = 1
|
||||
ImageList_Draw% = 6
|
||||
ImageList_DrawEx% = 10
|
||||
ImageList_DrawIndirect% = 1
|
||||
ImageList_Duplicate% = 1
|
||||
ImageList_EndDrag% = 0
|
||||
ImageList_GetBkColor% = 1
|
||||
ImageList_GetDragImage% = 2
|
||||
ImageList_GetIcon% = 3
|
||||
ImageList_GetIconSize% = 3
|
||||
ImageList_GetImageCount% = 1
|
||||
ImageList_GetImageInfo% = 3
|
||||
ImageList_GetImageRect% = 3
|
||||
ImageList_LoadImage% = 7
|
||||
ImageList_Merge% = 6
|
||||
ImageList_Read% = 1
|
||||
ImageList_Remove% = 2
|
||||
ImageList_Replace% = 4
|
||||
ImageList_ReplaceIcon% = 3
|
||||
ImageList_SetBkColor% = 2
|
||||
ImageList_SetDragCursorImage% = 4
|
||||
ImageList_SetFilter% = 3
|
||||
ImageList_SetIconSize% = 3
|
||||
ImageList_SetImageCount% = 2
|
||||
ImageList_SetOverlayImage% = 3
|
||||
ImageList_Write% = 2
|
||||
InitCommonControls% = 0
|
||||
InitCommonControlsEx% = 1
|
||||
InitializeFlatSB% = 1
|
||||
LBItemFromPt% = 4
|
||||
MakeDragList% = 1
|
||||
MenuHelp% = 7
|
||||
PropertySheet% = 1
|
||||
ShowHideMenuCtl% = 3
|
||||
UninitializeFlatSB% = 1
|
||||
_TrackMouseEvent% = 1
|
18
toolchain/fasm2/include/pcount/comdlg32.inc
Normal file
18
toolchain/fasm2/include/pcount/comdlg32.inc
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
; COMDLG32 API calls parameters' count
|
||||
|
||||
ChooseColor% = 1
|
||||
ChooseFont% = 1
|
||||
CommDlgExtendedError% = 0
|
||||
FindText% = 1
|
||||
FormatCharDlgProc% = 4
|
||||
GetFileTitle% = 3
|
||||
GetOpenFileName% = 1
|
||||
GetSaveFileName% = 1
|
||||
LoadAlterBitmap% = 3
|
||||
PageSetupDlg% = 1
|
||||
PrintDlg% = 1
|
||||
ReplaceText% = 1
|
||||
WantArrows% = 4
|
||||
dwLBSubclass% = 4
|
||||
dwOKSubclass% = 4
|
319
toolchain/fasm2/include/pcount/gdi32.inc
Normal file
319
toolchain/fasm2/include/pcount/gdi32.inc
Normal file
@ -0,0 +1,319 @@
|
||||
|
||||
; GDI32 API calls parameters' count
|
||||
|
||||
AbortDoc% = 1
|
||||
AbortPath% = 1
|
||||
AddFontMemResourceEx% = 4
|
||||
AddFontResource% = 1
|
||||
AddFontResourceEx% = 3
|
||||
AngleArc% = 6
|
||||
AnimatePalette% = 4
|
||||
Arc% = 9
|
||||
ArcTo% = 9
|
||||
BeginPath% = 1
|
||||
BitBlt% = 9
|
||||
CancelDC% = 1
|
||||
CheckColorsInGamut% = 4
|
||||
ChoosePixelFormat% = 2
|
||||
Chord% = 9
|
||||
CloseEnhMetaFile% = 1
|
||||
CloseFigure% = 1
|
||||
CloseMetaFile% = 1
|
||||
ColorCorrectPalette% = 4
|
||||
ColorMatchToTarget% = 3
|
||||
CombineRgn% = 4
|
||||
CombineTransform% = 3
|
||||
CopyEnhMetaFile% = 2
|
||||
CopyMetaFile% = 2
|
||||
CreateBitmap% = 5
|
||||
CreateBitmapIndirect% = 1
|
||||
CreateBrushIndirect% = 1
|
||||
CreateColorSpace% = 1
|
||||
CreateCompatibleBitmap% = 3
|
||||
CreateCompatibleDC% = 1
|
||||
CreateDC% = 4
|
||||
CreateDIBPatternBrush% = 2
|
||||
CreateDIBPatternBrushPt% = 2
|
||||
CreateDIBSection% = 6
|
||||
CreateDIBitmap% = 6
|
||||
CreateDiscardableBitmap% = 3
|
||||
CreateEllipticRgn% = 4
|
||||
CreateEllipticRgnIndirect% = 1
|
||||
CreateEnhMetaFile% = 4
|
||||
CreateFont% = 14
|
||||
CreateFontIndirect% = 1
|
||||
CreateFontIndirectEx% = 1
|
||||
CreateHalftonePalette% = 1
|
||||
CreateHatchBrush% = 2
|
||||
CreateIC% = 4
|
||||
CreateMetaFile% = 1
|
||||
CreatePalette% = 1
|
||||
CreatePatternBrush% = 1
|
||||
CreatePen% = 3
|
||||
CreatePenIndirect% = 1
|
||||
CreatePolyPolygonRgn% = 4
|
||||
CreatePolygonRgn% = 3
|
||||
CreateRectRgn% = 4
|
||||
CreateRectRgnIndirect% = 1
|
||||
CreateRoundRectRgn% = 6
|
||||
CreateScalableFontResource% = 4
|
||||
CreateSolidBrush% = 1
|
||||
DPtoLP% = 3
|
||||
DeleteColorSpace% = 1
|
||||
DeleteDC% = 1
|
||||
DeleteEnhMetaFile% = 1
|
||||
DeleteMetaFile% = 1
|
||||
DeleteObject% = 1
|
||||
DescribePixelFormat% = 4
|
||||
DeviceCapabilitiesEx% = 6
|
||||
DrawEscape% = 4
|
||||
Ellipse% = 5
|
||||
EnableEUDC% = 1
|
||||
EndDoc% = 1
|
||||
EndPage% = 1
|
||||
EndPath% = 1
|
||||
EnumEnhMetaFile% = 5
|
||||
EnumFontFamilies% = 4
|
||||
EnumFontFamiliesEx% = 5
|
||||
EnumFonts% = 4
|
||||
EnumICMProfiles% = 3
|
||||
EnumMetaFile% = 4
|
||||
EnumObjects% = 4
|
||||
EqualRgn% = 2
|
||||
Escape% = 5
|
||||
ExcludeClipRect% = 5
|
||||
ExtCreatePen% = 5
|
||||
ExtCreateRegion% = 3
|
||||
ExtEscape% = 6
|
||||
ExtFloodFill% = 5
|
||||
ExtSelectClipRgn% = 3
|
||||
ExtTextOut% = 8
|
||||
FillPath% = 1
|
||||
FillRgn% = 3
|
||||
FixBrushOrgEx% = 4
|
||||
FlattenPath% = 1
|
||||
FloodFill% = 4
|
||||
FrameRgn% = 5
|
||||
GdiComment% = 3
|
||||
GdiDeleteSpoolFileHandle% = 1
|
||||
GdiEndDocEMF% = 1
|
||||
GdiEndPageEMF% = 2
|
||||
GdiFlush% = 0
|
||||
GdiGetBatchLimit% = 0
|
||||
GdiGetDC% = 1
|
||||
GdiGetDevmodeForPage% = 4
|
||||
GdiGetPageCount% = 1
|
||||
GdiGetPageHandle% = 3
|
||||
GdiGetSpoolFileHandle% = 3
|
||||
GdiPlayDCScript% = 6
|
||||
GdiPlayEMF% = 5
|
||||
GdiPlayJournal% = 5
|
||||
GdiPlayPageEMF% = 4
|
||||
GdiPlayPrivatePageEMF% = 3
|
||||
GdiPlayScript% = 7
|
||||
GdiResetDCEMF% = 2
|
||||
GdiSetBatchLimit% = 1
|
||||
GdiStartDocEMF% = 2
|
||||
GdiStartPageEMF% = 1
|
||||
GetArcDirection% = 1
|
||||
GetAspectRatioFilterEx% = 2
|
||||
GetBitmapBits% = 3
|
||||
GetBitmapDimensionEx% = 2
|
||||
GetBkColor% = 1
|
||||
GetBkMode% = 1
|
||||
GetBoundsRect% = 3
|
||||
GetBrushOrgEx% = 2
|
||||
GetCharABCWidths% = 4
|
||||
GetCharABCWidthsFloat% = 4
|
||||
GetCharABCWidthsI% = 5
|
||||
GetCharWidth32% = 4
|
||||
GetCharWidth% = 4
|
||||
GetCharWidthFloat% = 4
|
||||
GetCharWidthI% = 5
|
||||
GetCharacterPlacement% = 6
|
||||
GetClipBox% = 2
|
||||
GetClipRgn% = 2
|
||||
GetColorAdjustment% = 2
|
||||
GetColorSpace% = 1
|
||||
GetCurrentObject% = 2
|
||||
GetCurrentPositionEx% = 2
|
||||
GetDCBrushColor% = 1
|
||||
GetDCOrgEx% = 2
|
||||
GetDCPenColor% = 1
|
||||
GetDIBColorTable% = 4
|
||||
GetDIBits% = 7
|
||||
GetDeviceCaps% = 2
|
||||
GetDeviceGammaRamp% = 2
|
||||
GetEnhMetaFile% = 1
|
||||
GetEnhMetaFileBits% = 3
|
||||
GetEnhMetaFileDescription% = 3
|
||||
GetEnhMetaFileHeader% = 3
|
||||
GetEnhMetaFilePaletteEntries% = 3
|
||||
GetEnhMetaFilePixelFormat% = 3
|
||||
GetFontAssocStatus% = 1
|
||||
GetFontData% = 5
|
||||
GetFontLanguageInfo% = 1
|
||||
GetFontUnicodeRanges% = 2
|
||||
GetGlyphIndices% = 5
|
||||
GetGlyphOutline% = 7
|
||||
GetGraphicsMode% = 1
|
||||
GetICMProfile% = 3
|
||||
GetKerningPairs% = 3
|
||||
GetLogColorSpace% = 3
|
||||
GetMapMode% = 1
|
||||
GetMetaFile% = 1
|
||||
GetMetaFileBitsEx% = 3
|
||||
GetMetaRgn% = 2
|
||||
GetMiterLimit% = 2
|
||||
GetNearestColor% = 2
|
||||
GetNearestPaletteIndex% = 2
|
||||
GetObject% = 3
|
||||
GetObjectType% = 1
|
||||
GetOutlineTextMetrics% = 3
|
||||
GetPaletteEntries% = 4
|
||||
GetPath% = 4
|
||||
GetPixel% = 3
|
||||
GetPixelFormat% = 1
|
||||
GetPolyFillMode% = 1
|
||||
GetROP2% = 1
|
||||
GetRandomRgn% = 3
|
||||
GetRasterizerCaps% = 2
|
||||
GetRegionData% = 3
|
||||
GetRelAbs% = 2
|
||||
GetRgnBox% = 2
|
||||
GetStockObject% = 1
|
||||
GetStretchBltMode% = 1
|
||||
GetSystemPaletteEntries% = 4
|
||||
GetSystemPaletteUse% = 1
|
||||
GetTextAlign% = 1
|
||||
GetTextCharacterExtra% = 1
|
||||
GetTextCharset% = 1
|
||||
GetTextCharsetInfo% = 3
|
||||
GetTextColor% = 1
|
||||
GetTextExtentExPoint% = 7
|
||||
GetTextExtentExPointI% = 7
|
||||
GetTextExtentPoint32% = 4
|
||||
GetTextExtentPoint% = 4
|
||||
GetTextExtentPointI% = 4
|
||||
GetTextFace% = 3
|
||||
GetTextMetrics% = 2
|
||||
GetViewportExtEx% = 2
|
||||
GetViewportOrgEx% = 2
|
||||
GetWinMetaFileBits% = 5
|
||||
GetWindowExtEx% = 2
|
||||
GetWindowOrgEx% = 2
|
||||
GetWorldTransform% = 2
|
||||
IntersectClipRect% = 5
|
||||
InvertRgn% = 2
|
||||
LPtoDP% = 3
|
||||
LineDD% = 6
|
||||
LineTo% = 3
|
||||
MaskBlt% = 12
|
||||
ModifyWorldTransform% = 3
|
||||
MoveToEx% = 4
|
||||
OffsetClipRgn% = 3
|
||||
OffsetRgn% = 3
|
||||
OffsetViewportOrgEx% = 4
|
||||
OffsetWindowOrgEx% = 4
|
||||
PaintRgn% = 2
|
||||
PatBlt% = 6
|
||||
PathToRegion% = 1
|
||||
Pie% = 9
|
||||
PlayEnhMetaFile% = 3
|
||||
PlayEnhMetaFileRecord% = 4
|
||||
PlayMetaFile% = 2
|
||||
PlayMetaFileRecord% = 4
|
||||
PlgBlt% = 10
|
||||
PolyBezier% = 3
|
||||
PolyBezierTo% = 3
|
||||
PolyDraw% = 4
|
||||
PolyPatBlt% = 5
|
||||
PolyPolygon% = 4
|
||||
PolyPolyline% = 4
|
||||
PolyTextOut% = 3
|
||||
Polygon% = 3
|
||||
Polyline% = 3
|
||||
PolylineTo% = 3
|
||||
PtInRegion% = 3
|
||||
PtVisible% = 3
|
||||
RealizePalette% = 1
|
||||
RectInRegion% = 2
|
||||
RectVisible% = 2
|
||||
Rectangle% = 5
|
||||
RemoveFontMemResourceEx% = 1
|
||||
RemoveFontResource% = 1
|
||||
RemoveFontResourceEx% = 3
|
||||
ResetDC% = 2
|
||||
ResizePalette% = 2
|
||||
RestoreDC% = 2
|
||||
RoundRect% = 7
|
||||
SaveDC% = 1
|
||||
ScaleViewportExtEx% = 6
|
||||
ScaleWindowExtEx% = 6
|
||||
SelectBrushLocal% = 2
|
||||
SelectClipPath% = 2
|
||||
SelectClipRgn% = 2
|
||||
SelectFontLocal% = 2
|
||||
SelectObject% = 2
|
||||
SelectPalette% = 3
|
||||
SetAbortProc% = 2
|
||||
SetArcDirection% = 2
|
||||
SetBitmapBits% = 3
|
||||
SetBitmapDimensionEx% = 4
|
||||
SetBkColor% = 2
|
||||
SetBkMode% = 2
|
||||
SetBoundsRect% = 3
|
||||
SetBrushOrgEx% = 4
|
||||
SetColorAdjustment% = 2
|
||||
SetColorSpace% = 2
|
||||
SetDCBrushColor% = 2
|
||||
SetDCPenColor% = 2
|
||||
SetDIBColorTable% = 4
|
||||
SetDIBits% = 7
|
||||
SetDIBitsToDevice% = 12
|
||||
SetDeviceGammaRamp% = 2
|
||||
SetEnhMetaFileBits% = 2
|
||||
SetFontEnumeration% = 1
|
||||
SetGraphicsMode% = 2
|
||||
SetICMMode% = 2
|
||||
SetICMProfile% = 2
|
||||
SetMagicColors% = 3
|
||||
SetMapMode% = 2
|
||||
SetMapperFlags% = 2
|
||||
SetMetaFileBitsEx% = 2
|
||||
SetMetaRgn% = 1
|
||||
SetMiterLimit% = 3
|
||||
SetPaletteEntries% = 4
|
||||
SetPixel% = 4
|
||||
SetPixelFormat% = 3
|
||||
SetPixelV% = 4
|
||||
SetPolyFillMode% = 2
|
||||
SetROP2% = 2
|
||||
SetRectRgn% = 5
|
||||
SetRelAbs% = 2
|
||||
SetStretchBltMode% = 2
|
||||
SetSystemPaletteUse% = 2
|
||||
SetTextAlign% = 2
|
||||
SetTextCharacterExtra% = 2
|
||||
SetTextColor% = 2
|
||||
SetTextJustification% = 3
|
||||
SetViewportExtEx% = 4
|
||||
SetViewportOrgEx% = 4
|
||||
SetWinMetaFileBits% = 4
|
||||
SetWindowExtEx% = 4
|
||||
SetWindowOrgEx% = 4
|
||||
SetWorldTransform% = 2
|
||||
StartDoc% = 2
|
||||
StartPage% = 1
|
||||
StretchBlt% = 11
|
||||
StretchDIBits% = 13
|
||||
StrokeAndFillPath% = 1
|
||||
StrokePath% = 1
|
||||
SwapBuffers% = 1
|
||||
TextOut% = 5
|
||||
TranslateCharsetInfo% = 3
|
||||
UnrealizeObject% = 1
|
||||
UpdateColors% = 1
|
||||
UpdateICMRegKey% = 4
|
||||
WidenPath% = 1
|
||||
gdiPlaySpoolStream% = 6
|
557
toolchain/fasm2/include/pcount/kernel32.inc
Normal file
557
toolchain/fasm2/include/pcount/kernel32.inc
Normal file
@ -0,0 +1,557 @@
|
||||
|
||||
; KERNEL32 API calls parameters' count
|
||||
|
||||
AddAtom% = 1
|
||||
AddConsoleAlias% = 3
|
||||
AllocConsole% = 0
|
||||
AreFileApisANSI% = 0
|
||||
AssignProcessToJobObject% = 2
|
||||
BackupRead% = 7
|
||||
BackupSeek% = 6
|
||||
BackupWrite% = 7
|
||||
BaseAttachCompleteThunk% = 0
|
||||
Beep% = 2
|
||||
BeginUpdateResource% = 2
|
||||
BuildCommDCB% = 2
|
||||
BuildCommDCBAndTimeouts% = 3
|
||||
CallNamedPipe% = 7
|
||||
CancelIo% = 1
|
||||
CancelWaitableTimer% = 1
|
||||
ClearCommBreak% = 1
|
||||
ClearCommError% = 3
|
||||
CloseConsoleHandle% = 1
|
||||
CloseHandle% = 1
|
||||
CloseProfileUserMapping% = 0
|
||||
CmdBatNotification% = 1
|
||||
CommConfigDialog% = 3
|
||||
CompareFileTime% = 2
|
||||
CompareString% = 6
|
||||
ConnectNamedPipe% = 2
|
||||
ConsoleMenuControl% = 3
|
||||
ContinueDebugEvent% = 3
|
||||
ConvertDefaultLocale% = 1
|
||||
ConvertThreadToFiber% = 1
|
||||
CopyFile% = 3
|
||||
CopyFileEx% = 6
|
||||
CreateConsoleScreenBuffer% = 5
|
||||
CreateDirectory% = 2
|
||||
CreateDirectoryEx% = 3
|
||||
CreateEvent% = 4
|
||||
CreateFiber% = 3
|
||||
CreateFile% = 7
|
||||
CreateFileMapping% = 6
|
||||
CreateHardLink% = 3
|
||||
CreateIoCompletionPort% = 4
|
||||
CreateJobObject% = 2
|
||||
CreateMailslot% = 4
|
||||
CreateMutex% = 3
|
||||
CreateNamedPipe% = 8
|
||||
CreatePipe% = 4
|
||||
CreateProcess% = 10
|
||||
CreateRemoteThread% = 7
|
||||
CreateSemaphore% = 4
|
||||
CreateTapePartition% = 4
|
||||
CreateThread% = 6
|
||||
CreateToolhelp32Snapshot% = 2
|
||||
CreateVirtualBuffer% = 3
|
||||
CreateWaitableTimer% = 3
|
||||
DebugActiveProcess% = 1
|
||||
DebugBreak% = 0
|
||||
DefineDosDevice% = 3
|
||||
DeleteAtom% = 1
|
||||
DeleteCriticalSection% = 1
|
||||
DeleteFiber% = 1
|
||||
DeleteFile% = 1
|
||||
DeviceIoControl% = 8
|
||||
DisableThreadLibraryCalls% = 1
|
||||
DisconnectNamedPipe% = 1
|
||||
DosDateTimeToFileTime% = 3
|
||||
DuplicateConsoleHandle% = 4
|
||||
DuplicateHandle% = 7
|
||||
EndUpdateResource% = 2
|
||||
EnterCriticalSection% = 1
|
||||
EnumCalendarInfo% = 4
|
||||
EnumCalendarInfoEx% = 4
|
||||
EnumDateFormats% = 3
|
||||
EnumDateFormatsEx% = 3
|
||||
EnumResourceLanguages% = 5
|
||||
EnumResourceNames% = 4
|
||||
EnumResourceTypes% = 3
|
||||
EnumSystemCodePages% = 2
|
||||
EnumSystemLocales% = 2
|
||||
EnumTimeFormats% = 3
|
||||
EraseTape% = 3
|
||||
EscapeCommFunction% = 2
|
||||
ExitProcess% = 1
|
||||
ExitThread% = 1
|
||||
ExitVDM% = 2
|
||||
ExpandEnvironmentStrings% = 3
|
||||
ExpungeConsoleCommandHistory% = 1
|
||||
ExtendVirtualBuffer% = 2
|
||||
FatalAppExit% = 2
|
||||
FatalExit% = 1
|
||||
FileTimeToDosDateTime% = 3
|
||||
FileTimeToLocalFileTime% = 2
|
||||
FileTimeToSystemTime% = 2
|
||||
FillConsoleOutputAttribute% = 5
|
||||
FillConsoleOutputCharacter% = 5
|
||||
FindAtom% = 1
|
||||
FindClose% = 1
|
||||
FindCloseChangeNotification% = 1
|
||||
FindFirstChangeNotification% = 3
|
||||
FindFirstFile% = 2
|
||||
FindFirstFileEx% = 6
|
||||
FindNextChangeNotification% = 1
|
||||
FindNextFile% = 2
|
||||
FindResource% = 3
|
||||
FindResourceEx% = 4
|
||||
FlushConsoleInputBuffer% = 1
|
||||
FlushFileBuffers% = 1
|
||||
FlushInstructionCache% = 3
|
||||
FlushViewOfFile% = 2
|
||||
FoldString% = 5
|
||||
FormatMessage% = 7
|
||||
FreeConsole% = 0
|
||||
FreeEnvironmentStrings% = 1
|
||||
FreeLibrary% = 1
|
||||
FreeLibraryAndExitThread% = 2
|
||||
FreeResource% = 1
|
||||
FreeVirtualBuffer% = 1
|
||||
GenerateConsoleCtrlEvent% = 2
|
||||
GetACP% = 0
|
||||
GetAtomName% = 3
|
||||
GetBinaryType% = 2
|
||||
GetCPInfo% = 2
|
||||
GetCPInfoEx% = 3
|
||||
GetCommConfig% = 3
|
||||
GetCommMask% = 2
|
||||
GetCommModemStatus% = 2
|
||||
GetCommProperties% = 2
|
||||
GetCommState% = 2
|
||||
GetCommTimeouts% = 2
|
||||
GetCommandLine% = 0
|
||||
GetCompressedFileSize% = 2
|
||||
GetComputerName% = 2
|
||||
GetConsoleAlias% = 4
|
||||
GetConsoleAliasExes% = 2
|
||||
GetConsoleAliasExesLength% = 0
|
||||
GetConsoleAliases% = 3
|
||||
GetConsoleAliasesLength% = 1
|
||||
GetConsoleCP% = 0
|
||||
GetConsoleCommandHistory% = 3
|
||||
GetConsoleCommandHistoryLength% = 1
|
||||
GetConsoleCursorInfo% = 2
|
||||
GetConsoleDisplayMode% = 1
|
||||
GetConsoleFontInfo% = 4
|
||||
GetConsoleFontSize% = 2
|
||||
GetConsoleHardwareState% = 3
|
||||
GetConsoleInputExeName% = 2
|
||||
GetConsoleInputWaitHandle% = 0
|
||||
GetConsoleKeyboardLayoutName% = 1
|
||||
GetConsoleMode% = 2
|
||||
GetConsoleOutputCP% = 0
|
||||
GetConsoleScreenBufferInfo% = 2
|
||||
GetConsoleTitle% = 2
|
||||
GetConsoleWindow% = 0
|
||||
GetCurrencyFormat% = 6
|
||||
GetCurrentConsoleFont% = 3
|
||||
GetCurrentDirectory% = 2
|
||||
GetCurrentProcess% = 0
|
||||
GetCurrentProcessId% = 0
|
||||
GetCurrentThread% = 0
|
||||
GetCurrentThreadId% = 0
|
||||
GetDateFormat% = 6
|
||||
GetDefaultCommConfig% = 3
|
||||
GetDevicePowerState% = 1
|
||||
GetDiskFreeSpace% = 5
|
||||
GetDiskFreeSpaceEx% = 4
|
||||
GetDriveType% = 1
|
||||
GetEnvironmentStrings% = 0
|
||||
GetEnvironmentVariable% = 3
|
||||
GetExitCodeProcess% = 2
|
||||
GetExitCodeThread% = 2
|
||||
GetFileAttributes% = 1
|
||||
GetFileAttributesEx% = 3
|
||||
GetFileInformationByHandle% = 2
|
||||
GetFileSize% = 2
|
||||
GetFileTime% = 4
|
||||
GetFileType% = 1
|
||||
GetFullPathName% = 4
|
||||
GetHandleInformation% = 2
|
||||
GetLargestConsoleWindowSize% = 1
|
||||
GetLastError% = 0
|
||||
GetLocalTime% = 1
|
||||
GetLocaleInfo% = 4
|
||||
GetLogicalDriveStrings% = 2
|
||||
GetLogicalDrives% = 0
|
||||
GetLongPathName% = 3
|
||||
GetMailslotInfo% = 5
|
||||
GetModuleFileName% = 3
|
||||
GetModuleHandle% = 1
|
||||
GetNamedPipeHandleState% = 7
|
||||
GetNamedPipeInfo% = 5
|
||||
GetNextVDMCommand% = 1
|
||||
GetNumberFormat% = 6
|
||||
GetNumberOfConsoleFonts% = 0
|
||||
GetNumberOfConsoleInputEvents% = 2
|
||||
GetNumberOfConsoleMouseButtons% = 1
|
||||
GetOEMCP% = 0
|
||||
GetOverlappedResult% = 4
|
||||
GetPriorityClass% = 1
|
||||
GetPrivateProfileInt% = 4
|
||||
GetPrivateProfileSection% = 4
|
||||
GetPrivateProfileSectionNames% = 3
|
||||
GetPrivateProfileString% = 6
|
||||
GetPrivateProfileStruct% = 5
|
||||
GetProcAddress% = 2
|
||||
GetProcessAffinityMask% = 3
|
||||
GetProcessHeap% = 0
|
||||
GetProcessHeaps% = 2
|
||||
GetProcessPriorityBoost% = 2
|
||||
GetProcessShutdownParameters% = 2
|
||||
GetProcessTimes% = 5
|
||||
GetProcessVersion% = 1
|
||||
GetProcessWorkingSetSize% = 3
|
||||
GetProfileInt% = 3
|
||||
GetProfileSection% = 3
|
||||
GetProfileString% = 5
|
||||
GetQueuedCompletionStatus% = 5
|
||||
GetShortPathName% = 3
|
||||
GetStartupInfo% = 1
|
||||
GetStdHandle% = 1
|
||||
GetStringType% = 5
|
||||
GetStringTypeEx% = 5
|
||||
GetSystemDefaultLCID% = 0
|
||||
GetSystemDefaultLangID% = 0
|
||||
GetSystemDirectory% = 2
|
||||
GetSystemInfo% = 1
|
||||
GetSystemPowerStatus% = 1
|
||||
GetSystemTime% = 1
|
||||
GetSystemTimeAdjustment% = 3
|
||||
GetSystemTimeAsFileTime% = 1
|
||||
GetTapeParameters% = 4
|
||||
GetTapePosition% = 5
|
||||
GetTapeStatus% = 1
|
||||
GetTempFileName% = 4
|
||||
GetTempPath% = 2
|
||||
GetThreadContext% = 2
|
||||
GetThreadLocale% = 0
|
||||
GetThreadPriority% = 1
|
||||
GetThreadPriorityBoost% = 2
|
||||
GetThreadSelectorEntry% = 3
|
||||
GetThreadTimes% = 5
|
||||
GetTickCount% = 0
|
||||
GetTimeFormat% = 6
|
||||
GetTimeZoneInformation% = 1
|
||||
GetUserDefaultLCID% = 0
|
||||
GetUserDefaultLangID% = 0
|
||||
GetVDMCurrentDirectories% = 2
|
||||
GetVersion% = 0
|
||||
GetVersionEx% = 1
|
||||
GetVolumeInformation% = 8
|
||||
GetWindowsDirectory% = 2
|
||||
GlobalAddAtom% = 1
|
||||
GlobalAlloc% = 2
|
||||
GlobalCompact% = 1
|
||||
GlobalDeleteAtom% = 1
|
||||
GlobalFindAtom% = 1
|
||||
GlobalFix% = 1
|
||||
GlobalFlags% = 1
|
||||
GlobalFree% = 1
|
||||
GlobalGetAtomName% = 3
|
||||
GlobalHandle% = 1
|
||||
GlobalLock% = 1
|
||||
GlobalMemoryStatus% = 1
|
||||
GlobalMemoryStatusVlm% = 1
|
||||
GlobalReAlloc% = 3
|
||||
GlobalSize% = 1
|
||||
GlobalUnWire% = 1
|
||||
GlobalUnfix% = 1
|
||||
GlobalUnlock% = 1
|
||||
GlobalWire% = 1
|
||||
Heap32First% = 3
|
||||
Heap32ListFirst% = 2
|
||||
Heap32ListNext% = 2
|
||||
Heap32Next% = 1
|
||||
HeapAlloc% = 3
|
||||
HeapCompact% = 2
|
||||
HeapCreate% = 3
|
||||
HeapDestroy% = 1
|
||||
HeapExtend% = 4
|
||||
HeapFree% = 3
|
||||
HeapLock% = 1
|
||||
HeapReAlloc% = 4
|
||||
HeapSize% = 3
|
||||
HeapSummary% = 3
|
||||
HeapUnlock% = 1
|
||||
HeapUsage% = 5
|
||||
HeapValidate% = 3
|
||||
HeapWalk% = 2
|
||||
InitAtomTable% = 1
|
||||
InitializeCriticalSection% = 1
|
||||
InitializeCriticalSectionAndSpinCount% = 2
|
||||
InterlockedCompareExchange% = 3
|
||||
InterlockedDecrement% = 1
|
||||
InterlockedExchange% = 2
|
||||
InterlockedExchangeAdd% = 2
|
||||
InterlockedIncrement% = 1
|
||||
InvalidateConsoleDIBits% = 2
|
||||
IsBadCodePtr% = 1
|
||||
IsBadHugeReadPtr% = 2
|
||||
IsBadHugeWritePtr% = 2
|
||||
IsBadReadPtr% = 2
|
||||
IsBadStringPtr% = 2
|
||||
IsBadWritePtr% = 2
|
||||
IsDBCSLeadByte% = 1
|
||||
IsDBCSLeadByteEx% = 2
|
||||
IsDebuggerPresent% = 0
|
||||
IsProcessorFeaturePresent% = 1
|
||||
IsValidCodePage% = 1
|
||||
IsValidLocale% = 2
|
||||
LCMapString% = 6
|
||||
LeaveCriticalSection% = 1
|
||||
LoadLibrary% = 1
|
||||
LoadLibraryEx% = 3
|
||||
LoadModule% = 2
|
||||
LoadResource% = 2
|
||||
LocalAlloc% = 2
|
||||
LocalCompact% = 1
|
||||
LocalFileTimeToFileTime% = 2
|
||||
LocalFlags% = 1
|
||||
LocalFree% = 1
|
||||
LocalHandle% = 1
|
||||
LocalLock% = 1
|
||||
LocalReAlloc% = 3
|
||||
LocalShrink% = 2
|
||||
LocalSize% = 1
|
||||
LocalUnlock% = 1
|
||||
LockFile% = 5
|
||||
LockFileEx% = 6
|
||||
LockResource% = 1
|
||||
MapViewOfFile% = 5
|
||||
MapViewOfFileEx% = 6
|
||||
MapViewOfFileVlm% = 7
|
||||
Module32First% = 2
|
||||
Module32Next% = 2
|
||||
MoveFile% = 2
|
||||
MoveFileEx% = 3
|
||||
MoveFileWithProgress% = 5
|
||||
MulDiv% = 3
|
||||
MultiByteToWideChar% = 6
|
||||
OpenEvent% = 3
|
||||
OpenFile% = 3
|
||||
OpenFileMapping% = 3
|
||||
OpenJobObject% = 3
|
||||
OpenMutex% = 3
|
||||
OpenProcess% = 3
|
||||
OpenProfileUserMapping% = 0
|
||||
OpenSemaphore% = 3
|
||||
OpenWaitableTimer% = 3
|
||||
OutputDebugString% = 1
|
||||
PeekConsoleInput% = 4
|
||||
PeekNamedPipe% = 6
|
||||
PostQueuedCompletionStatus% = 4
|
||||
PrepareTape% = 3
|
||||
Process32First% = 2
|
||||
Process32Next% = 2
|
||||
PulseEvent% = 1
|
||||
PurgeComm% = 2
|
||||
QueryDosDevice% = 3
|
||||
QueryInformationJobObject% = 5
|
||||
QueryPerformanceCounter% = 1
|
||||
QueryPerformanceFrequency% = 1
|
||||
QueryWin31IniFilesMappedToRegistry% = 4
|
||||
QueueUserAPC% = 3
|
||||
RaiseException% = 4
|
||||
ReadConsole% = 5
|
||||
ReadConsoleInput% = 4
|
||||
ReadConsoleInputEx% = 5
|
||||
ReadConsoleOutput% = 5
|
||||
ReadConsoleOutputAttribute% = 5
|
||||
ReadConsoleOutputCharacter% = 5
|
||||
ReadFile% = 5
|
||||
ReadFileEx% = 5
|
||||
ReadFileScatter% = 5
|
||||
ReadFileVlm% = 5
|
||||
ReadProcessMemory% = 5
|
||||
ReadProcessMemoryVlm% = 5
|
||||
RegisterConsoleVDM% = 11
|
||||
RegisterWaitForInputIdle% = 1
|
||||
RegisterWowBaseHandlers% = 1
|
||||
RegisterWowExec% = 1
|
||||
ReleaseMutex% = 1
|
||||
ReleaseSemaphore% = 3
|
||||
RemoveDirectory% = 1
|
||||
RequestWakeupLatency% = 1
|
||||
ResetEvent% = 1
|
||||
ResumeThread% = 1
|
||||
RtlFillMemory% = 3
|
||||
RtlMoveMemory% = 3
|
||||
RtlUnwind% = 4
|
||||
RtlZeroMemory% = 2
|
||||
ScrollConsoleScreenBuffer% = 5
|
||||
SearchPath% = 6
|
||||
SetCommBreak% = 1
|
||||
SetCommConfig% = 3
|
||||
SetCommMask% = 2
|
||||
SetCommState% = 2
|
||||
SetCommTimeouts% = 2
|
||||
SetComputerName% = 1
|
||||
SetConsoleActiveScreenBuffer% = 1
|
||||
SetConsoleCP% = 1
|
||||
SetConsoleCommandHistoryMode% = 1
|
||||
SetConsoleCtrlHandler% = 2
|
||||
SetConsoleCursor% = 2
|
||||
SetConsoleCursorInfo% = 2
|
||||
SetConsoleCursorPosition% = 2
|
||||
SetConsoleDisplayMode% = 3
|
||||
SetConsoleFont% = 2
|
||||
SetConsoleHardwareState% = 3
|
||||
SetConsoleIcon% = 1
|
||||
SetConsoleInputExeName% = 1
|
||||
SetConsoleKeyShortcuts% = 4
|
||||
SetConsoleMaximumWindowSize% = 2
|
||||
SetConsoleMenuClose% = 1
|
||||
SetConsoleMode% = 2
|
||||
SetConsoleNumberOfCommands% = 2
|
||||
SetConsoleOutputCP% = 1
|
||||
SetConsolePalette% = 3
|
||||
SetConsoleScreenBufferSize% = 2
|
||||
SetConsoleTextAttribute% = 2
|
||||
SetConsoleTitle% = 1
|
||||
SetConsoleWindowInfo% = 3
|
||||
SetCriticalSectionSpinCount% = 2
|
||||
SetCurrentDirectory% = 1
|
||||
SetDefaultCommConfig% = 3
|
||||
SetEndOfFile% = 1
|
||||
SetEnvironmentVariable% = 2
|
||||
SetErrorMode% = 1
|
||||
SetEvent% = 1
|
||||
SetFileApisToANSI% = 0
|
||||
SetFileApisToOEM% = 0
|
||||
SetFileAttributes% = 2
|
||||
SetFilePointer% = 4
|
||||
SetFileTime% = 4
|
||||
SetHandleCount% = 1
|
||||
SetHandleInformation% = 3
|
||||
SetInformationJobObject% = 4
|
||||
SetLastConsoleEventActive% = 0
|
||||
SetLastError% = 1
|
||||
SetLocalTime% = 1
|
||||
SetLocaleInfo% = 3
|
||||
SetMailslotInfo% = 2
|
||||
SetNamedPipeHandleState% = 4
|
||||
SetPriorityClass% = 2
|
||||
SetProcessAffinityMask% = 2
|
||||
SetProcessPriorityBoost% = 2
|
||||
SetProcessShutdownParameters% = 2
|
||||
SetProcessWorkingSetSize% = 3
|
||||
SetStdHandle% = 2
|
||||
SetSystemPowerState% = 2
|
||||
SetSystemTime% = 1
|
||||
SetSystemTimeAdjustment% = 2
|
||||
SetTapeParameters% = 3
|
||||
SetTapePosition% = 6
|
||||
SetThreadAffinityMask% = 2
|
||||
SetThreadContext% = 2
|
||||
SetThreadExecutionState% = 1
|
||||
SetThreadIdealProcessor% = 2
|
||||
SetThreadLocale% = 1
|
||||
SetThreadPriority% = 2
|
||||
SetThreadPriorityBoost% = 2
|
||||
SetTimeZoneInformation% = 1
|
||||
SetUnhandledExceptionFilter% = 1
|
||||
SetVDMCurrentDirectories% = 2
|
||||
SetVolumeLabel% = 2
|
||||
SetWaitableTimer% = 6
|
||||
SetupComm% = 3
|
||||
ShowConsoleCursor% = 2
|
||||
SignalObjectAndWait% = 4
|
||||
SizeofResource% = 2
|
||||
Sleep% = 1
|
||||
SleepEx% = 2
|
||||
SuspendThread% = 1
|
||||
SwitchToFiber% = 1
|
||||
SwitchToThread% = 0
|
||||
SystemTimeToFileTime% = 2
|
||||
SystemTimeToTzSpecificLocalTime% = 3
|
||||
TerminateJobObject% = 2
|
||||
TerminateProcess% = 2
|
||||
TerminateThread% = 2
|
||||
Thread32First% = 2
|
||||
Thread32Next% = 2
|
||||
TlsAlloc% = 0
|
||||
TlsFree% = 1
|
||||
TlsGetValue% = 1
|
||||
TlsSetValue% = 2
|
||||
Toolhelp32ReadProcessMemory% = 5
|
||||
TransactNamedPipe% = 7
|
||||
TransmitCommChar% = 2
|
||||
TrimVirtualBuffer% = 1
|
||||
TryEnterCriticalSection% = 1
|
||||
UnhandledExceptionFilter% = 1
|
||||
UnlockFile% = 5
|
||||
UnlockFileEx% = 5
|
||||
UnmapViewOfFile% = 1
|
||||
UnmapViewOfFileVlm% = 1
|
||||
UpdateResource% = 6
|
||||
VDMConsoleOperation% = 2
|
||||
VDMOperationStarted% = 1
|
||||
VerLanguageName% = 3
|
||||
VerifyConsoleIoHandle% = 1
|
||||
VirtualAlloc% = 4
|
||||
VirtualAllocEx% = 5
|
||||
VirtualAllocVlm% = 6
|
||||
VirtualBufferExceptionHandler% = 3
|
||||
VirtualFree% = 3
|
||||
VirtualFreeEx% = 4
|
||||
VirtualFreeVlm% = 5
|
||||
VirtualLock% = 2
|
||||
VirtualProtect% = 4
|
||||
VirtualProtectEx% = 5
|
||||
VirtualProtectVlm% = 6
|
||||
VirtualQuery% = 3
|
||||
VirtualQueryEx% = 4
|
||||
VirtualQueryVlm% = 4
|
||||
VirtualUnlock% = 2
|
||||
WaitCommEvent% = 3
|
||||
WaitForDebugEvent% = 2
|
||||
WaitForMultipleObjects% = 4
|
||||
WaitForMultipleObjectsEx% = 5
|
||||
WaitForSingleObject% = 2
|
||||
WaitForSingleObjectEx% = 3
|
||||
WaitNamedPipe% = 2
|
||||
WideCharToMultiByte% = 8
|
||||
WinExec% = 2
|
||||
WriteConsole% = 5
|
||||
WriteConsoleInput% = 4
|
||||
WriteConsoleInputVDM% = 4
|
||||
WriteConsoleOutput% = 5
|
||||
WriteConsoleOutputAttribute% = 5
|
||||
WriteConsoleOutputCharacter% = 5
|
||||
WriteFile% = 5
|
||||
WriteFileEx% = 5
|
||||
WriteFileGather% = 5
|
||||
WriteFileVlm% = 5
|
||||
WritePrivateProfileSection% = 3
|
||||
WritePrivateProfileString% = 4
|
||||
WritePrivateProfileStruct% = 5
|
||||
WriteProcessMemory% = 5
|
||||
WriteProcessMemoryVlm% = 5
|
||||
WriteProfileSection% = 2
|
||||
WriteProfileString% = 3
|
||||
WriteTapemark% = 4
|
||||
_hread% = 3
|
||||
_hwrite% = 3
|
||||
_lclose% = 1
|
||||
_lcreat% = 2
|
||||
_llseek% = 3
|
||||
_lopen% = 2
|
||||
_lread% = 3
|
||||
_lwrite% = 3
|
||||
lstrcat% = 2
|
||||
lstrcmp% = 2
|
||||
lstrcmpi% = 2
|
||||
lstrcpy% = 2
|
||||
lstrcpyn% = 3
|
||||
lstrlen% = 1
|
73
toolchain/fasm2/include/pcount/shell32.inc
Normal file
73
toolchain/fasm2/include/pcount/shell32.inc
Normal file
@ -0,0 +1,73 @@
|
||||
|
||||
; SHELL32 API calls parameters' count
|
||||
|
||||
CheckEscapes% = 2
|
||||
DoEnvironmentSubst% = 2
|
||||
DragAcceptFiles% = 2
|
||||
DragFinish% = 1
|
||||
DragQueryFile% = 4
|
||||
DragQueryPoint% = 2
|
||||
DuplicateIcon% = 2
|
||||
ExtractAssociatedIcon% = 3
|
||||
ExtractAssociatedIconEx% = 4
|
||||
ExtractIcon% = 3
|
||||
ExtractIconEx% = 5
|
||||
ExtractIconResInfo% = 5
|
||||
FindExeDlgProc% = 4
|
||||
FindExecutable% = 3
|
||||
FreeIconList% = 2
|
||||
InternalExtractIconList% = 3
|
||||
RealShellExecute% = 10
|
||||
RealShellExecuteEx% = 11
|
||||
RegenerateUserEnvironment% = 2
|
||||
SHAddToRecentDocs% = 2
|
||||
SHAppBarMessage% = 2
|
||||
SHBrowseForFolder% = 1
|
||||
SHChangeNotify% = 4
|
||||
SHEmptyRecycleBin% = 3
|
||||
SHFileOperation% = 1
|
||||
SHFormatDrive% = 4
|
||||
SHFreeNameMappings% = 1
|
||||
SHGetDataFromIDList% = 5
|
||||
SHGetDesktopFolder% = 1
|
||||
SHGetDiskFreeSpace% = 4
|
||||
SHGetFileInfo% = 5
|
||||
SHGetInstanceExplorer% = 1
|
||||
SHGetMalloc% = 1
|
||||
SHGetNewLinkInfo% = 5
|
||||
SHGetPathFromIDList% = 2
|
||||
SHGetSettings% = 2
|
||||
SHGetSpecialFolderLocation% = 3
|
||||
SHGetSpecialFolderPath% = 4
|
||||
SHInvokePrinterCommand% = 5
|
||||
SHLoadInProc% = 1
|
||||
SHQueryRecycleBin% = 2
|
||||
SHUpdateRecycleBinIcon% = 0
|
||||
SheChangeDir% = 1
|
||||
SheChangeDirEx% = 1
|
||||
SheFullPath% = 3
|
||||
SheGetCurDrive% = 0
|
||||
SheGetDir% = 2
|
||||
SheRemoveQuotes% = 1
|
||||
SheSetCurDrive% = 1
|
||||
SheShortenPath% = 2
|
||||
ShellAbout% = 4
|
||||
ShellExecute% = 6
|
||||
ShellExecuteEx% = 1
|
||||
ShellHookProc% = 3
|
||||
Shell_NotifyIcon% = 2
|
||||
StrChr% = 2
|
||||
StrChrI% = 2
|
||||
StrCmpN% = 3
|
||||
StrCmpNI% = 3
|
||||
StrCpyN% = 3
|
||||
StrNCmp% = 3
|
||||
StrNCmpI% = 3
|
||||
StrNCpy% = 3
|
||||
StrRChr% = 3
|
||||
StrRChrI% = 3
|
||||
StrRStr% = 3
|
||||
StrRStrI% = 3
|
||||
StrStr% = 2
|
||||
StrStrI% = 2
|
||||
WOWShellExecute% = 7
|
477
toolchain/fasm2/include/pcount/user32.inc
Normal file
477
toolchain/fasm2/include/pcount/user32.inc
Normal file
@ -0,0 +1,477 @@
|
||||
|
||||
; USER32 API calls parameters' count
|
||||
|
||||
ActivateKeyboardLayout% = 2
|
||||
AdjustWindowRect% = 3
|
||||
AdjustWindowRectEx% = 4
|
||||
AnimateWindow% = 3
|
||||
AnyPopup% = 0
|
||||
AppendMenu% = 4
|
||||
ArrangeIconicWindows% = 1
|
||||
AttachThreadInput% = 3
|
||||
BeginDeferWindowPos% = 1
|
||||
BeginPaint% = 2
|
||||
BlockInput% = 1
|
||||
BringWindowToTop% = 1
|
||||
BroadcastSystemMessage% = 5
|
||||
CallMsgFilter% = 2
|
||||
CallNextHookEx% = 4
|
||||
CallWindowProc% = 5
|
||||
CascadeChildWindows% = 2
|
||||
CascadeWindows% = 5
|
||||
ChangeClipboardChain% = 2
|
||||
ChangeDisplaySettings% = 2
|
||||
ChangeDisplaySettingsEx% = 5
|
||||
ChangeMenu% = 5
|
||||
CharLower% = 1
|
||||
CharLowerBuff% = 2
|
||||
CharNext% = 1
|
||||
CharNextEx% = 3
|
||||
CharPrev% = 2
|
||||
CharPrevEx% = 4
|
||||
CharToOem% = 2
|
||||
CharToOemBuff% = 3
|
||||
CharUpper% = 1
|
||||
CharUpperBuff% = 2
|
||||
CheckDlgButton% = 3
|
||||
CheckMenuItem% = 3
|
||||
CheckMenuRadioItem% = 5
|
||||
CheckRadioButton% = 4
|
||||
ChildWindowFromPoint% = 3
|
||||
ChildWindowFromPointEx% = 4
|
||||
ClientToScreen% = 2
|
||||
ClipCursor% = 1
|
||||
CloseClipboard% = 0
|
||||
CloseDesktop% = 1
|
||||
CloseWindow% = 1
|
||||
CloseWindowStation% = 1
|
||||
CopyAcceleratorTable% = 3
|
||||
CopyIcon% = 1
|
||||
CopyImage% = 5
|
||||
CopyRect% = 2
|
||||
CountClipboardFormats% = 0
|
||||
CreateAcceleratorTable% = 2
|
||||
CreateCaret% = 4
|
||||
CreateCursor% = 7
|
||||
CreateDesktop% = 6
|
||||
CreateDialogIndirectParam% = 5
|
||||
CreateDialogParam% = 5
|
||||
CreateIcon% = 7
|
||||
CreateIconFromResource% = 4
|
||||
CreateIconFromResourceEx% = 7
|
||||
CreateIconIndirect% = 1
|
||||
CreateMDIWindow% = 10
|
||||
CreateMenu% = 0
|
||||
CreatePopupMenu% = 0
|
||||
CreateWindowEx% = 12
|
||||
CreateWindowStation% = 4
|
||||
DdeAbandonTransaction% = 3
|
||||
DdeAccessData% = 2
|
||||
DdeAddData% = 4
|
||||
DdeClientTransaction% = 8
|
||||
DdeCmpStringHandles% = 2
|
||||
DdeConnect% = 4
|
||||
DdeConnectList% = 5
|
||||
DdeCreateDataHandle% = 7
|
||||
DdeCreateStringHandle% = 3
|
||||
DdeDisconnect% = 1
|
||||
DdeDisconnectList% = 1
|
||||
DdeEnableCallback% = 3
|
||||
DdeFreeDataHandle% = 1
|
||||
DdeFreeStringHandle% = 2
|
||||
DdeGetData% = 4
|
||||
DdeGetLastError% = 1
|
||||
DdeGetQualityOfService% = 3
|
||||
DdeImpersonateClient% = 1
|
||||
DdeInitialize% = 4
|
||||
DdeKeepStringHandle% = 2
|
||||
DdeNameService% = 4
|
||||
DdePostAdvise% = 3
|
||||
DdeQueryConvInfo% = 3
|
||||
DdeQueryNextServer% = 2
|
||||
DdeQueryString% = 5
|
||||
DdeReconnect% = 1
|
||||
DdeSetQualityOfService% = 3
|
||||
DdeSetUserHandle% = 3
|
||||
DdeUnaccessData% = 1
|
||||
DdeUninitialize% = 1
|
||||
DefDlgProc% = 4
|
||||
DefFrameProc% = 5
|
||||
DefMDIChildProc% = 4
|
||||
DefWindowProc% = 4
|
||||
DeferWindowPos% = 8
|
||||
DeleteMenu% = 3
|
||||
DestroyAcceleratorTable% = 1
|
||||
DestroyCaret% = 0
|
||||
DestroyCursor% = 1
|
||||
DestroyIcon% = 1
|
||||
DestroyMenu% = 1
|
||||
DestroyWindow% = 1
|
||||
DialogBoxIndirectParam% = 5
|
||||
DialogBoxParam% = 5
|
||||
DispatchMessage% = 1
|
||||
DlgDirList% = 5
|
||||
DlgDirListComboBox% = 5
|
||||
DlgDirSelectComboBoxEx% = 4
|
||||
DlgDirSelectEx% = 4
|
||||
DragDetect% = 3
|
||||
DragObject% = 5
|
||||
DrawAnimatedRects% = 4
|
||||
DrawCaption% = 4
|
||||
DrawEdge% = 4
|
||||
DrawFocusRect% = 2
|
||||
DrawFrame% = 4
|
||||
DrawFrameControl% = 4
|
||||
DrawIcon% = 4
|
||||
DrawIconEx% = 9
|
||||
DrawMenuBar% = 1
|
||||
DrawState% = 10
|
||||
DrawText% = 5
|
||||
DrawTextEx% = 6
|
||||
EditWndProc% = 4
|
||||
EmptyClipboard% = 0
|
||||
EnableMenuItem% = 3
|
||||
EnableScrollBar% = 3
|
||||
EnableWindow% = 2
|
||||
EndDeferWindowPos% = 1
|
||||
EndDialog% = 2
|
||||
EndMenu% = 0
|
||||
EndPaint% = 2
|
||||
EnumChildWindows% = 3
|
||||
EnumClipboardFormats% = 1
|
||||
EnumDesktopWindows% = 3
|
||||
EnumDesktops% = 3
|
||||
EnumDisplayMonitors% = 4
|
||||
EnumDisplaySettings% = 3
|
||||
EnumDisplaySettingsEx% = 4
|
||||
EnumProps% = 2
|
||||
EnumPropsEx% = 3
|
||||
EnumThreadWindows% = 3
|
||||
EnumWindowStations% = 2
|
||||
EnumWindows% = 2
|
||||
EqualRect% = 2
|
||||
ExcludeUpdateRgn% = 2
|
||||
ExitWindowsEx% = 2
|
||||
FillRect% = 3
|
||||
FindWindow% = 2
|
||||
FindWindowEx% = 4
|
||||
FlashWindow% = 2
|
||||
FrameRect% = 3
|
||||
FreeDDElParam% = 2
|
||||
GetActiveWindow% = 0
|
||||
GetAltTabInfo% = 5
|
||||
GetAncestor% = 2
|
||||
GetAsyncKeyState% = 1
|
||||
GetCapture% = 0
|
||||
GetCaretBlinkTime% = 0
|
||||
GetCaretPos% = 1
|
||||
GetClassInfo% = 3
|
||||
GetClassInfoEx% = 3
|
||||
GetClassLong% = 2
|
||||
GetClassName% = 3
|
||||
GetClassWord% = 2
|
||||
GetClientRect% = 2
|
||||
GetClipCursor% = 1
|
||||
GetClipboardData% = 1
|
||||
GetClipboardFormatName% = 3
|
||||
GetClipboardSequenceNumber% = 0
|
||||
GetClipboardViewer% = 0
|
||||
GetComboBoxInfo% = 2
|
||||
GetCursor% = 0
|
||||
GetCursorInfo% = 1
|
||||
GetCursorPos% = 1
|
||||
GetDC% = 1
|
||||
GetDCEx% = 3
|
||||
GetDesktopWindow% = 0
|
||||
GetDialogBaseUnits% = 0
|
||||
GetDlgCtrlID% = 1
|
||||
GetDlgItem% = 2
|
||||
GetDlgItemInt% = 4
|
||||
GetDlgItemText% = 4
|
||||
GetDoubleClickTime% = 0
|
||||
GetFocus% = 0
|
||||
GetForegroundWindow% = 0
|
||||
GetGUIThreadInfo% = 2
|
||||
GetGuiResources% = 2
|
||||
GetIconInfo% = 2
|
||||
GetInputDesktop% = 0
|
||||
GetInputState% = 0
|
||||
GetKBCodePage% = 0
|
||||
GetKeyNameText% = 3
|
||||
GetKeyState% = 1
|
||||
GetKeyboardLayout% = 1
|
||||
GetKeyboardLayoutList% = 2
|
||||
GetKeyboardLayoutName% = 1
|
||||
GetKeyboardState% = 1
|
||||
GetKeyboardType% = 1
|
||||
GetLastActivePopup% = 1
|
||||
GetLastInputInfo% = 1
|
||||
GetListBoxInfo% = 1
|
||||
GetMenu% = 1
|
||||
GetMenuBarInfo% = 4
|
||||
GetMenuCheckMarkDimensions% = 0
|
||||
GetMenuContextHelpId% = 1
|
||||
GetMenuDefaultItem% = 3
|
||||
GetMenuInfo% = 2
|
||||
GetMenuItemCount% = 1
|
||||
GetMenuItemID% = 2
|
||||
GetMenuItemInfo% = 4
|
||||
GetMenuItemRect% = 4
|
||||
GetMenuState% = 3
|
||||
GetMenuString% = 5
|
||||
GetMessage% = 4
|
||||
GetMessageExtraInfo% = 0
|
||||
GetMessagePos% = 0
|
||||
GetMessageTime% = 0
|
||||
GetMonitorInfo% = 2
|
||||
GetMouseMovePoints% = 5
|
||||
GetNextDlgGroupItem% = 3
|
||||
GetNextDlgTabItem% = 3
|
||||
GetOpenClipboardWindow% = 0
|
||||
GetParent% = 1
|
||||
GetPriorityClipboardFormat% = 2
|
||||
GetProcessWindowStation% = 0
|
||||
GetProp% = 2
|
||||
GetQueueStatus% = 1
|
||||
GetScrollBarInfo% = 3
|
||||
GetScrollInfo% = 3
|
||||
GetScrollPos% = 2
|
||||
GetScrollRange% = 4
|
||||
GetShellWindow% = 0
|
||||
GetSubMenu% = 2
|
||||
GetSysColor% = 1
|
||||
GetSysColorBrush% = 1
|
||||
GetSystemMenu% = 2
|
||||
GetSystemMetrics% = 1
|
||||
GetTabbedTextExtent% = 5
|
||||
GetThreadDesktop% = 1
|
||||
GetTitleBarInfo% = 2
|
||||
GetTopWindow% = 1
|
||||
GetUpdateRect% = 3
|
||||
GetUpdateRgn% = 3
|
||||
GetUserObjectInformation% = 5
|
||||
GetUserObjectSecurity% = 5
|
||||
GetWindow% = 2
|
||||
GetWindowContextHelpId% = 1
|
||||
GetWindowDC% = 1
|
||||
GetWindowInfo% = 2
|
||||
GetWindowLong% = 2
|
||||
GetWindowModuleFileName% = 3
|
||||
GetWindowPlacement% = 2
|
||||
GetWindowRect% = 2
|
||||
GetWindowRgn% = 2
|
||||
GetWindowText% = 3
|
||||
GetWindowTextLength% = 1
|
||||
GetWindowThreadProcessId% = 2
|
||||
GetWindowWord% = 2
|
||||
GrayString% = 9
|
||||
HideCaret% = 1
|
||||
HiliteMenuItem% = 4
|
||||
IMPGetIME% = 2
|
||||
IMPQueryIME% = 1
|
||||
IMPSetIME% = 2
|
||||
ImpersonateDdeClientWindow% = 2
|
||||
InSendMessage% = 0
|
||||
InSendMessageEx% = 1
|
||||
InflateRect% = 3
|
||||
InsertMenu% = 5
|
||||
InsertMenuItem% = 4
|
||||
IntersectRect% = 3
|
||||
InvalidateRect% = 3
|
||||
InvalidateRgn% = 3
|
||||
InvertRect% = 2
|
||||
IsCharAlpha% = 1
|
||||
IsCharAlphaNumeric% = 1
|
||||
IsCharLower% = 1
|
||||
IsCharUpper% = 1
|
||||
IsChild% = 2
|
||||
IsClipboardFormatAvailable% = 1
|
||||
IsDialogMessage% = 2
|
||||
IsDlgButtonChecked% = 2
|
||||
IsIconic% = 1
|
||||
IsMenu% = 1
|
||||
IsRectEmpty% = 1
|
||||
IsWindow% = 1
|
||||
IsWindowEnabled% = 1
|
||||
IsWindowUnicode% = 1
|
||||
IsWindowVisible% = 1
|
||||
IsZoomed% = 1
|
||||
KillSystemTimer% = 2
|
||||
KillTimer% = 2
|
||||
LoadAccelerators% = 2
|
||||
LoadBitmap% = 2
|
||||
LoadCursor% = 2
|
||||
LoadCursorFromFile% = 1
|
||||
LoadIcon% = 2
|
||||
LoadImage% = 6
|
||||
LoadKeyboardLayout% = 2
|
||||
LoadMenu% = 2
|
||||
LoadMenuIndirect% = 1
|
||||
LoadString% = 4
|
||||
LockWindowUpdate% = 1
|
||||
LockWorkStation% = 0
|
||||
LookupIconIdFromDirectory% = 2
|
||||
LookupIconIdFromDirectoryEx% = 5
|
||||
MapDialogRect% = 2
|
||||
MapVirtualKey% = 2
|
||||
MapVirtualKeyEx% = 3
|
||||
MapWindowPoints% = 4
|
||||
MenuItemFromPoint% = 4
|
||||
MessageBeep% = 1
|
||||
MessageBox% = 4
|
||||
MessageBoxEx% = 5
|
||||
MessageBoxIndirect% = 1
|
||||
ModifyMenu% = 5
|
||||
MonitorFromPoint% = 3
|
||||
MonitorFromRect% = 2
|
||||
MonitorFromWindow% = 2
|
||||
MoveWindow% = 6
|
||||
MsgWaitForMultipleObjects% = 5
|
||||
MsgWaitForMultipleObjectsEx% = 5
|
||||
NotifyWinEvent% = 4
|
||||
OemKeyScan% = 1
|
||||
OemToChar% = 2
|
||||
OemToCharBuff% = 3
|
||||
OffsetRect% = 3
|
||||
OpenClipboard% = 1
|
||||
OpenDesktop% = 4
|
||||
OpenIcon% = 1
|
||||
OpenInputDesktop% = 3
|
||||
OpenWindowStation% = 3
|
||||
PackDDElParam% = 3
|
||||
PaintDesktop% = 1
|
||||
PeekMessage% = 5
|
||||
PostMessage% = 4
|
||||
PostQuitMessage% = 1
|
||||
PostThreadMessage% = 4
|
||||
PtInRect% = 3
|
||||
RealChildWindowFromPoint% = 3
|
||||
RealGetWindowClass% = 3
|
||||
RedrawWindow% = 4
|
||||
RegisterClass% = 1
|
||||
RegisterClassEx% = 1
|
||||
RegisterClipboardFormat% = 1
|
||||
RegisterDeviceNotification% = 3
|
||||
RegisterHotKey% = 4
|
||||
RegisterWindowMessage% = 1
|
||||
ReleaseCapture% = 0
|
||||
ReleaseDC% = 2
|
||||
RemoveMenu% = 3
|
||||
RemoveProp% = 2
|
||||
ReplyMessage% = 1
|
||||
ReuseDDElParam% = 5
|
||||
ScreenToClient% = 2
|
||||
ScrollChildren% = 3
|
||||
ScrollDC% = 7
|
||||
ScrollWindow% = 5
|
||||
ScrollWindowEx% = 8
|
||||
SendDlgItemMessage% = 5
|
||||
SendIMEMessageEx% = 2
|
||||
SendInput% = 3
|
||||
SendMessage% = 4
|
||||
SendMessageCallback% = 6
|
||||
SendMessageTimeout% = 7
|
||||
SendNotifyMessage% = 4
|
||||
SetActiveWindow% = 1
|
||||
SetCapture% = 1
|
||||
SetCaretBlinkTime% = 1
|
||||
SetCaretPos% = 2
|
||||
SetClassLong% = 3
|
||||
SetClassWord% = 3
|
||||
SetClipboardData% = 2
|
||||
SetClipboardViewer% = 1
|
||||
SetCursor% = 1
|
||||
SetCursorPos% = 2
|
||||
SetDebugErrorLevel% = 1
|
||||
SetDeskWallpaper% = 1
|
||||
SetDlgItemInt% = 4
|
||||
SetDlgItemText% = 3
|
||||
SetDoubleClickTime% = 1
|
||||
SetFocus% = 1
|
||||
SetForegroundWindow% = 1
|
||||
SetKeyboardState% = 1
|
||||
SetLastErrorEx% = 2
|
||||
SetMenu% = 2
|
||||
SetMenuContextHelpId% = 2
|
||||
SetMenuDefaultItem% = 3
|
||||
SetMenuInfo% = 2
|
||||
SetMenuItemBitmaps% = 5
|
||||
SetMenuItemInfo% = 4
|
||||
SetMessageExtraInfo% = 1
|
||||
SetMessageQueue% = 1
|
||||
SetParent% = 2
|
||||
SetProcessWindowStation% = 1
|
||||
SetProp% = 3
|
||||
SetRect% = 5
|
||||
SetRectEmpty% = 1
|
||||
SetScrollInfo% = 4
|
||||
SetScrollPos% = 4
|
||||
SetScrollRange% = 5
|
||||
SetShellWindow% = 1
|
||||
SetSysColors% = 3
|
||||
SetSystemCursor% = 2
|
||||
SetSystemMenu% = 2
|
||||
SetSystemTimer% = 4
|
||||
SetThreadDesktop% = 1
|
||||
SetTimer% = 4
|
||||
SetUserObjectInformation% = 4
|
||||
SetUserObjectSecurity% = 3
|
||||
SetWinEventHook% = 7
|
||||
SetWindowContextHelpId% = 2
|
||||
SetWindowLong% = 3
|
||||
SetWindowPlacement% = 2
|
||||
SetWindowPos% = 7
|
||||
SetWindowRgn% = 3
|
||||
SetWindowText% = 2
|
||||
SetWindowWord% = 3
|
||||
SetWindowsHook% = 2
|
||||
SetWindowsHookEx% = 4
|
||||
ShowCaret% = 1
|
||||
ShowCursor% = 1
|
||||
ShowOwnedPopups% = 2
|
||||
ShowScrollBar% = 3
|
||||
ShowWindow% = 2
|
||||
ShowWindowAsync% = 2
|
||||
SubtractRect% = 3
|
||||
SwapMouseButton% = 1
|
||||
SwitchDesktop% = 1
|
||||
SystemParametersInfo% = 4
|
||||
TabbedTextOut% = 8
|
||||
TileChildWindows% = 2
|
||||
TileWindows% = 5
|
||||
ToAscii% = 5
|
||||
ToAsciiEx% = 6
|
||||
ToUnicode% = 6
|
||||
ToUnicodeEx% = 7
|
||||
TrackMouseEvent% = 1
|
||||
TrackPopupMenu% = 7
|
||||
TrackPopupMenuEx% = 6
|
||||
TranslateAccelerator% = 3
|
||||
TranslateMDISysAccel% = 2
|
||||
TranslateMessage% = 1
|
||||
UnhookWinEvent% = 1
|
||||
UnhookWindowsHook% = 2
|
||||
UnhookWindowsHookEx% = 1
|
||||
UnionRect% = 3
|
||||
UnloadKeyboardLayout% = 1
|
||||
UnpackDDElParam% = 4
|
||||
UnregisterClass% = 2
|
||||
UnregisterDeviceNotification% = 1
|
||||
UnregisterHotKey% = 2
|
||||
UpdateWindow% = 1
|
||||
UserHandleGrantAccess% = 2
|
||||
ValidateRect% = 2
|
||||
ValidateRgn% = 2
|
||||
VkKeyScan% = 1
|
||||
VkKeyScanEx% = 2
|
||||
WINNLSEnableIME% = 2
|
||||
WINNLSGetEnableStatus% = 1
|
||||
WINNLSGetIMEHotkey% = 1
|
||||
WaitForInputIdle% = 2
|
||||
WaitMessage% = 0
|
||||
WinHelp% = 4
|
||||
WindowFromDC% = 1
|
||||
WindowFromPoint% = 2
|
||||
keybd_event% = 4
|
||||
mouse_event% = 5
|
||||
wvsprintf% = 3
|
70
toolchain/fasm2/include/pcount/wsock32.inc
Normal file
70
toolchain/fasm2/include/pcount/wsock32.inc
Normal file
@ -0,0 +1,70 @@
|
||||
|
||||
; WSOCK32 API calls parameters' count
|
||||
|
||||
AcceptEx% = 8
|
||||
EnumProtocols% = 3
|
||||
GetAcceptExSockaddrs% = 8
|
||||
GetAddressByName% = 10
|
||||
GetNameByType% = 3
|
||||
GetService% = 7
|
||||
GetTypeByName% = 2
|
||||
MigrateWinsockConfiguration% = 3
|
||||
NPLoadNameSpaces% = 3
|
||||
SetService% = 6
|
||||
TransmitFile% = 7
|
||||
WEP% = 0
|
||||
WSAAsyncGetHostByAddr% = 7
|
||||
WSAAsyncGetHostByName% = 5
|
||||
WSAAsyncGetProtoByName% = 5
|
||||
WSAAsyncGetProtoByNumber% = 5
|
||||
WSAAsyncGetServByName% = 6
|
||||
WSAAsyncGetServByPort% = 6
|
||||
WSACancelAsyncRequest% = 4
|
||||
WSACancelBlockingCall% = 0
|
||||
WSACleanup% = 0
|
||||
WSAGetLastError% = 0
|
||||
WSAIsBlocking% = 0
|
||||
WSARecvEx% = 4
|
||||
WSASetBlockingHook% = 1
|
||||
WSASetLastError% = 1
|
||||
WSAStartup% = 2
|
||||
WSAUnhookBlockingHook% = 0
|
||||
__WSAFDIsSet% = 2
|
||||
accept% = 3
|
||||
bind% = 3
|
||||
closesocket% = 1
|
||||
connect% = 3
|
||||
dn_expand% = 5
|
||||
gethostbyaddr% = 3
|
||||
gethostbyname% = 1
|
||||
gethostname% = 2
|
||||
getnetbyname% = 1
|
||||
getpeername% = 3
|
||||
getprotobyname% = 1
|
||||
getprotobynumber% = 1
|
||||
getservbyname% = 2
|
||||
getservbyport% = 2
|
||||
getsockname% = 3
|
||||
getsockopt% = 5
|
||||
htonl% = 1
|
||||
htons% = 1
|
||||
inet_addr% = 1
|
||||
inet_network% = 1
|
||||
inet_ntoa% = 1
|
||||
ioctlsocket% = 3
|
||||
listen% = 2
|
||||
ntohl% = 1
|
||||
ntohs% = 1
|
||||
rcmd% = 6
|
||||
recv% = 4
|
||||
recvfrom% = 6
|
||||
rexec% = 6
|
||||
rresvport% = 1
|
||||
s_perror% = 2
|
||||
select% = 5
|
||||
send% = 4
|
||||
sendto% = 6
|
||||
sethostname% = 2
|
||||
setsockopt% = 5
|
||||
shutdown% = 2
|
||||
socket% = 3
|
30
toolchain/fasm2/include/times.inc
Normal file
30
toolchain/fasm2/include/times.inc
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
% = 0
|
||||
|
||||
calminstruction times?: statement
|
||||
local number, instruction, limit
|
||||
match number= statement, statement, ()
|
||||
jno incomplete_statement
|
||||
take limit, number
|
||||
compute limit, limit
|
||||
take instruction, statement
|
||||
compute number, 1
|
||||
take %, number
|
||||
check limit < 0
|
||||
jyes negative_number
|
||||
loop:
|
||||
check % > limit
|
||||
jyes done
|
||||
assemble instruction
|
||||
compute %, % + 1
|
||||
jump loop
|
||||
incomplete_statement:
|
||||
err 'incomplete statement'
|
||||
exit
|
||||
negative_number:
|
||||
err 'the number of times must be positive'
|
||||
done:
|
||||
take , %
|
||||
take , limit
|
||||
take , instruction
|
||||
end calminstruction
|
33
toolchain/fasm2/include/win32a.inc
Normal file
33
toolchain/fasm2/include/win32a.inc
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
macro api names&
|
||||
iterate name, names
|
||||
if used name
|
||||
label name:dword at name#A
|
||||
end if
|
||||
end iterate
|
||||
end macro
|
||||
|
||||
struc? TCHAR args:?&
|
||||
. db args
|
||||
end struc
|
||||
|
||||
macro TCHAR args:?&
|
||||
db args
|
||||
end macro
|
||||
|
||||
sizeof.TCHAR = 1
|
||||
|
||||
include 'macro/struct.inc'
|
||||
include 'macro/proc32.inc'
|
||||
include 'macro/com32.inc'
|
||||
include 'macro/import32.inc'
|
||||
include 'macro/export.inc'
|
||||
include 'macro/resource.inc'
|
||||
|
||||
include 'equates/kernel32.inc'
|
||||
include 'equates/user32.inc'
|
||||
include 'equates/gdi32.inc'
|
||||
include 'equates/comctl32.inc'
|
||||
include 'equates/comdlg32.inc'
|
||||
include 'equates/shell32.inc'
|
||||
include 'equates/wsock32.inc'
|
62
toolchain/fasm2/include/win32ax.inc
Normal file
62
toolchain/fasm2/include/win32ax.inc
Normal file
@ -0,0 +1,62 @@
|
||||
|
||||
include 'win32a.inc'
|
||||
|
||||
include 'macro/inline.inc'
|
||||
include 'macro/if.inc'
|
||||
|
||||
define _winx
|
||||
define _winx.code? _code
|
||||
define _winx.data? _data
|
||||
define _winx.end? _end
|
||||
|
||||
calminstruction (name) ? &a&
|
||||
local cmd
|
||||
match .cmd, name
|
||||
jno pass
|
||||
transform cmd, _winx
|
||||
jno pass
|
||||
arrange cmd, cmd a
|
||||
assemble cmd
|
||||
exit
|
||||
pass:
|
||||
arrange cmd, name a
|
||||
assemble cmd
|
||||
end calminstruction
|
||||
|
||||
macro _data
|
||||
section '.data' data readable writeable
|
||||
end macro
|
||||
|
||||
macro _code
|
||||
section '.text' code readable executable
|
||||
end macro
|
||||
|
||||
macro _end label
|
||||
|
||||
entry label
|
||||
|
||||
section '.idata' import data readable writeable
|
||||
|
||||
library kernel32,'KERNEL32.DLL',\
|
||||
user32,'USER32.DLL',\
|
||||
gdi32,'GDI32.DLL',\
|
||||
advapi32,'ADVAPI32.DLL',\
|
||||
comctl32,'COMCTL32.DLL',\
|
||||
comdlg32,'COMDLG32.DLL',\
|
||||
shell32,'SHELL32.DLL',\
|
||||
wsock32,'WSOCK32.DLL'
|
||||
|
||||
include! 'api/kernel32.inc'
|
||||
include! 'api/user32.inc'
|
||||
include! 'api/gdi32.inc'
|
||||
include! 'api/advapi32.inc'
|
||||
include! 'api/comctl32.inc'
|
||||
include! 'api/comdlg32.inc'
|
||||
include! 'api/shell32.inc'
|
||||
include! 'api/wsock32.inc'
|
||||
|
||||
end macro
|
||||
|
||||
if x86.mode = 16
|
||||
format PE GUI 4.0
|
||||
end if
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user