Frage

Ich mag mit dem Debug-WAZÜs in der x86-spec (DR0-7) definiert spielen, um von meinem OSX User-Space-Programm. Leider erfordern diese CPL == 0 (aka Ring 0). Ich habe durch die OSX syscalls und mit Ausnahme von kernel_debug nichts blätterte wirklich herausspringt als eine Möglichkeit, den Zugriff auf diese.

Es kann der Fall sein, dass sie über einige höhere Level-Schnittstelle wie kernel_debug nur verfügbar sind, aber es ist mir nicht klar, ob das der Fall ist, oder wenn ich nur nicht gefunden, die magische Anrufung sie zu erhalten.

Ihr Endziel die Funktionalität dieser Register zugreift, nicht die Register selbst. Hat jemand Einblick darüber, wie Dinge wie Set Hardware Breakpoints zu tun?

War es hilfreich?

Lösung

Es stellt sich heraus thread_get_state / thread_set_state ist die Antwort.

#include <mach/mach_types.h>

thread_t target = get_target_thread();
struct x86_debug_state dr;
mach_msg_type_number_t dr_count = x86_DEBUG_STATE_COUNT;

kern_return_t rc = thread_get_state(target, x86_DEBUG_STATE, &dr, &dr_count);    
printf("DR0: 0x%08x\n", dr.uds.ds32.__dr0);
printf("DR1: 0x%08x\n", dr.uds.ds32.__dr1);
printf("DR2: 0x%08x\n", dr.uds.ds32.__dr2);
printf("DR3: 0x%08x\n", dr.uds.ds32.__dr3);
printf("DR4: 0x%08x\n", dr.uds.ds32.__dr4);
printf("DR5: 0x%08x\n", dr.uds.ds32.__dr5);
printf("DR6: 0x%08x\n", dr.uds.ds32.__dr6);
printf("DR7: 0x%08x\n", dr.uds.ds32.__dr7);

Andere Tipps

Das ist so ziemlich der Punkt der Ring 0 Anweisungen. Sie sind nicht zugänglich von Anwenderseite .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top