PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

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

https://bitbucket.org/mvptracker/cosmos
C# | 93 lines | 70 code | 6 blank | 17 comment | 0 complexity | b7f93ac4af4f27305cbef556be804396 MD5 | raw file
Possible License(s): BSD-2-Clause
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.ComponentModel.Design;
  6. using System.Data;
  7. using System.Linq;
  8. using System.Runtime.InteropServices;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Windows;
  12. using System.Windows.Controls;
  13. using System.Windows.Data;
  14. using System.Windows.Documents;
  15. using System.Windows.Input;
  16. using System.Windows.Media;
  17. using System.Windows.Media.Imaging;
  18. using System.Windows.Navigation;
  19. using System.Windows.Shapes;
  20. using System.Windows.Threading;
  21. using Cosmos.Debug.Common;
  22. using Microsoft.VisualStudio.Shell;
  23. using Microsoft.VisualStudio.Shell.Interop;
  24. namespace Cosmos.VS.Windows {
  25. [Guid("CE2A2D0F-0F1B-4A1F-A9AC-5A5F2A5E2C25")]
  26. public class RegistersTW : ToolWindowPane2 {
  27. public RegistersTW() {
  28. Caption = "Cosmos x86 Registers";
  29. BitmapResourceID = 301;
  30. BitmapIndex = 1;
  31. mUserControl = new RegistersUC();
  32. Content = mUserControl;
  33. }
  34. }
  35. public partial class RegistersUC : DebuggerUC {
  36. public RegistersUC() {
  37. InitializeComponent();
  38. }
  39. protected void UpdateRegisters(byte[] aData, int aOffset, DataBytesUC a32, DataBytesUC a16, DataBytesUC a8Hi, DataBytesUC a8Lo) {
  40. a8Lo.Value = aData[aOffset];
  41. a8Hi.Value = aData[aOffset + 1];
  42. a16.Value = a8Hi.Value << 8 | a8Lo.Value;
  43. UpdateRegister32(aData, aOffset, a32);
  44. }
  45. protected void UpdateRegister32(byte[] aData, int aOffset, DataBytesUC a32) {
  46. UInt32 x32 = (UInt32)
  47. (aData[aOffset + 3] << 24 |
  48. aData[aOffset + 2] << 16 |
  49. aData[aOffset + 1] << 8 |
  50. aData[aOffset]);
  51. a32.Value = x32;
  52. }
  53. protected override void DoUpdate(string aTag) {
  54. //Push All
  55. // Temp = (ESP);
  56. // Push(EAX); 28
  57. // Push(ECX); 24
  58. // Push(EDX); 20
  59. // Push(EBX); 16
  60. // Push(Temp); 12 // Have to get from another source, ESP is already in DS when we pushall
  61. // Push(EBP); 8
  62. // Push(ESI); 4
  63. // Push(EDI); 0
  64. // We get them from bottom up, so we receive them in reverse order as shown above. That is 0-3 is EDI.
  65. //
  66. // Additional ones sent manually (at end, not from stack)
  67. // ESP 32
  68. // EIP 36
  69. //
  70. System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal,
  71. (Action)delegate()
  72. {
  73. UpdateRegisters(mData, 28, dataEAX, dataAX, dataAH, dataAL);
  74. UpdateRegisters(mData, 16, dataEBX, dataBX, dataBH, dataBL);
  75. UpdateRegisters(mData, 24, dataECX, dataCX, dataCH, dataCL);
  76. UpdateRegisters(mData, 20, dataEDX, dataDX, dataDH, dataDL);
  77. UpdateRegister32(mData, 8, dataEBP);
  78. UpdateRegister32(mData, 4, dataESI);
  79. UpdateRegister32(mData, 0, dataEDI);
  80. UpdateRegister32(mData, 32, dataESP);
  81. UpdateRegister32(mData, 36, dataEIP);
  82. }
  83. );
  84. //TODO: Flags
  85. }
  86. }
  87. }