ich bin neu in Assembly und im Linux Kernel. Ich möchte 100 vor kurzem für alle Prozesse verwendet zeigen. (strace
zeigt nur für einen Prozess.). dies zu tun, ich möchte ein Array mit 100 Index in arch/kernel/entry_64.s
deklarieren dann senden Sie die Speicheradresse zu C-Funktion meines Systemaufrufs und zeigen sie dem Benutzer, aber ich kann Array in Assembly nicht deklarieren. wie kann ich es tun?Variable in Assembly im Linux-Kernel deklarieren?
Antwort
Wenn Sie das Auditing nicht verwenden können, wie es ist, dann würde ich vorschlagen, den Auditing-Code-Pfad zu optimieren.
1) der Anruf bedingungslos machen, beispielsweise durch ein jmp auditsys
vor system_call_fastpath
2) Änderung audit_syscall_entry
nach Ihren Wünschen Einfügen (das Code C in kernel/auditsc.c)
danke für die antwort! Wenn ich ein Array in dieser Datei deklariere, wie kann ich darauf von meiner Syscall C-Funktion zugreifen? – hamid
Kennen Sie C? Erklären Sie es einfach global und verwenden Sie ein 'extern' in der anderen Datei. Sie können auch Ihre eigene Audit-Funktion in der anderen Datei erstellen und die Assembly so ändern, dass sie diese anstelle der ursprünglichen aufruft. – Jester
Lernen zu gehen, bevor Sie laufen. Es ist vielleicht nicht die beste Idee, mit dem Linux-Kernel zu hacken. Wie auch immer, Sie müssen wissen, welche Art von Elementen Sie in Ihrem Array speichern möchten. Sie können etwas wie 'array .space 100 * item_size' machen. Sie werden es wahrscheinlich auch in eine beschreibbare Sektion schreiben wollen. – Jester
Ich möchte nur Systemrufnummern speichern und neuen Systemaufruf hinzufügen, um 100 kürzlich verwendeten Systemaufruf anzuzeigen. Hast du eine bessere Idee? – hamid
Wofür brauchen Sie diese? Wie wäre es mit 'strace'? PS: Vergiss nicht, dass du wahrscheinlich mehrere Kerne hast. – Jester