Mysteriöses printf-Argument beim Zerlegen von c-Programmen

8

Also ich habe diesen c-code:

%Vor%

Ich habe es auf ubuntu mit:

kompiliert %Vor%

Und dann zerlegt es mit:

%Vor%

Und in main printf () wird wie folgt aufgerufen:

%Vor% Was ich gerade frage, ist, was das bedeutet:

%Vor%

Ich weiß, wofür die ersten 4 mov-Befehle sind, aber ich kann einfach nicht herausfinden, warum eine '1' auf den Stapel geschoben wird. Auch dieses mov tritt nur auf, wenn die Optimierung eingeschaltet ist. Irgendwelche Ideen?

    
SuppenGeist 16.05.2015, 15:04
quelle

1 Antwort

6

Die GNU C-Bibliothek (glibc) verwendet __printf_chk anstelle von printf , wenn Sie (oder der Compiler) _FORTIFY_SOURCE definieren und die Optimierung aktiviert ist. Die _chk -Version der Funktion verhält sich genau wie die Funktion, die sie ersetzt, außer dass sie Suche nach Stack-Überlauf und validiere eventuell die Argumente. Das zusätzliche erste Argument gibt an, wie viel überprüft und validiert werden soll.

Mit Blick auf die tatsächliche glibc implmenation es scheint, dass keine zusätzlichen Stack-Überprüfung über was der Compiler automatisch bietet (und so sollte nicht notwendig sein) und die Validierung von Argumenten ist sehr minimal. Es wird überprüft, ob %n nur in schreibgeschützten Formatzeichenfolgen angezeigt wird, und überprüft, ob die speziellen %m$ Argumentbezeichner verwendet werden, die für alle Argumente ohne Lücken verwendet werden.

    
Ross Ridge 16.05.2015, 16:05
quelle

Tags und Links