Startseite › x64-Assembler-Referenz › Übersicht Hilfe zum PBXB64-Compiler

Assembler-Anweisungen

Der Assembler von PBXB64 unterstützt eine Reihe von Anweisungen zur Steuerung der Ausrichtung, Datenemission und SEH-Abwicklungsinformationen (Structured Exception Handling). Im Inneren werden Direktiven verwendet#ASM / #ENDASMBlöcke.

Kategorie: Übersicht

Beschreibung

Der Assembler von PBXB64 unterstützt eine Reihe von Anweisungen zur Steuerung der Ausrichtung, Datenemission und SEH-Abwicklungsinformationen (Structured Exception Handling). Im Inneren werden Direktiven verwendet#ASM / #ENDASMBlöcke.

Ausrichtungsrichtlinien

#ALIGN

Steuert die Ausrichtung der Strukturelemente innerhalb von PBTYPE / UNIONBlöcke. Steuert außerdem die allgemeine Abschnittsausrichtung in Baugruppenblöcken.

#ALIGN 16       ' align to 16-byte boundary

Bei Verwendung in einemTYPE/UNIONKontext,#ALIGNsteuert die Packungsausrichtung nachfolgender Elemente. Die Standardausrichtung ist die natürliche Ausrichtung jedes Elementtyps.

.p2align

Füllen Sie den aktuellen Abschnitt mit NOP-Anweisungen auf, um die angegebene Ausrichtungsgrenze zu erreichen. Die Direktive benötigt einen Zweierpotenz-Exponenten.

#ASM
    .p2align 4      ; align to 16-byte boundary (2^4)
    .p2align 5, 0x90, 8  ; align to 32-byte, pad with NOPs, max 8 bytes
#ENDASM

Parameter:

ParameterBeschreibung
alignZweierpotenz-Ausrichtung (z. B. 4 = 16 Bytes, 5 = 32 Bytes)
fillOptionales Füllbyte (Standard: 0x90 = NOP)
maxOptionale maximale Anzahl einzufügender Bytes

.zero

Gibt einen Block mit null initialisiertem Speicher aus. Wird häufig zum Auffüllen der Ausrichtung oder zur Datenreservierung verwendet.

#ASM
    .zero 32        ; emit 32 zero bytes
#ENDASM

SEH-Richtlinien (Structured Exception Handling).

Diese Anweisungen geben Abwicklungsinformationen an die aus.pdataUnd.xdataPE-Abschnitte, die es dem Windows x64-Ausnahmehandler ermöglichen, den Stapel ordnungsgemäß abzuwickeln.

.seh_proc

Markiert den Beginn einer Funktion mit SEH-Abwicklungsinformationen. Erforderlich vor allen anderen SEH-Richtlinien.

.seh_proc MyFunction

.seh_endprologue

Markiert das Ende des Funktionsprologs. Ab diesem Zeitpunkt ist der Stapelrahmen vollständig aufgebaut und die Abwickelcodes wurden aufgezeichnet.

.seh_endprologue

.seh_pushreg

Zeichnet auf, dass ein nichtflüchtiges Register auf den Stapel verschoben wurde. Beim Abwickeln wird das Register wiederhergestellt.

.seh_pushreg rbx
.seh_pushreg rsi
.seh_pushreg rdi

.seh_setframe

Erstellt ein Frame-Pointer-Register mit optionalem skaliertem Offset. Der Rahmenzeiger wird verwendet, um während des Abwickelns auf lokale Variablen und Parameter zuzugreifen.

.seh_setframe rbp, 0   ; rbp is frame pointer, no scaled offset

.seh_stackalloc

Zeichnet auf, dass eine angegebene Anzahl von Bytes auf dem Stapel zugewiesen wurde (normalerweise über).sub rsp, X).

.seh_stackalloc 64    ; 64 bytes of local stack allocated

.seh_savereg

Zeichnet auf, dass ein nichtflüchtiges Register in einem bestimmten Stapelversatz vom Framezeiger oder Stapelzeiger gespeichert wurde.

