PageRenderTime 107ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/source2/VSIP/Cosmos.VS.Debug/RegistersUC.xaml.cs

https://bitbucket.org/mvptracker/cosmos
C# | 74 lines | 51 code | 6 blank | 17 comment | 1 complexity | aac96c139f718ea3c84d98118f301e60 MD5 | raw file
Possible License(s): BSD-2-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. namespace Cosmos.VS.Debug {
  15. public partial class RegistersUC : UserControl {
  16. public RegistersUC() {
  17. InitializeComponent();
  18. }
  19. protected void UpdateRegisters(byte[] aData, int aOffset, Label a32, Label a16, Label a8Hi, Label a8Lo) {
  20. byte x8Lo = aData[aOffset];
  21. byte x8Hi = aData[aOffset + 1];
  22. SetLabel(a8Lo, x8Lo.ToString("X2"));
  23. SetLabel(a8Hi, x8Hi.ToString("X2"));
  24. SetLabel(a16, x8Hi.ToString("X2") + x8Lo.ToString("X2"));
  25. UpdateRegister32(aData, aOffset, a32);
  26. }
  27. protected void UpdateRegister32(byte[] aData, int aOffset, Label a32) {
  28. UInt32 x32 = (UInt32)
  29. (aData[aOffset + 3] << 24 |
  30. aData[aOffset + 2] << 16 |
  31. aData[aOffset + 1] << 8 |
  32. aData[aOffset]);
  33. SetLabel(a32, x32.ToString("X8"));
  34. }
  35. protected void SetLabel(Label aLabel, string aContent) {
  36. string xOldContent = (string)aLabel.Content;
  37. aLabel.Content = aContent;
  38. aLabel.Foreground = (xOldContent == aContent) ? Brushes.Black : Brushes.Red;
  39. }
  40. public void Update(byte[] aData) {
  41. //Push All
  42. // Temp = (ESP);
  43. // Push(EAX); 28
  44. // Push(ECX); 24
  45. // Push(EDX); 20
  46. // Push(EBX); 16
  47. // Push(Temp); 12 // Have to get from another source, ESP is already in DS when we pushall
  48. // Push(EBP); 8
  49. // Push(ESI); 4
  50. // Push(EDI); 0
  51. // We get them from bottom up, so we receive them in reverse order as shown above. That is 0-3 is EDI.
  52. //
  53. // Additional ones sent manually (at end, not from stack)
  54. // EIP 32
  55. //
  56. UpdateRegisters(aData, 28, lablEAX, lablAX, lablAH, lablAL);
  57. UpdateRegisters(aData, 16, lablEBX, lablBX, lablBH, lablBL);
  58. UpdateRegisters(aData, 24, lablECX, lablCX, lablCH, lablCL);
  59. UpdateRegisters(aData, 20, lablEDX, lablDX, lablDH, lablDL);
  60. //TODO: ESP
  61. UpdateRegister32(aData, 8, lablEBP);
  62. UpdateRegister32(aData, 4, lablESI);
  63. UpdateRegister32(aData, 0, lablEDI);
  64. UpdateRegister32(aData, 32, lablEIP);
  65. //TODO: Flags
  66. }
  67. }
  68. }