Cauza unei excepții de tip stivă (x86)

I am trying to write assembly code to cause a stack exception but I am having no luck so far. According to the AT&T programmer manuals a stack exception is caused by one of the following:

• referințe stive implicite în care adresa stack-ului nu este în formă canonică. Stack implicit referințele includ toate instrucțiunile push și pop și orice instrucțiune care utilizează RSP sau RBP ca bază Inregistreaza-te. • Încercarea de a încărca un selector de segmente de stivă care referă la un descriptor de segment care conține un element clar bitul prezent (descriptor.P = 0). • Orice acces la stivă care nu reușește verificarea limitei stivei.

M-am dus pentru prima metodă; Încerc să încărc rsp cu o formă non-canonică cu următorul cod:

asm volatile("mov $0xAAAAAAAA00000000, %%rax;"
                    "orq %%rax, %%rsp;"
                    "push %%rax;" : : : );

GDB spune doar despre faptul că nu este capabil să abordeze memoria și totul se sparge, mai degrabă decât excepția. Are cineva idei? Dacă nu știe cineva cum aș putea provoca o excepție folosind a treia condiție? Nu știu ce înseamnă "nu reușește verificarea limitei de stivă". Mulțumiri!

0
Cea mai ușoară cale ar fi probabil că te cheamă mereu până când tu vei depăși stack-ul. Consultați câteva metode alternative care nu implică recurență .
adăugat autor DCoder, sursa

1 răspunsuri

 asm(
    "\n"
    "MYLOOP:\n\t"
    "pushq %rbp\n\t"
    //"popq %rbp\n\t"
    "jmp MYLOOP\n\t"
    );

Depășirea stivei simple. Dezactivați instrucțiunea popq pentru a avea o bucla infinită de stivă push/pop care consumă 100% din un nucleu de CPU.

0
adăugat