Ich untersuche einige Abstürze, die alle das Signal SIGSEGV mit der Ursache SEGV_ACCERR haben. Nachdem ich nach SEGV_ACCERR gesucht habe, habe ich einer menschenlesbaren Erklärung am nächsten gefunden: Ungültige Berechtigungen für Objekt
Was bedeutet das in einem allgemeineren Sinn? Wann würde ein SEGV_ACCERR auftreten? Gibt es genauere Unterlagen zu diesem Grund?
Dies In der Quelle heißt es “Ungültige Berechtigungen für zugeordnetes Objekt”. Ich vermute, das bedeutet, dass Sie versuchen, etwas mit einer markierten Region zu tun, was Sie nicht tun dürfen.
Warum musst du das wissen? Erleben Sie seltsame Abstürze eines Programms? Falls ja, überprüfen Sie die Art und Weise, wie es mit dem Speicher umgeht, führen Sie es wahrscheinlich mit einem Speicherprüfer wie zum Beispiel Valgrind aus: valgrind.org
– alk
1. Oktober 2013 um 17:30 Uhr
Auf welcher Plattform siehst du das?
– Doug Richardson
18. Februar 2014 um 23:36 Uhr
Zu Ihrer Information, ich sehe normalerweise CFNetwork Rahmenabsturz mit SEGV_ACCERR Code, wenn dem Gerät der Speicher ausgeht.
– Murat
20. März 2014 um 9:04 Uhr
jjxtra
Dies ist ein Fehler, den ich meistens auf 64-Bit-iOS-Geräten gesehen habe und der auftreten kann, wenn mehrere Threads eine Variable unter ARC lesen und ändern. Zum Beispiel habe ich heute einen Absturz behoben, bei dem mehrere Hintergrund-Threads eine statische NSDate- und NSString-Variable gelesen und verwendet und sie aktualisiert haben, ohne irgendeine Art von Sperrung oder Warteschlange durchzuführen.
Die Verwendung von Kerndatenobjekten in mehreren Threads kann ebenfalls diesen Absturz verursachen, wie ich viele Male in meinen Absturzprotokollen gesehen habe.
Ich verwende auch Crittercism, und dieser spezielle Absturz war ein SEGV_ACCERR, der nur 64-Bit-Geräte betraf.
Ist Ihnen eine Dokumentation bekannt? Ungültige Berechtigungen für das Objekt scheinen gut zu dem zu passen, was Sie beschreiben.
– Saltimule
17. September 2014 um 15:50 Uhr
@Dan_Gabicoware Ich kenne keine Dokumentation, erscheint mir nur logisch. Wir hatten mehrere SEGV_ACCERR-Abstürze, und alle scheinen schlechte Zeigerprobleme / Kerndatenprobleme auf nur 64-Bit-Geräten zu sein.
– jjxtra
17. September 2014 um 15:51 Uhr
In unseren Crittercism-Protokollen treten dieser Absturz (oder Versionen dieses Absturzes) nicht nur bei 64-Bit-Geräten auf. Tatsächlich ist eine der Versionen ausschließlich auf älterer Hardware und endet beim iPad 3. Die andere ist auf vollständiger Hardware. Beide sind jedoch ausschließlich ios 8, während andere Abstürze eine breite Palette älterer ios-Versionen umfassen.
– Rätsel
22. Januar 2015 um 21:51 Uhr
Germinolegrand
Wie in der Manpage von angegeben sigaktion, SEGV_ACCERR ist ein Signalcode für SIGSEGV, der spezifiziert Ungültige Berechtigungen für zugeordnetes Objekt. Im Gegensatz zu SEGV_MAPERR, was bedeutet, dass die Adresse keinem gültigen Objekt zugeordnet ist, bedeutet SEGV_ACCERR, dass die Adresse zu einem Objekt passt, aber sicher weder das gute ist, noch eines, auf das der Prozess zugreifen darf.
Lassen Sie sich nicht verwirren: „Objekt“ bedeutet in diesem Fall kein Swift- oder Obj-C- oder C++-Objekt, sondern ein Kernel-Speicherobjekt, dh ein Bereich von Adressräumen. Der Fehler bedeutet, dass versucht wurde, eine Speicheradresse auf eine nicht zulässige Weise zu verwenden, dh in den Nur-Lese-Speicher zu schreiben oder Code aus einem nicht ausführbaren Speicher auszuführen.
– Jens Alfke
1. Juli 2019 um 19:28 Uhr
Ich habe dies in Fällen gesehen, in denen Code versucht, von anderen Stellen als “Text” auszuführen.
Wenn Ihr Zeiger beispielsweise auf eine Funktion im Heap oder Stack zeigt und Sie versuchen, diesen Code (vom Heap oder Stack) auszuführen, löst die CPU diese Ausnahme aus.
so war youtube versuchen um mich durch Chrom zu hacken?! 🙂
– Benutzer11509478
22. September 2019 um 0:04 Uhr
Es ist möglich, eine zu bekommen SEGV_ACCERR aufgrund eines Paketüberfluss. Konkret ist mir das auf Android ARM64 mit folgendem passiert:
VeryLargeStruct s;
s = {}; // SEGV_ACCERR
Es scheint, dass die Null-Initialisierung eine temporäre Datei erstellt hat, die einen Stapelüberlauf verursacht hat. Dies geschah nur mit -O0; vermutlich wurde das Temporäre bei höheren Optimierungsstufen wegoptimiert.
Auf Android arm64, wenn stack.cpp Folgendes enthält:
struct VeryLargeStruct {
int array[4096*4096];
};
int main() {
struct VeryLargeStruct s;
s = {};
}
Dies In der Quelle heißt es “Ungültige Berechtigungen für zugeordnetes Objekt”. Ich vermute, das bedeutet, dass Sie versuchen, etwas mit einer markierten Region zu tun, was Sie nicht tun dürfen.
– Linuxios
1. Oktober 2013 um 15:18 Uhr
Hilft das?? h30499.www3.hp.com/t5/Languages-and-Scripting/…
– Rahul Tripathi
1. Oktober 2013 um 15:22 Uhr
Warum musst du das wissen? Erleben Sie seltsame Abstürze eines Programms? Falls ja, überprüfen Sie die Art und Weise, wie es mit dem Speicher umgeht, führen Sie es wahrscheinlich mit einem Speicherprüfer wie zum Beispiel Valgrind aus: valgrind.org
– alk
1. Oktober 2013 um 17:30 Uhr
Auf welcher Plattform siehst du das?
– Doug Richardson
18. Februar 2014 um 23:36 Uhr
Zu Ihrer Information, ich sehe normalerweise
CFNetwork
Rahmenabsturz mitSEGV_ACCERR
Code, wenn dem Gerät der Speicher ausgeht.– Murat
20. März 2014 um 9:04 Uhr