Monitorar registros da CPU

3

Estou procurando por essa ferramenta, para ver o estado dos registradores da CPU, eax, ebx, ecx, edx.

Eu descobri cpuid :

 eax in    eax      ebx      ecx      edx
00000000 0000000d 756e6547 6c65746e 49656e69
00000001 000206a7 06100800 1f9ae3bf bfebfbff
00000002 76035a01 00f0b0ff 00000000 00ca0000
00000003 00000000 00000000 00000000 00000000
00000004 00000000 00000000 00000000 00000000
00000005 00000040 00000040 00000003 00001120
00000006 00000077 00000002 00000009 00000000
00000007 00000000 00000000 00000000 00000000
00000008 00000000 00000000 00000000 00000000
00000009 00000000 00000000 00000000 00000000
0000000a 07300803 00000000 00000000 00000603
0000000b 00000000 00000000 0000002c 00000006
0000000c 00000000 00000000 00000000 00000000
0000000d 00000000 00000000 00000000 00000000
80000000 80000008 00000000 00000000 00000000
80000001 00000000 00000000 00000001 28100800
80000002 20202020 49202020 6c65746e 20295228
80000003 65726f43 294d5428 2d356920 30303532
80000004 5043204b 20402055 30332e33 007a4847
80000005 00000000 00000000 00000000 00000000
80000006 00000000 00000000 01006040 00000000
80000007 00000000 00000000 00000000 00000100
80000008 00003024 00000000 00000000 00000000

No entanto, ebx segunda linha está apenas a mudar.

  • 06100800
  • 04100800
  • 00100800
  • 02100800
  • 04100800

Nada mais.

É possível monitorar registros?

    
por Anomalous Awe 30.01.2014 / 03:28

3 respostas

3

Se você fosse olhar para os registros de trabalho em sua CPU, então você está correto eles vão mudar muito (muito).

Se você fosse escrever um programa para inspecionar e despejar o conteúdo dos registradores (e isso não é muito difícil se você souber C, linguagem assembler para sua cpu e como integrar os dois (veja o manual do GCC)), então você não os veria mudando (muito). Mesmo que eles sejam. Então, por que isso acontece?

Portanto, seu programa é executado, executa algum código (que configura os registradores para fazer o que quer que esteja fazendo). Este código, em seguida, mostra os registros, mas neste ponto os valores de registro já convergiram para o que eles precisam estar ao executar este código, então acabamos imprimindo os mesmos valores todas as vezes.

Como, sensatamente, olhamos para os registros?

Precisamos de uma coisa chamada depurador ou rastreador.

  • Um depurador permite que você defina um ponto de interrupção em algum lugar que você deseja examinar. Você pode definir pontos de interrupção em vários lugares.

  • Um rastreador registrará informações em pontos regulares, possivelmente após cada instrução. (Os rastreadores farão com que o programa funcione devagar, pois estarão gastando mais tempo rastreando a execução do programa real.)

Um depurador geralmente tem um rastreador. Um tipo de rastreador é o passo único, onde você diz ao programa para fazer uma instrução. Outra é dizer para rastrear (executar e registrar informações de rastreio em um arquivo).

    
por 15.01.2017 / 14:29
2

O comando cpuid não faz o que você acha que faz. Consulte o artigo CPUID da Wikipédia .

A primeira coluna (a que mais conta) é o valor em eax antes da instrução cpuid ser executada, as outras colunas são os valores dos respectivos registros depois. Portanto, os valores nos registros representam as mesmas informações de ID que você obtém ao executar cpuid sem -r e, portanto, não serão alterados, a menos que você altere a CPU.

Da Wikipedia:

EAX=1: … EBX[bits 31:24]) is used to identify the executing logical processor.”

[Se ele mostra n estados diferentes, e você tem n núcleos, então isso faria sentido.]

Nota : Esta não é uma resposta de como fazer o que você quer, mas de por que o que você está fazendo não faz o que você quer. Veja minha outra resposta, sobre como fazer o que você quer.

    
por 15.01.2017 / 14:56
0

Eu executei o seguinte comando e também não vi alterações.

$ watch -d "cpuid -r"

Eu usei esta versão:

$ cpuid --version
cpuid version 20130610
    
por 30.01.2014 / 04:27