Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

struct, copy, gdt

JamesBomb / 4 Antworten / Baumansicht Nickles

Hallo. (s geht um C)
Ich habe eine Struct:

typedef struct {
WORD size0;
WORD base0;
UCHAR base1;
UCHAR type;
UCHAR size1_info;
UCHAR base2;
} DESCRIPTOR;

, die Adresse der GDT und ne Function copy, die ne beliebige Anzahl von Bytes kopiert.

Wenn ich mir nun lokal! einen descriptor definiere:

DESCRIPTOR dummy;
und dann mit
copy(gdtinfo.offset + 8*i, (char*)&dummy, 8);
fülle werden alle Daten ausser dem WORD size0 korrekt! kopiert(dh. die Werte stimmen!). Nur size0 behält den Initialisierungswert! (getestet)
Wenn dummy global deklariert wird geht es! Warum geht es also nicht, wenn dummy lokal deklariert wird?

(WORD = unsigend short und UCHAR = unsigned char)

bei Antwort benachrichtigen
thomas woelfer JamesBomb „struct, copy, gdt“
Optionen

wuerde wetten das du hier ein alignment problem hast;

WM_HOPETHISHELPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
JamesBomb thomas woelfer „wuerde wetten das du hier ein alignment problem hast WM_HOPETHISHELPS thomas...“
Optionen

macht das der Compiler nich automatisch?.....oder sprechen wir von verschiedenen Sachen? Erklär mal was Alignment heißt und wie ich das beheben kann.

bei Antwort benachrichtigen
thomas woelfer JamesBomb „macht das der Compiler nich automatisch?.....oder sprechen wir von verschiedenen...“
Optionen

der compiler erzeugt die datenstrukturen anhand der von dir eingestellten optionen, oder er verwendet den default. dabei werden unter umstaenden pad-bytes eingefügt, um die alignment grenzen einzuhalten. wie die strukturen dann abgebildet werden ist vom eingestellten alignment abhaengig. (das geht auch per pragma auf struktur-ebene). je nachdem wie das alignment der _anderen_ struktur aussieht (2 byte, 4 byte 8 byte?) treten dann gern solche probleme auf - i.b. dann wenn der andere code wie in deinem fall (so habe ich das zumindest verstanden) nicht von einem selbst generiert wurde.

WM_HOPETHISHEPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
JamesBomb thomas woelfer „der compiler erzeugt die datenstrukturen anhand der von dir eingestellten...“
Optionen

Ich habs jetzt mal mit nem Pointer probiert und es geht.
Wie kann ich denn nun meine Varaible
DESCRIPTOR dummy; ausrichten?

bei Antwort benachrichtigen