Was ist die .byte Assembler-Direktive in gnu assembly?

9

Beim Durchlauf von C-Code mit Inline-Assembly bin ich auf die .byte-Direktive (mit einem Punkt am Anfang) gestoßen.

Beim Überprüfen der Assemblyreferenz im Web habe ich festgestellt, dass damit ein Byte im Speicher reserviert wird.

Aber im Code gab es vor der Aussage kein Label. Also habe ich mich gefragt, was ist eine unbenannte .byte-Direktive oder eine andere Datenspeicher-Direktive für diese Angelegenheit.

Für z.B. Wenn ich .byte 0x0a code, wie kann ich es verwenden?

    
vjain27 03.09.2011, 00:09
quelle

4 Antworten

5

Es gibt ein paar Möglichkeiten ... hier sind ein Paar, das mir aus dem Kopf geht:

  1. Sie können auf eine Bezeichnung zugreifen, die nach der Direktive .byte ist. Beispiel:

    %Vor%
  2. Basierend auf dem endgültigen verknüpften Layout des Programms werden die .byte -Direktiven möglicherweise als Code ausgeführt. Normalerweise hätten Sie in diesem Fall auch ein Label ...

  3. Einige Assembler unterstützen die Generierung von x86-Befehlspräfixen für die Operandengröße usw. nicht. In Code, der für diese Assembler geschrieben wurde, sehen Sie oft etwas wie:

    %Vor%

    Damit der Assembler den gewünschten Code ausgibt.

Carl Norum 03.09.2011, 00:20
quelle
2

Hier ist ein Beispiel mit Inline-Assembly:

%Vor%

(Siehe Compiler asm Ausgabe und auch Disassemblierung der letzten Binärdatei auf dem Godbolt Compiler Explorer .)

Sie können .byte 0xb8, 0x01, 0x00, 0x00, 0x00 durch mov , %%eax ersetzen Das Laufergebnis wird gleich sein. Dies deutet darauf hin, dass es sich um ein Byte handeln kann, das eine Instruktion darstellen kann, zB move oder andere.

    
user3380830 21.08.2015 23:52
quelle
1

.byte spuckt Bytes aus, wo auch immer Sie sind. Ob es eine Bezeichnung gibt oder nicht auf das Byte zeigt, spielt keine Rolle.

Wenn Sie sich im Textsegment befinden, wird dieses Byte möglicherweise wie Code ausgeführt.

Carl hat es erwähnt, aber hier ist ein vollständiges Beispiel, um es weiter zu vertiefen: eine Linux x86_64-Implementierung von true mit einem nop geworfen:

%Vor%

erzeugt die gleiche ausführbare Datei wie:

%Vor%

da nop als das Byte 0x90 codiert ist.

    
quelle
0

Die .byte-Anweisung ist eine Direktive, mit der Sie ein konstantes Byte deklarieren können, das nur durch eine Inspektion ohne Kontext bekannt ist.

Aus dem GNU Assembler Guide:

%Vor%     
Daniel Pereira 03.09.2011 00:24
quelle

Tags und Links