Rdtsc

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 29 decembrie 2019; verificările necesită 5 modificări .

rdtsc ( Read Time Stamp Counter ) este o instrucțiune de asamblare  pentru platformele x86 și x86_64 care citește contorul TSC ( Time Stamp Counter ) și returnează numărul de 64 de biți de cicluri de ceas în registrele EDX: EAX de la ultima resetare a procesorului .

rdtsc este acceptat pe procesoare Pentium (și compatibile) și mai noi. Opcode : 0F 31 [1] .

rdtscp [2] a fost acceptat de la Intel Nehalem și AMD Family 0x0F [3] . Opcode: 0F 01 F9 [4] .

Utilizare

rdtsc este cel mai frecvent utilizat:

Beneficii

În comparație cu API-urile furnizate de sistemul de operare precum WINAPI::QueryPerformanceCounter() sau gettimeofday() instrucțiunile rdtsc/rdtscp pot oferi următoarele avantaje:

Probleme de utilizare

Pentru a rezolva multe probleme, se recomandă fixarea firului de execuție pe un anumit procesor ( afinitate CPU ) și dezactivarea tehnologiilor de schimbare automată a frecvenței (tehnologii de economisire a energiei și modificări dinamice de performanță).

Note

  1. Manual pentru dezvoltatori de software pentru arhitecturi Intel® 64 și IA-32  . — Vol. 2 (Referință setului de instrucțiuni). - P. 4-301.
  2. O versiune de serializare a instrucțiunii rdtsc, care citește și IA32_TSC_AUX MSR, care stochează adesea numărul nucleului.
  3. rdtscp . Consultat la 1 noiembrie 2011. Arhivat din original pe 2 ianuarie 2012.
  4. Manual pentru dezvoltatori de software pentru arhitecturi Intel® 64 și IA-32  . — Vol. 2 (Referință setului de instrucțiuni). - P. 4-303.
  5. Referință Windows Anti-Debug | Comunitatea Symantec Connect . Data accesului: 30 decembrie 2011. Arhivat din original la 14 ianuarie 2012.
  6. Slide 58 Anti-Debugging bazat pe sincronizare Arhivat 4 martie 2012.
  7. Tom St. Denis, Simon Johnson, Criptografie pentru dezvoltatori Arhivat la 9 octombrie 2021 la Wayback Machine .
  8. Cum se optimizează pentru familia de microprocesoare Pentium Arhivat 6 ianuarie 2012 la Wayback Machine // 1996-2000 de Agner Fog. Capitolul „30. Viteza de testare”, arhivată 19 noiembrie 2011.
  9. Afinitatea ICE . Consultat la 19 octombrie 2011. Arhivat din original pe 7 septembrie 2011.

Link -uri