Kann NetLink nicht in eine SO -Bibliothek für direkte Verwendung durch eine APK zusammengestellt werden?Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Kann NetLink nicht in eine SO -Bibliothek für direkte Verwendung durch eine APK zusammengestellt werden?

Post by Anonymous »

Ich versuche, Kernel -Nachrichten in einem UserSpace -Programm über ein benutzerdefiniertes NetLink -Protokoll zu empfangen. Rufen Sie beispielsweise den Plug-In- und Auszugsstatus der DP-Schnittstelle und die Informationen der angeschlossenen Geräte ab. Wenn ich den Userspace -Code in eine ausführbare Datei zusammenstelle und direkt im Android -Gerät ausführt, funktioniert er korrekt und empfängt Kernel -Nachrichten. Die Registrierung des benutzerdefinierten Protokolls im Kernel -Teil wurde abgeschlossen, weshalb das ausführbare Programm die Informationen überwachen kann. Wenn ich jedoch denselben Benutzerspace -Code in eine gemeinsam genutzte Bibliothek (.SO) für einen APK zusammenstellen kann, begegne ich einen Laufzeitfehler im Bind -Schritt:

Code: Select all

Error message: bind error: Operation not permitted。
[/b] Kann NetLink nicht in eine SO -Bibliothek für direkte Verwendung durch eine APK (kompiliert werden. Die Bibliothek hat also keinen Prozess.)? Wie kann ich dieses Problem beheben und beheben? < /P>
Ich habe festgestellt

Code: Select all

bind()
Funktion auf

Code: Select all

NETLINK_ROUTE
[/b] Sockets. Interessanterweise stellte ich fest, dass die Bindung an Standardprotokolle bei der Targeting von SDK 32 ordnungsgemäß funktioniert.

Code: Select all

bind()
works without errors in both cases:
  • As a standalone executable
  • When compiled into a shared library (.so) called by an APK

Code: Select all

struct sockaddr_nl sa;
memset(&sa, 0, sizeof(sa));
sa.nl_family = PF_NETLINK;
sa.nl_groups = 1;

fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
bind(fd, (struct sockaddr *) &sa, sizeof(sa));
< /code>
Mit einem [b] benutzerdefinierten Protokoll (netlink_test) < /strong>: < /p>
[list]
[*]  Es treten keine Fehler auf, die in der ausführbaren Ausführungsleistung < /p>
< /li>   die  < /p>
< /li>   Die  -An> auftreten..so
[/b] vom APK aufgerufene Bibliothek fällt mit fehl

Code: Select all

bind()
[/b] Fehler

[/list]
struct sockaddr_nl sa;
memset(&sa, 0, sizeof(sa));
sa.nl_family = PF_NETLINK;
sa.nl_groups = 1;

fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_TEST);
bind(fd, (struct sockaddr *) &sa, sizeof(sa));
< /code>
1.at Erstens erstellen sogar ein Socket einen Fehler. Später hat die Ausführung "ADB Shell SetEnforce 0" dieses Problem behoben. Aber der Bindungsfehler bleibt weiterhin bestehen. Ich habe dieser privilegierten App die Berechtigung von Local_Mac_address hinzugefügt, aber es hat nicht funktioniert.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post