Pergunta

Eu corro MSIL dentro do Visual Studio ou via MDBG.

Existe alguma maneira de exibir o conteúdo da pilha MSIL?

por exemplo. se eu executar ldloc "alguma variável", há alguma maneira de olhar para a pilha e vendo que a variável está agora na pilha.

Eu estou presumindo que a pilha MSIL não é o mesmo que a pilha de CPU ou seja, a memória apontada pelo registrador SP?

Foi útil?

Solução

No momento da execução, há realmente não é qualquer pilha "MSIL". Mesmo no modo de depuração do código que é executado é sempre JIT compilado. O processo de JIT compilar MSIL "achata"-lo a partir de uma máquina de pilha virtual em código assembléia ordinária para a plataforma que está sendo executado. Isso ldloc.0 meios pode acabar sendo traduzido para algo como mov eax, [sp + 4], ou mesmo um não-op, se o valor já estava em torno de mentir em um registrador. Se você quiser depurar o ldloc instrução específica, então você tem que olhar para ele na dissasembly para ver o que o ldoloc foi traduzido para e onde é realmente carregar os dados a partir.

As ferramentas WinDbg + SoS (mencionados em outro post) irá ajudá-lo a ver a pilha de CPU, a partir de uma perspectiva de código gerenciado . Eles não permitirá que você, no entanto, para ver a pilha "MSIL" porque não há um para ver.

Outras dicas

Você pode fazer isso e muito mais usando WinDbg + SoS. Verificação esta pergunta para referências sobre como usar WinDbg.

scroll top