gcc -mpreferred-stack-boundary-option
Ich will wissen, was ist die Verwendung von -mpreferred-stack-boundary
option bei der Kompilierung in den GNU-compiler. Ich habe die Dokumentation aber die Erklärung ist verloren auf mich. Könnte jemand bitte es erklären.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die option hat absolut nichts zu tun mit dem debugger.
Es wirkt sich auf generierten code in Ihre binäre. Standardmäßig wird GCC Dinge so anzuordnen, dass jede Funktion, sofort nach der Eingabe, hat seinen stack-pointer ausgerichtet auf 16-byte-Grenze (dies kann wichtig sein, wenn Sie lokale Variablen und aktivieren
sse2
Anweisungen).Wenn Sie die Standardeinstellung ändern, um z.B.
-mpreferred-stack-boundary=2
, dann wird GCC align stack-pointer auf 4-byte-Grenze. Dies verringert die stack-Anforderungen an Ihre Routinen, aber stürzt ab, wenn Sie Ihren code (oder code, den Sie nennen) hat Verwendungsse2
, so ist in der Regel nicht sicher.Es hat zu tun mit der byte-Grenzen, die das Programm verwendet, wenn es ist gelegt in Erinnerung.
Was ein stack-boundary=2 ist, ist sicherzustellen, dass der Stapel bis in die dword-Größe-Schritten, dies verhindert, dass Ihre Maschine von der Optimierung der stack.
Wenn Sie check out:
Einen Standard-stack-boundary-4 ist die gleiche für sowohl Intel 386 und-und AMD-x86-64-Maschinen.
Wenn ich versuche, verwenden Sie die "m-bevorzugte-stack-boundary=2-option" auf meinem 64-bit-linux-Maschine Zusammenstellung schlägt mit der Fehlermeldung
Dies ist, weil der Breite des Feldes Adresse wurde erhöht von 4 bytes, 8 bytes in 64-bit-Maschinen. Es kann also nicht schreiben, die einzelnen Teile zu einem stack-boundary=2, da 2^2=4 Byte. Allerdings, interessanterweise, ein stack-Grenze von 3 immer noch einen Fehler zurück, auf 32-und 64-bit-Maschinen, das wäre ein 8-byte-Grenze.
Kann ich nicht den link, weil ich nicht 10 Ruf...aber eine Suche Zeug ziemlich leicht
So weit wie ich kann sagen, es ist ein Sicherheits-feature, da 8 bytes ist anfällig für misaligning dem Stapel...kein Zweifel, jemand anderes weiß es besser, oder hat mehr Details.
Wie der Stapel falsch ausgerichtet habe
Sagt:
Recht, es ist nützlich -mpreferred-stack-boundary mit 2 leicht zu zerlegen, was Los ist, sonst wird es optimiert und schwer zu verfolgen, was Los ist auf dem stack. für 64-bit-Rechte benötigen Sie 4 mindestens