S
[...]each time you call PLT entry, ensure ebx contains address of your GOT. And remember tht ebx is callee-saved register[...]
mit anderen worten wenn du position independent code, also zum beispiel dynamische bibliotheken mit inline assembler erzeugst, musst du sicher stellen, dass ebx/rbx unangetastet bleibt, bzw. der ursprüngliche wert vor dem return wiederhergestellt wird. als raus damit aus der clobber list, in der du ja alle register aufführst, deren inhalt verändert wird. es sei denn cpuid benutzt es als rückgabe register, da bin ich mir jetzt nicht sicher. falls, dann sichere rbx vorher in ein anderes register und stelle es nach rdtsc wieder her. ansonsten bleibt noch zu sagen das der tsc bei multiprozessor/multikernprozessor systemen und bei systemen mit dynamischer taktfrequenzverwaltung (z.b. mit cpufreq unter linux) sehr unzuverlässig ist. von daher nutze wirklich lieber die bereitgestellten funktionen des betriebssystems, da sie in der regel per default den höchstauflösenden timer im system benutzten (z.b. HPET, wobei das unter linux auch noch etwas buggered is :().