Wie Schreibe ich Einfache inline-asm-Anweisung von C auf Linux 64 bit?

Schreibe ich ein einfaches c-Programm, und meine Anforderung ist, drucken RIP(Instruction Pointer) von einigen Funktion des Programms. ich möchte nicht zu verwenden ptrace.

die eine Sache, die ich habe versucht, mit inline-asm ist:
asm("movl %%rip, %0;" : "=r"(val) )
dies sollte Kopie meines rip-register-Wert zu variable val, aber ich bin immer Kompilierungsfehler.

wenn ich mit ebp/esp, die base-pointer und stack-Pointer für 32-bit-Computer, i dont get any compilation Fehler und meine val hat einige Hexadezimalzahl zugewiesen.

ich habe paar Fragen hier:

1) meine Maschine ist 63 bit, wie oben Unterweisung in der Lage zu Lesen 32-bit-Register?

2) warum bin ich nicht in der Lage zu Lesen alle register für 64 bit, gibt es eine Ausgabe b'caz von 'r'?

3) wenn ich eip ist für die 32-bit bekomme ich Kompilierungsfehler, bedeutet das IP-Register sind beschränkt zum Lesen?

InformationsquelleAutor Sandeep P | 2010-07-27
Schreibe einen Kommentar