Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Microsoft-spezifisch
Generiert die lsl Anweisung (Load Segment Limit).
Syntax
unsigned long __segmentlimit(
unsigned long a
);
Parameter
a
[in] Eine Konstante, die die Segmentauswahl angibt.
Rückgabewert
Die Segmentgrenze der segmentauswahl, die durch eine, wenn die Auswahl gültig und auf der aktuellen Berechtigungsstufe sichtbar ist.
Anforderungen
| Intrinsic | Aufbau |
|---|---|
__segmentlimit |
x86, x64 |
Headerdatei<intrin.h>
Hinweise
Wenn der Segmentgrenzwert nicht abgerufen werden kann, schlägt diese Anweisung fehl. Bei Einem Fehler löscht diese Anweisung das ZF-Flag, und der Rückgabewert ist nicht definiert.
Diese Routine ist nur als systeminterne Funktion verfügbar.
Beispiel
#include <stdio.h>
#ifdef _M_IX86
typedef unsigned int READETYPE;
#else
typedef unsigned __int64 READETYPE;
#endif
#define EFLAGS_ZF 0x00000040
#define KGDT_R3_DATA 0x0020
#define RPL_MASK 0x3
extern "C"
{
unsigned long __segmentlimit (unsigned long);
READETYPE __readeflags();
}
#pragma intrinsic(__readeflags)
#pragma intrinsic(__segmentlimit)
int main(void)
{
const unsigned long initsl = 0xbaadbabe;
READETYPE eflags = 0;
unsigned long sl = initsl;
printf("Before: segment limit =0x%x eflags =0x%x\n", sl, eflags);
sl = __segmentlimit(KGDT_R3_DATA + RPL_MASK);
eflags = __readeflags();
printf("After: segment limit =0x%x eflags =0x%x eflags.zf = %s\n", sl, eflags, (eflags & EFLAGS_ZF) ? "set" : "clear");
// If ZF is set, the call to lsl succeeded; if ZF is clear, the call failed.
printf("%s\n", eflags & EFLAGS_ZF ? "Success!": "Fail!");
// You can verify the value of sl to make sure that the instruction wrote to it
printf("sl was %s\n", (sl == initsl) ? "unchanged" : "changed");
return 0;
}
Before: segment limit =0xbaadbabe eflags =0x0
After: segment limit =0xffffffff eflags =0x256 eflags.zf = set
Success!
sl was changed
Ende Microsoft-spezifisch