Vorausgesetzt, dass dies für ein Sicherheitsprojekt ist, meine Vermutung ist, dass diese Anweisungen entworfen sind, um zu verhindern, dass der Compiler authenticated
, guard1
und guard2
Variablen wegoptimiert. Wenn diese Variablen später nicht in der Funktion verwendet werden, könnte ein kompatibler C-Compiler sie optimieren und das Layout des Stapelrahmens für den Funktionsaufruf ändern.
Technisch gesehen, da diese Anweisungen keine Nebenwirkungen haben, könnte der Compiler sie im Prinzip auch optimieren. Allerdings ist der Sinn, den ich bekomme, dass der beabsichtigte Compiler dies nicht tut (nicht dass es könnte nicht es tun, nur dass es kann nicht es tun). Auf diese Weise wird das Layout des Stapelrahmens die authenticated
Variable, die durch zwei char
Werte abgeschirmt ist, die keine Nullabschlüsse sind, machen es möglicherweise ein bisschen schwieriger, authenticated
zu überschreiben. Natürlich klingt es so, als ob Ihre Aufgabe speziell darin besteht, authenticated
zu ändern, also ist es nicht narrensicher. :-)
Hoffe, das hilft!
Vielleicht verwandt mit [Warum verwenden Sie einen Funktionsparameter 'foo' auf diese Weise: * (& foo)?] (Http://StackOverflow.com/q/25530115/1708801), ich glaube nicht, dass es genug Kontext gibt . –
'&' ist der Adressoperator. '& authenticated' ist die Adresse der' authenticated' Variablen im RAM. Die Anweisung '& authenticated;' (beachten Sie das ';') ist legal C, tut aber nichts. – UncleO
Aus guten Gründen muss ich annehmen, dass es einen Zweck hat. – amaik