forked from KolibriOS/kolibrios
fasm 1.68
git-svn-id: svn://kolibrios.org@1115 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b89b199a17
commit
acb3468f8b
@ -2,266 +2,25 @@
|
|||||||
Visit http://flatassembler.net/ for more information.
|
Visit http://flatassembler.net/ for more information.
|
||||||
|
|
||||||
|
|
||||||
version 1.67.35 (Mar 09, 2009)
|
version 1.68 (Jun 13, 2009)
|
||||||
|
|
||||||
[-] Some internal code size reductions.
|
[+] Added SSSE3 (Supplemental SSE3), SSE4.1, SSE4.2 and SSE4a instructions.
|
||||||
|
|
||||||
[-] Discontinued "-d" switch implementation.
|
[+] Added the AMD SVM and Intel SMX instructions.
|
||||||
|
|
||||||
|
[+] Added "rdmsrq", "wrmsrq", "sysexitq" and "sysretq" mnemonics for the
|
||||||
|
64-bit variants of respective instructions.
|
||||||
|
|
||||||
version 1.67.34 (Feb 22, 2009)
|
[+] Added "fstenvw", "fstenvd", "fsavew", "fsaved", "frstorw" and "frstord"
|
||||||
|
mnemonics to allow choosing between 16-bit and 32-bit variants of
|
||||||
|
structures used by the "fstenv", "fsave" and "frstor" instructions.
|
||||||
|
|
||||||
[-] Fixed small bug with DT directive far pointer syntax.
|
[+] Added "plt" operator for the ELF output format.
|
||||||
|
|
||||||
|
[+] Allowed "rva" operator to be used in MS COFF object format, and also
|
||||||
|
added "static" keyword for the "public" directive.
|
||||||
|
|
||||||
version 1.67.33 (Feb 20, 2009)
|
[+] Added Intel-style aliases for the additional long mode 8-bit registers.
|
||||||
|
|
||||||
[+] Added ERR directive that allows to signalize error from the source.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.32 (Feb 13, 2009)
|
|
||||||
|
|
||||||
[+] Allowed single quote character to be put inside the number value,
|
|
||||||
to help improve long numbers readability.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.31 (Feb 11, 2009)
|
|
||||||
|
|
||||||
[-] Fixed floating point converter to no longer generate NaN in some cases,
|
|
||||||
and corrected denormal numbers generation.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.30 (Feb 08, 2009)
|
|
||||||
|
|
||||||
[+] Added missing Intel SSE4 instructions.
|
|
||||||
|
|
||||||
[+] Added SSE4a (EXTRQ/INSERTQ/MOVNTSD/MOVNTSS) instructions.
|
|
||||||
|
|
||||||
[+] Added FSTENVW/FSTENVD/FSAVEW/FSAVED mnemonics.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.29 (Nov 15, 2008)
|
|
||||||
|
|
||||||
[+] Added optional symbolic information output, and a set of tools that extract
|
|
||||||
various kinds of information from it.
|
|
||||||
|
|
||||||
[+] Allowed RVA operator to be used in COFF object format.
|
|
||||||
|
|
||||||
[-] Corrected the FIX directive to allow names of preprocessor's directives to be
|
|
||||||
used as prioritized symbolic constant name.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.28 (Nov 06, 2008)
|
|
||||||
|
|
||||||
[+] Added EFI/EFIBOOT/EFIRUNTIME subsystem keywords for PE format (experimental
|
|
||||||
feature, still needs to be tested).
|
|
||||||
|
|
||||||
[-] Fixed a bug in preprocessor which caused some problems with DISPLAY directive
|
|
||||||
output in some cases.
|
|
||||||
|
|
||||||
[-] Fixed a bug that allowed to define a symbol named "eip" or "rip".
|
|
||||||
|
|
||||||
[-] Fixed a problem with assembling MOVQ RAX,XMM0 instruction.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.27 (Jul 12, 2008)
|
|
||||||
|
|
||||||
[-] Fixed a bug which caused instructions from JCXZ/LOOP family to be incorrectly
|
|
||||||
assembled when requiring 67h prefix and provided with "$" operand.
|
|
||||||
|
|
||||||
[-] Definition of macro with the same name as one of the preprocessor's directives
|
|
||||||
is no longer allowed.
|
|
||||||
|
|
||||||
[-] Fixed REPT directive to check out validity of its parameters even when the
|
|
||||||
count is zero.
|
|
||||||
|
|
||||||
[-] Fixed VMREAD/VMWRITE syntax in the USE64 mode.
|
|
||||||
|
|
||||||
[-] Corrected MZ header generation and handling for the case when the last page of
|
|
||||||
executable contains the round 512 bytes.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.26 (Jan 27, 2008)
|
|
||||||
|
|
||||||
[+] Added partial SSE4 support (a couple of instructions left to be implemented
|
|
||||||
in the next releases)
|
|
||||||
|
|
||||||
[+] Added GETSEC instruction for the SMX functions calling.
|
|
||||||
|
|
||||||
[-] Some fixes and rearrangements in the DOS version.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.25 (Dec 30, 2007)
|
|
||||||
|
|
||||||
[-] Fixed a couple of bugs related to undefined symbol error signaling.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.24 (Dec 03, 2007)
|
|
||||||
|
|
||||||
[+] Added "-d" option to allow predefining symbolic constants from command line.
|
|
||||||
|
|
||||||
[-] Changed some of the error messages to be more informative.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.23 (Sep 08, 2007)
|
|
||||||
|
|
||||||
[+] Added "static" keyword for the "public" directive in COFF format.
|
|
||||||
|
|
||||||
[-] Redirected error information into stderr.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.22 (Aug 05, 2007)
|
|
||||||
|
|
||||||
[+] Allowed to check "@b" and "@f" symbols with "defined" operator.
|
|
||||||
|
|
||||||
[+] Allowed "as" operator to specify the output file extension when
|
|
||||||
placed at the end of the "format" directive line.
|
|
||||||
|
|
||||||
[-] Fixed a bug with stack size declaration in PE64 format that
|
|
||||||
caused assembler to crash.
|
|
||||||
|
|
||||||
[-] Corrected the VMREAD and VMWRITE instructions to allow registers
|
|
||||||
in place of memory operands.
|
|
||||||
|
|
||||||
[-] Corrected a mistake that made PLT operator not work correctly with
|
|
||||||
the CALL instruction.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.21 (Feb 17, 2007)
|
|
||||||
|
|
||||||
[+] Allowed 32-bit relocations in PE64 output format.
|
|
||||||
|
|
||||||
[-] Fixed a bug that caused "push cr0" error to go unnoticed by assembler.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.20 (Feb 12, 2007)
|
|
||||||
|
|
||||||
[-] Corrected the range checking of signed address displacements in 64-bit mode.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.19 (Feb 10, 2007)
|
|
||||||
|
|
||||||
[-] Disallowed labels starting with $ character.
|
|
||||||
|
|
||||||
[-] Fixed some problems with handling 32-bit relocations in 64-bit formats.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.18 (Dec 27, 2006)
|
|
||||||
|
|
||||||
[-] Fixed a small mistake in the recent corrections of logical expression parser.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.17 (Dec 20, 2006)
|
|
||||||
|
|
||||||
[-] Corrected the precedence of operators of macroinstruction line maker.
|
|
||||||
The symbol escaping now has always the higher priority than symbol conversion,
|
|
||||||
and both have higher precedence than concatenation.
|
|
||||||
|
|
||||||
[-] Fixed problems with logical expression parser to handle correctly comparing
|
|
||||||
values containing round brackets with the EQ or EQTYPE operator.
|
|
||||||
The only limitation now is that when you use round brackets to enclose some
|
|
||||||
logical expressions, they must be paired everywhere inside those expressions.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.16 (Dec 17, 2006)
|
|
||||||
|
|
||||||
[-] Fixed a really old bug in register expression calculator.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.15 (Nov 20, 2006)
|
|
||||||
|
|
||||||
[-] Some final (?) fixes and cleanup in the relative-offsets calculations.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.14 (Oct 28, 2006)
|
|
||||||
|
|
||||||
[-] Another small bug fixes.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.13 (Oct 26, 2006)
|
|
||||||
|
|
||||||
[-] Fixed a bug with handling of invalid expressions by "defined" operator.
|
|
||||||
|
|
||||||
[-] Fixed a newly-introduced bug with relocations in automatically generated RIP-relative
|
|
||||||
addressings.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.12 (Oct 1, 2006)
|
|
||||||
|
|
||||||
[+] Added EIP-relative addressing, and fixed some bugs with RIP-related one aswell.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.11 (Sep 26, 2006)
|
|
||||||
|
|
||||||
[+] Added PLT operator for the ELF output format.
|
|
||||||
|
|
||||||
[-] Rearranged and fixed some of the relocation handling routines.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.10 (Sep 23, 2006)
|
|
||||||
|
|
||||||
[+] Added SSSE3 (Supplemental SSE3) instructions.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.9 (Sep 21, 2006)
|
|
||||||
|
|
||||||
[+] Added some Win64 headers and examples in the Windows package.
|
|
||||||
|
|
||||||
[-] Fixed another operand size checking bug with MOVQ instruction.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.8 (Sep 17, 2006)
|
|
||||||
|
|
||||||
[-] Fixed a bug in address processing that caused disallowed combinations like
|
|
||||||
[qword eax] to be accepted.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.7 (Jul 31, 2006)
|
|
||||||
|
|
||||||
[-] Fixed a bug that caused over-repeated processing of macro operators when
|
|
||||||
many embedded macros were placed in one line
|
|
||||||
|
|
||||||
[+] Added SYSRETQ mnemonic.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.6 (Jul 21, 2006)
|
|
||||||
|
|
||||||
[+] Added (not yet documented) RDMSRQ/WRMSRQ/SYSEXITQ mnemonics for the 64-bit
|
|
||||||
variants of respective instructions.
|
|
||||||
|
|
||||||
[+] Added information about memory allocation to the command line interfaces.
|
|
||||||
This should make it easier to decide when to use the -m switch.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.5 (Jul 7, 2006)
|
|
||||||
|
|
||||||
[-] Fixed encoding of MOV (E)AX,[WORD ADDR] instruction in 32-bit mode.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.4 (Jul 5, 2006)
|
|
||||||
|
|
||||||
[+] Added R8L-R15L (Intel-style) aliases for R8B-R15B registers.
|
|
||||||
|
|
||||||
[-] Further optimizations in the parser.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.3 (Jul 2, 2006)
|
|
||||||
|
|
||||||
[-] Improved an instruction searching algorithm a bit.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.2 (Jul 1, 2006)
|
|
||||||
|
|
||||||
[-] Fixed a recently introduced bug with ELF relocations in case of 32-bit
|
|
||||||
object.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.1 (Jun 30, 2006)
|
|
||||||
|
|
||||||
[+] Added the support for the new AMD SVM technology instructions.
|
|
||||||
|
|
||||||
|
|
||||||
version 1.67.0 (Jun 28, 2006)
|
|
||||||
|
|
||||||
[-] The PE formatter now automatically detects whether relocatable labels
|
[-] The PE formatter now automatically detects whether relocatable labels
|
||||||
should be used, depending on whether the fixups directory is placed
|
should be used, depending on whether the fixups directory is placed
|
||||||
@ -270,23 +29,45 @@ version 1.67.0 (Jun 28, 2006)
|
|||||||
at some position.
|
at some position.
|
||||||
|
|
||||||
[-] Added support for outputting the 32-bit address relocations in case of
|
[-] Added support for outputting the 32-bit address relocations in case of
|
||||||
64-bit object formats. This makes some specific instructions compilable,
|
64-bit object formats and PE executable. This makes some specific
|
||||||
but it also forces linker to put such generated code into the low 2
|
instructions compilable, but it also forces linker to put such
|
||||||
gigabytes of addressing space.
|
generated code into the low 2 gigabytes of addressing space.
|
||||||
|
|
||||||
|
[+] Added "EFI", "EFIboot" and "EFIruntime" subsystem keywords for PE format.
|
||||||
|
|
||||||
|
[-] Corrected the precedence of operators of macroinstruction line maker.
|
||||||
|
The symbol escaping now has always the higher priority than symbol conversion,
|
||||||
|
and both have higher precedence than concatenation.
|
||||||
|
|
||||||
|
[+] Allowed to check "@b" and "@f" symbols with "defined" operator.
|
||||||
|
|
||||||
|
[+] Allowed "as" operator to specify the output file extension when
|
||||||
|
placed at the end of the "format" directive line.
|
||||||
|
|
||||||
|
[-] Definition of macro with the same name as one of the preprocessor's directives
|
||||||
|
is no longer allowed.
|
||||||
|
|
||||||
|
[+] Allowed single quote character to be put inside the number value,
|
||||||
|
to help improve long numbers readability.
|
||||||
|
|
||||||
|
[+] Added optional symbolic information output, and a set of tools that extract
|
||||||
|
various kinds of information from it.
|
||||||
|
|
||||||
|
[+] Added "err" directive that allows to signalize error from the source.
|
||||||
|
|
||||||
|
|
||||||
version 1.66 (May 7, 2006)
|
version 1.66 (May 7, 2006)
|
||||||
|
|
||||||
[+] Added DEFINE directive to preprocessor, which defines symbolic constants,
|
[+] Added "define" directive to preprocessor, which defines symbolic constants,
|
||||||
the same kind as EQU directive, however there's an important difference
|
the same kind as "equ" directive, however there's an important difference
|
||||||
that DEFINE doesn't process symbolic constants in the value before
|
that "define" doesn't process symbolic constants in the value before
|
||||||
assigning it. For example:
|
assigning it. For example:
|
||||||
|
|
||||||
a equ 1
|
a equ 1
|
||||||
a equ a+a
|
a equ a+a
|
||||||
|
|
||||||
define b 1
|
define b 1
|
||||||
define b b+b
|
define b b+b
|
||||||
|
|
||||||
defines the "a" constant with value "1+1", but the "b" is defined with
|
defines the "a" constant with value "1+1", but the "b" is defined with
|
||||||
value "b+b". This directive may be useful in some advanced
|
value "b+b". This directive may be useful in some advanced
|
||||||
@ -298,11 +79,11 @@ version 1.66 (May 7, 2006)
|
|||||||
evaluated by the parser and if they are enough to determine the condition,
|
evaluated by the parser and if they are enough to determine the condition,
|
||||||
the whole block is processed accordingly. Thus this block:
|
the whole block is processed accordingly. Thus this block:
|
||||||
|
|
||||||
if eax eq EAX | 0/0
|
if eax eq EAX | 0/0
|
||||||
nop
|
nop
|
||||||
end if
|
end if
|
||||||
|
|
||||||
is parsed into just NOP instruction, since parser is able to determine
|
is parsed into just "nop" instruction, since parser is able to determine
|
||||||
that the condition is true, even though one of the logical values makes no
|
that the condition is true, even though one of the logical values makes no
|
||||||
sense - but since this is none of the "eq", "eqtype" and "in" expressions,
|
sense - but since this is none of the "eq", "eqtype" and "in" expressions,
|
||||||
the parser doesn't investigate.
|
the parser doesn't investigate.
|
||||||
@ -310,9 +91,9 @@ version 1.66 (May 7, 2006)
|
|||||||
[-] Also the assembler is now calculating only as many logical values as it
|
[-] Also the assembler is now calculating only as many logical values as it
|
||||||
needs to determine the condition. So this block:
|
needs to determine the condition. So this block:
|
||||||
|
|
||||||
if defined alpha & alpha
|
if defined alpha & alpha
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
will not cause error when "alpha" is not defined, as it would with previous
|
will not cause error when "alpha" is not defined, as it would with previous
|
||||||
versions. This is because after checking that "defined alpha" is false
|
versions. This is because after checking that "defined alpha" is false
|
||||||
@ -325,7 +106,7 @@ version 1.66 (May 7, 2006)
|
|||||||
[-] The size operator applied to jump no longer applies to the size of relative
|
[-] The size operator applied to jump no longer applies to the size of relative
|
||||||
displacement - now it applies to the size of target address.
|
displacement - now it applies to the size of target address.
|
||||||
|
|
||||||
[-] The RET instruction with 0 parameter is now assembled into short form,
|
[-] The "ret" instruction with 0 parameter is now assembled into short form,
|
||||||
unless you force using the 16-bit immediate with "word" operator.
|
unless you force using the 16-bit immediate with "word" operator.
|
||||||
|
|
||||||
[+] Added missing extended registers for the 32-bit addressing in long mode.
|
[+] Added missing extended registers for the 32-bit addressing in long mode.
|
||||||
@ -350,7 +131,7 @@ version 1.66 (May 7, 2006)
|
|||||||
[-] Some of the internal structures have been extended to provide the
|
[-] Some of the internal structures have been extended to provide the
|
||||||
possibility of making extensive symbol dumps.
|
possibility of making extensive symbol dumps.
|
||||||
|
|
||||||
[-] Corrected FIX directive to keep the value intact before assigning it to the
|
[-] Corrected "fix" directive to keep the value intact before assigning it to the
|
||||||
prioritized constant.
|
prioritized constant.
|
||||||
|
|
||||||
[+] The ` operator now works with any kind of symbol; when used with quoted
|
[+] The ` operator now works with any kind of symbol; when used with quoted
|
||||||
|
@ -481,11 +481,11 @@ mz_segment:
|
|||||||
and eax,1111b
|
and eax,1111b
|
||||||
sub ecx,eax
|
sub ecx,eax
|
||||||
mov edx,edi
|
mov edx,edi
|
||||||
xor al,al
|
xor eax,eax
|
||||||
rep stos byte [edi]
|
rep stos byte [edi]
|
||||||
mov dword [org_origin],edi
|
mov dword [org_origin],edi
|
||||||
mov dword [org_origin+4],0
|
mov dword [org_origin+4],eax
|
||||||
mov [org_registers],0
|
mov [org_registers],eax
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov eax,edx
|
mov eax,edx
|
||||||
call undefined_data
|
call undefined_data
|
||||||
@ -668,14 +668,14 @@ make_stub:
|
|||||||
mov eax,40h+default_stub_end-default_stub
|
mov eax,40h+default_stub_end-default_stub
|
||||||
mov cx,100h+default_stub_end-default_stub
|
mov cx,100h+default_stub_end-default_stub
|
||||||
mov word [edx],'MZ'
|
mov word [edx],'MZ'
|
||||||
mov word [edx+4],1
|
mov byte [edx+4],1
|
||||||
mov word [edx+2],ax
|
mov word [edx+2],ax
|
||||||
mov word [edx+8],4
|
mov byte [edx+8],4
|
||||||
mov word [edx+0Ah],10h
|
mov byte [edx+0Ah],10h
|
||||||
mov word [edx+0Ch],0FFFFh
|
mov word [edx+0Ch],0FFFFh
|
||||||
mov word [edx+10h],cx
|
mov word [edx+10h],cx
|
||||||
mov word [edx+3Ch],ax
|
mov word [edx+3Ch],ax
|
||||||
mov word [edx+18h],40h
|
mov byte [edx+18h],40h
|
||||||
lea edi,[edx+40h]
|
lea edi,[edx+40h]
|
||||||
mov esi,default_stub
|
mov esi,default_stub
|
||||||
mov ecx,default_stub_end-default_stub
|
mov ecx,default_stub_end-default_stub
|
||||||
@ -804,7 +804,7 @@ make_stub:
|
|||||||
mov [esi+0Ah],ax
|
mov [esi+0Ah],ax
|
||||||
binary_heap_ok:
|
binary_heap_ok:
|
||||||
mov word [esi],'MZ'
|
mov word [esi],'MZ'
|
||||||
mov word [esi+8],4
|
mov byte [esi+8],4
|
||||||
mov ax,0FFFFh
|
mov ax,0FFFFh
|
||||||
mov [esi+0Ch],ax
|
mov [esi+0Ch],ax
|
||||||
dec ax
|
dec ax
|
||||||
@ -813,7 +813,7 @@ make_stub:
|
|||||||
mov [esi+0Eh],ax
|
mov [esi+0Eh],ax
|
||||||
mov [esi+16h],ax
|
mov [esi+16h],ax
|
||||||
mov word [esi+14h],100h
|
mov word [esi+14h],100h
|
||||||
mov word [esi+18h],40h
|
mov byte [esi+18h],40h
|
||||||
mov eax,[display_buffer]
|
mov eax,[display_buffer]
|
||||||
sub eax,ecx
|
sub eax,ecx
|
||||||
cmp edi,eax
|
cmp edi,eax
|
||||||
@ -977,9 +977,9 @@ format_pe:
|
|||||||
mov word [edx],'PE' ; signature
|
mov word [edx],'PE' ; signature
|
||||||
mov ax,[machine]
|
mov ax,[machine]
|
||||||
mov word [edx+4],ax
|
mov word [edx+4],ax
|
||||||
mov dword [edx+38h],1000h ; section alignment
|
mov byte [edx+38h+1],10h ; section alignment
|
||||||
mov dword [edx+3Ch],200h ; file alignment
|
mov byte [edx+3Ch+1],2 ; file alignment
|
||||||
mov word [edx+40h],1 ; OS version
|
mov byte [edx+40h],1 ; OS version
|
||||||
mov eax,[subsystem_version]
|
mov eax,[subsystem_version]
|
||||||
mov [edx+48h],eax
|
mov [edx+48h],eax
|
||||||
mov ax,[subsystem]
|
mov ax,[subsystem]
|
||||||
@ -993,28 +993,26 @@ format_pe:
|
|||||||
mov word [edx+1Ah],VERSION_MAJOR + VERSION_MINOR shl 8
|
mov word [edx+1Ah],VERSION_MAJOR + VERSION_MINOR shl 8
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jnz init_peplus_specific
|
jnz init_peplus_specific
|
||||||
mov dword [edx+14h],0E0h ; size of optional header
|
mov byte [edx+14h],0E0h ; size of optional header
|
||||||
mov dword [edx+16h],10B010Eh; flags and magic value
|
mov dword [edx+16h],10B010Eh; flags and magic value
|
||||||
mov eax,[image_base]
|
mov eax,[image_base]
|
||||||
mov dword [edx+34h],eax
|
mov [edx+34h],eax
|
||||||
mov dword [edx+60h],1000h ; stack reserve
|
mov byte [edx+60h+1],10h ; stack reserve
|
||||||
mov dword [edx+64h],1000h ; stack commit
|
mov byte [edx+64h+1],10h ; stack commit
|
||||||
mov dword [edx+68h],10000h ; heap reserve
|
mov byte [edx+68h+2],1 ; heap reserve
|
||||||
mov dword [edx+6Ch],0 ; heap commit
|
mov byte [edx+74h],16 ; number of directories
|
||||||
mov dword [edx+74h],16 ; number of directories
|
|
||||||
jmp pe_header_ok
|
jmp pe_header_ok
|
||||||
init_peplus_specific:
|
init_peplus_specific:
|
||||||
mov dword [edx+14h],0F0h ; size of optional header
|
mov byte [edx+14h],0F0h ; size of optional header
|
||||||
mov dword [edx+16h],20B002Eh; flags and magic value
|
mov dword [edx+16h],20B002Eh; flags and magic value
|
||||||
mov eax,[image_base]
|
mov eax,[image_base]
|
||||||
mov dword [edx+30h],eax
|
mov [edx+30h],eax
|
||||||
mov eax,[image_base_high]
|
mov eax,[image_base_high]
|
||||||
mov dword [edx+34h],eax
|
mov [edx+34h],eax
|
||||||
mov dword [edx+60h],1000h ; stack reserve
|
mov byte [edx+60h+1],10h ; stack reserve
|
||||||
mov dword [edx+68h],1000h ; stack commit
|
mov byte [edx+68h+1],10h ; stack commit
|
||||||
mov dword [edx+70h],10000h ; heap reserve
|
mov byte [edx+70h+2],1 ; heap reserve
|
||||||
mov dword [edx+78h],0 ; heap commit
|
mov byte [edx+84h],16 ; number of directories
|
||||||
mov dword [edx+84h],16 ; number of directories
|
|
||||||
pe_header_ok:
|
pe_header_ok:
|
||||||
bsf ecx,[edx+3Ch]
|
bsf ecx,[edx+3Ch]
|
||||||
imul ebx,[number_of_sections],28h
|
imul ebx,[number_of_sections],28h
|
||||||
@ -1089,11 +1087,11 @@ format_pe:
|
|||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
bt [format_flags],8
|
bt [format_flags],8
|
||||||
jnc dll_flag_ok
|
jnc dll_flag_ok
|
||||||
or dword [edx+16h],2000h
|
or byte [edx+16h+1],20h
|
||||||
dll_flag_ok:
|
dll_flag_ok:
|
||||||
bt [format_flags],9
|
bt [format_flags],9
|
||||||
jnc wdm_flag_ok
|
jnc wdm_flag_ok
|
||||||
or word [edx+5Eh],2000h
|
or byte [edx+5Eh+1],20h
|
||||||
wdm_flag_ok:
|
wdm_flag_ok:
|
||||||
jmp format_defined
|
jmp format_defined
|
||||||
pe_section:
|
pe_section:
|
||||||
@ -1234,7 +1232,6 @@ pe_section:
|
|||||||
mov eax,[code_start]
|
mov eax,[code_start]
|
||||||
sub eax,[stub_size]
|
sub eax,[stub_size]
|
||||||
sub [ebx+14h],eax
|
sub [ebx+14h],eax
|
||||||
|
|
||||||
mov ecx,[ebx+10h]
|
mov ecx,[ebx+10h]
|
||||||
test byte [ebx+24h],20h
|
test byte [ebx+24h],20h
|
||||||
jz pe_code_sum_ok
|
jz pe_code_sum_ok
|
||||||
@ -1254,7 +1251,6 @@ pe_section:
|
|||||||
mov eax,[ebx+0Ch]
|
mov eax,[ebx+0Ch]
|
||||||
mov [edx+30h],eax
|
mov [edx+30h],eax
|
||||||
pe_data_sum_ok:
|
pe_data_sum_ok:
|
||||||
|
|
||||||
mov eax,[ebx+8]
|
mov eax,[ebx+8]
|
||||||
or eax,eax
|
or eax,eax
|
||||||
jz udata_ok
|
jz udata_ok
|
||||||
@ -1263,7 +1259,6 @@ pe_section:
|
|||||||
or byte [ebx+24h],80h
|
or byte [ebx+24h],80h
|
||||||
add [edx+24h],ecx
|
add [edx+24h],ecx
|
||||||
udata_ok:
|
udata_ok:
|
||||||
|
|
||||||
mov ecx,[edx+38h]
|
mov ecx,[edx+38h]
|
||||||
dec ecx
|
dec ecx
|
||||||
add eax,ecx
|
add eax,ecx
|
||||||
@ -2261,10 +2256,11 @@ format_coff:
|
|||||||
flat_section_flags_ok:
|
flat_section_flags_ok:
|
||||||
mov dword [ebx+14h],eax
|
mov dword [ebx+14h],eax
|
||||||
mov [current_section],ebx
|
mov [current_section],ebx
|
||||||
mov [number_of_sections],0
|
xor eax,eax
|
||||||
|
mov [number_of_sections],eax
|
||||||
mov dword [org_origin],edi
|
mov dword [org_origin],edi
|
||||||
mov dword [org_origin+4],0
|
mov dword [org_origin+4],eax
|
||||||
mov [org_registers],0
|
mov [org_registers],eax
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov [org_symbol],ebx
|
mov [org_symbol],ebx
|
||||||
mov [labels_type],2
|
mov [labels_type],2
|
||||||
@ -2287,8 +2283,8 @@ coff_section:
|
|||||||
mov [ebx],al
|
mov [ebx],al
|
||||||
mov [ebx+8],edi
|
mov [ebx+8],edi
|
||||||
mov dword [org_origin],edi
|
mov dword [org_origin],edi
|
||||||
mov dword [org_origin+4],0
|
mov dword [org_origin+4],eax
|
||||||
mov [org_registers],0
|
mov [org_registers],eax
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov [org_symbol],ebx
|
mov [org_symbol],ebx
|
||||||
mov [labels_type],2
|
mov [labels_type],2
|
||||||
@ -2935,8 +2931,8 @@ elf_section:
|
|||||||
mov [ebx],al
|
mov [ebx],al
|
||||||
mov [ebx+8],edi
|
mov [ebx+8],edi
|
||||||
mov dword [org_origin],edi
|
mov dword [org_origin],edi
|
||||||
mov dword [org_origin+4],0
|
mov dword [org_origin+4],eax
|
||||||
mov [org_registers],0
|
mov [org_registers],eax
|
||||||
mov [org_start],edi
|
mov [org_start],edi
|
||||||
mov [org_symbol],ebx
|
mov [org_symbol],ebx
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
@ -3977,7 +3973,7 @@ close_elf_exe:
|
|||||||
|
|
||||||
dump_symbols:
|
dump_symbols:
|
||||||
mov ebx,[code_start]
|
mov ebx,[code_start]
|
||||||
mov dword [ebx],'fas'+27 shl 24
|
mov dword [ebx],'fas'+1Ah shl 24
|
||||||
mov dword [ebx+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 38h shl 16
|
mov dword [ebx+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 38h shl 16
|
||||||
add ebx,38h
|
add ebx,38h
|
||||||
mov edi,ebx
|
mov edi,ebx
|
||||||
|
@ -963,6 +963,8 @@ instructions_5:
|
|||||||
dw loop_instruction_16bit-assembler
|
dw loop_instruction_16bit-assembler
|
||||||
db 'loopz',0E1h
|
db 'loopz',0E1h
|
||||||
dw loop_instruction-assembler
|
dw loop_instruction-assembler
|
||||||
|
db 'lzcnt',0BDh
|
||||||
|
dw popcnt_instruction-assembler
|
||||||
db 'maxpd',5Fh
|
db 'maxpd',5Fh
|
||||||
dw sse_pd_instruction-assembler
|
dw sse_pd_instruction-assembler
|
||||||
db 'maxps',5Fh
|
db 'maxps',5Fh
|
||||||
@ -1324,6 +1326,8 @@ instructions_6:
|
|||||||
dw sse_pd_instruction-assembler
|
dw sse_pd_instruction-assembler
|
||||||
db 'hsubps',07Dh
|
db 'hsubps',07Dh
|
||||||
dw cvtpd2dq_instruction-assembler
|
dw cvtpd2dq_instruction-assembler
|
||||||
|
db 'invept',80h
|
||||||
|
dw vmx_inv_instruction-assembler
|
||||||
db 'invlpg',0
|
db 'invlpg',0
|
||||||
dw invlpg_instruction-assembler
|
dw invlpg_instruction-assembler
|
||||||
db 'lfence',0E8h
|
db 'lfence',0E8h
|
||||||
@ -1615,6 +1619,8 @@ instructions_7:
|
|||||||
dw insertq_instruction-assembler
|
dw insertq_instruction-assembler
|
||||||
db 'invlpga',0DFh
|
db 'invlpga',0DFh
|
||||||
dw invlpga_instruction-assembler
|
dw invlpga_instruction-assembler
|
||||||
|
db 'invvpid',81h
|
||||||
|
dw vmx_inv_instruction-assembler
|
||||||
db 'ldmxcsr',10b
|
db 'ldmxcsr',10b
|
||||||
dw fxsave_instruction-assembler
|
dw fxsave_instruction-assembler
|
||||||
db 'loopned',0E0h
|
db 'loopned',0E0h
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
; flat assembler version 1.67
|
; flat assembler version 1.68
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
;
|
;
|
||||||
@ -33,7 +33,7 @@
|
|||||||
; cannot simply be copied and put under another distribution licence
|
; cannot simply be copied and put under another distribution licence
|
||||||
; (including the GNU Public Licence).
|
; (including the GNU Public Licence).
|
||||||
|
|
||||||
VERSION_STRING equ "1.67.38"
|
VERSION_STRING equ "1.68"
|
||||||
|
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 67
|
VERSION_MINOR = 68
|
||||||
|
@ -6146,8 +6146,6 @@ vmread_instruction:
|
|||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,','
|
cmp al,','
|
||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
call vmread_check_size
|
|
||||||
mov [operand_size],0
|
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
cmp al,10h
|
cmp al,10h
|
||||||
@ -6165,7 +6163,6 @@ vmread_instruction:
|
|||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,','
|
cmp al,','
|
||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
mov [operand_size],0
|
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call get_size_operator
|
call get_size_operator
|
||||||
cmp al,10h
|
cmp al,10h
|
||||||
@ -6196,8 +6193,6 @@ vmwrite_instruction:
|
|||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
call convert_register
|
call convert_register
|
||||||
mov [postbyte_register],al
|
mov [postbyte_register],al
|
||||||
call vmread_check_size
|
|
||||||
mov [operand_size],0
|
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,','
|
cmp al,','
|
||||||
jne invalid_operand
|
jne invalid_operand
|
||||||
@ -6216,6 +6211,33 @@ vmwrite_instruction:
|
|||||||
mov bl,al
|
mov bl,al
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
jmp nomem_instruction_ready
|
jmp nomem_instruction_ready
|
||||||
|
vmx_inv_instruction:
|
||||||
|
mov [opcode_prefix],66h
|
||||||
|
mov [extended_code],38h
|
||||||
|
mov [supplemental_code],al
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,10h
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call convert_register
|
||||||
|
mov [postbyte_register],al
|
||||||
|
call vmread_check_size
|
||||||
|
mov [operand_size],0
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,','
|
||||||
|
jne invalid_operand
|
||||||
|
lods byte [esi]
|
||||||
|
call get_size_operator
|
||||||
|
cmp al,'['
|
||||||
|
jne invalid_operand
|
||||||
|
call get_address
|
||||||
|
mov al,[operand_size]
|
||||||
|
or al,al
|
||||||
|
jz vmx_size_ok
|
||||||
|
cmp al,16
|
||||||
|
jne invalid_operand_size
|
||||||
|
jmp vmx_size_ok
|
||||||
simple_svm_instruction:
|
simple_svm_instruction:
|
||||||
push eax
|
push eax
|
||||||
mov [base_code],0Fh
|
mov [base_code],0Fh
|
||||||
|
Loading…
Reference in New Issue
Block a user