.seh_savereg rbx, 32   ; rbx saved at [rbp+32] or [rsp+32]

.seh_savexmm

Zeichnet auf, dass ein nichtflüchtiges XMM-Register in einem bestimmten Stapeloffset gespeichert wurde.

.seh_savexmm xmm6, 16  ; xmm6 saved at [rbp+16]

.seh_pushframe

Zeichnet auf, dass ein Frame gepusht wurde (wird zur Ausnahmebehandlung von Kettenframes verwendet). Die Wahl[code]Flag zeigt an, ob eine Absenderadresse übertragen wurde.

.seh_pushframe         ; push frame without return address
.seh_pushframe code     ; push frame with return address on stack

.seh_handler

Ordnet der aktuellen Prozedur eine Ausnahmehandlerfunktion zu. Verwendet fürTRY/CATCH/FINALLYUnterstützung.

.seh_handler ExceptionHandler, @except
.seh_handler FinallyHandler, @finally

.seh_endproc

Markiert das Ende der SEH-Abwicklungsinformationen einer Funktion. Muss nach allen anderen SEH-Anweisungen für die Funktion erscheinen.

.seh_endproc

Vollständiges SEH-Beispiel

; Standard x64 function prologue with SEH
#ASM
.seh_proc MyFunc
    push rbp
    .seh_pushreg rbp
    mov rbp, rsp
    .seh_setframe rbp, 0
    sub rsp, 48
    .seh_stackalloc 48
    .seh_endprologue

    ; function body
    mov DWORD PTR [rbp-4], 42
    mov eax, DWORD PTR [rbp-4]

    ; epilogue
    add rsp, 48
    pop rbp
    ret
.seh_endproc
#ENDASM

Richtlinien aussenden

.byte

Geben Sie rohe Bytewerte in den Codestream aus.

.byte 0x90, 0x90, 0xCC    ; NOP, NOP, INT3

.word

16-Bit-Wortwerte ausgeben.

.word 0x1234, 0x5678

.long

32-Bit lange Werte ausgeben.

.long 0x12345678

.quad

64-Bit-Quadword-Werte ausgeben.

.quad 0x1234567890ABCDEF

Abschnittsrichtlinien

.section

Wechseln Sie zu einem benannten Abschnitt. Standardabschnitte umfassen.text, .data, .bss, .rdata.

.section .data
.section .rdata, "rd"   ; read-only data section

.section .text
    ; code follows

.text / .data / .bss

Praktische Aliase für allgemeine Abschnitte.

.data
myVar: .quad 42

.text
    mov rax, QWORD PTR [myVar]

Category: Assembly

PBXB64 Status: Referenzthema fuer Assembler-Syntax und Familienhinweise; untergeordnete Instruktionsseiten und registrierte Tests liefern den endgueltigen Support-Nachweis.

Beschreibung

Dieses Assembler-Thema gruppiert PBXB64-x64-Assembler-Syntax, Direktiven, Adressierungsregeln oder Mnemonik-Familien. Behandeln Sie es als Navigation plus Nutzungshinweis, sofern keine Unterseite oder kein registrierter Test eine konkrete Instruktionsform belegt.

Prüfung der Instruktionsfamilie

Verwenden Sie diese Mnemonik-Übersichten als Einstieg in fokussierte Assembler-Tests. Eine vollständige Prüfung nennt CPU-Feature-Bit, Operandenbreite, Register- oder Speicherform, Flag-Auswirkungen und ob die Instruktion im Windows-x64-User-Mode gültig ist.

PBXB64-Integrationshinweise

Inline-Assembler muss die Windows-x64-Aufrufkonvention erhalten, wenn die Kontrolle zu compilererzeugtem Code zurückkehrt. Sichern Sie nichtflüchtige Register, halten Sie Stack-Alignment bei Aufrufen ein und dokumentieren Sie absichtlich veränderte Flags oder Register.