2016-05-26 13 views
0

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?

+2

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

+0

Ich möchte nur Systemrufnummern speichern und neuen Systemaufruf hinzufügen, um 100 kürzlich verwendeten Systemaufruf anzuzeigen. Hast du eine bessere Idee? – hamid

+0

Wofür brauchen Sie diese? Wie wäre es mit 'strace'? PS: Vergiss nicht, dass du wahrscheinlich mehrere Kerne hast. – Jester

Antwort

1

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)

+0

danke für die antwort! Wenn ich ein Array in dieser Datei deklariere, wie kann ich darauf von meiner Syscall C-Funktion zugreifen? – hamid

+0

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