Jeg tilføjer en funktion til min Linux-debugger (jeg bruger Ptrace til at manipulere den sporede proces samt libbfd / libopcodes) for at afvikle stakken og afgøre, om der findes uoverensstemmelser mellem hvert CALLs tildelte stakplads og en statisk afledt lokal variabel størrelse, udskrivning af adresse og lokal stakstørrelse for hver ramme undervejs.
Min generelle metode er at tage adressen i basismarkøren (EBP / RBP), inkrement, som markøren skal skal indeholde den gemte rammemarkør, derferens den adresse, undersøge den med PTRACE_PEEKDATA og gentag, indtil jeg henviser en adresse, der optager et område uden for stakken.
Jeg ved hvordan man kontrollerer kode / datasegmentregistre, men ideelt som en metode til at kontrollere, om jeg stadig er inde i callstack, selvom segmenteringen er blevet ændret med W ^ X-hukommelsessider eller en ellers ikke-eksekverbar stak.
Kort sagt, hvordan kan jeg kontrollere (generelt case) når jeg er flyttet uden for stakken uden at udløse en generel beskyttelsesfejl?
(Som bortset fra det, indser jeg, at jeg opererer under den antagelse, at kontrol af en adresses sidesegment er den ideelle metode her - måske findes der en anden enklere metode til at bestemme, om en adresse er inden for den aktuelle procestaks plads)