In einem Posix-System kodiere ich einen Signal-Handler mit sigaction.Wie kann ich mehr Stapel in den Todesfällen meines Programms zuweisen?
Ich möchte einige Debuginformationen aufzeichnen, bevor Sie exit()
aufrufen. Dies beinhaltet einige Prozeduraufrufe.
Wenn wir einen Stack-Überlauf hatten, gibt es irgendeine Möglichkeit, dass ich diese Funktionsaufrufe machen kann, ohne die Dinge weiter zu vermasseln?
Ich weiß, dass, nachdem ich meine Debug-Sachen mache, ich exit()
anrufen werde, also werden wir den Stapel nie abwickeln. Könnte ich einen kleinen Assembler einfügen, um den Stapelzeiger auf die Basis des Stapels zu setzen?
Egal, dass ich es wegschmeiße; es wird später nicht gebraucht werden, und indem ich den Anfang des Stapels wegschmeiße, werde ich nicht über das Ende hinausstürzen.
Hat jemand dies getan, oder eine Alternative, und zeigte es zu arbeiten?
Wenn Sie dies innerhalb eines Signal-Handlers tun möchten, warum richten Sie nicht einfach einen 'sigaltstack' ein, so dass das Limit auf dem Haupt-Stack keine Rolle spielt? – EOF
Weil ich es nicht ahnte (schüchternes Grinsen). Fühlen Sie sich frei, dies als Antwort zu posten. Detail wäre nett, aber ich kann Google dafür, jetzt, da du mir einen Hinweis gegeben hast. – Mawg