private void button1_Click(object sender, EventArgs e) { try { object[] parts = new object[dataGridView1.Rows.Count]; for (int i = 0; i < dataGridView1.Rows.Count; i++) { DataGridViewRow row = dataGridView1.Rows[i]; switch (row.Cells[2].Value.ToString()) { case "Byte": parts[i] = byte.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; case "UInt16": parts[i] = ushort.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; case "UInt32": parts[i] = uint.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; case "UInt64": parts[i] = ulong.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; } } MetaDataRow newrow = new MetaDataRow(mdrow.Offset, parts); mdrow = newrow; DialogResult = System.Windows.Forms.DialogResult.OK; Close(); } catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); } }
internal MetaDataMember CreateMember(Type type, MetaDataRow row, MetaDataTableType table, int index) { MetaDataMember member = (MetaDataMember)Activator.CreateInstance(type, row); member._table = table; member._netheader = tablesHeap._netheader; member._metadatatoken = (uint)(((int)table) << 24 | index); return member; }
private void AppendMetaDataRow(TablesHeap tablesHeap, MetaDataRow row) { foreach (var part in row.Parts) { if (Marshal.SizeOf(part) == sizeof(uint)) tablesHeap._binWriter.Write((uint)part); else if (Marshal.SizeOf(part) == sizeof(ushort)) tablesHeap._binWriter.Write((ushort)part); else if (Marshal.SizeOf(part) == sizeof(byte)) tablesHeap._binWriter.Write((byte)part); else throw new ArgumentException("Invalid MetaData Row"); } }
public RowEditorDlg(MetaDataRow mdrow) { this.mdrow = mdrow; InitializeComponent(); for (int i = 0; i < mdrow.Parts.Length; i++) { DataGridViewRow row = new DataGridViewRow(); row.Cells.Add(new DataGridViewTextBoxCell() { Value = i.ToString() }); row.Cells.Add(new DataGridViewTextBoxCell() { Value = (Convert.ToUInt64(mdrow.Parts[i])).ToString("X" +(Marshal.SizeOf(mdrow.Parts[i]))*2) }); DataGridViewComboBoxCell cbox = new DataGridViewComboBoxCell(); cbox.Items.Add("Byte"); cbox.Items.Add("UInt16"); cbox.Items.Add("UInt32"); cbox.Items.Add("UInt64"); cbox.Value = mdrow.Parts[i].GetType().Name; row.Cells.Add(cbox); dataGridView1.Rows.Add(row); } }
internal MetaDataRow ReadRow(byte[] parts) { MetaDataRow row = new MetaDataRow(); row.parts = new object[parts.Length]; row.offset = (uint)(reader.BaseStream.Position + stream.streamoffset); for (int i = 0; i< parts.Length;i++) { if (parts[i] == sizeof(uint)) row.parts[i] = reader.ReadUInt32(); else if (parts[i] == sizeof(ushort)) row.parts[i] = reader.ReadUInt16(); else if (parts[i] == sizeof(byte)) row.parts[i] = reader.ReadByte(); } return row; }
private void SetMetaDataRow(MetaDataRow row) { dataGridView.Rows.Clear(); if (row.Parts == null) return; for (int i = 0; i < row.Parts.Length; i++) { DataGridViewRow drow = new DataGridViewRow(); string value = string.Empty; switch (row.Parts[i].GetType().Name) { case "Byte": value = ((byte)row.Parts[i]).ToString("X2"); break; case "UInt16": value = ((ushort)row.Parts[i]).ToString("X4"); break; case "UInt32": value = ((uint)row.Parts[i]).ToString("X8"); break; case "UInt64": value = ((ulong)row.Parts[i]).ToString("X16"); break; } drow.Cells.Add(new DataGridViewTextBoxCell() { Value = i.ToString() }); drow.Cells.Add(new DataGridViewTextBoxCell() { Value = value }); drow.Cells.Add(new DataGridViewTextBoxCell() { Value = row.Parts[i].GetType().Name }); dataGridView.Rows.Add(drow); } }
void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try { ValueType[] parts = new ValueType[dataGridView.Rows.Count]; for (int i = 0; i < dataGridView.Rows.Count; i++) { DataGridViewRow row = dataGridView.Rows[i]; switch (row.Cells[2].Value.ToString()) { case "Byte": parts[i] = byte.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; case "UInt16": parts[i] = ushort.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; case "UInt32": parts[i] = uint.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; case "UInt64": parts[i] = ulong.Parse(row.Cells[1].Value.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); break; } } MetaDataRow newrow = new MetaDataRow(currentMember.MetaDataRow.Offset, parts); currentMember.MetaDataRow = newrow; currentMember.ClearCache(); currentMember.ApplyChanges(); propertyGrid.Refresh(); } catch (Exception ex) { MessageBox.Show("An error occured. " + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private bool GetRowAndType(BinaryReader reader, MetaDataTable table, out MetaDataRow row, out Type type) { type = null; row = default(MetaDataRow); switch (table.Type) { case MetaDataTableType.Module: row = ReadRow(reader, GetModuleSignature()); type = typeof(ModuleDefinition); break; case MetaDataTableType.TypeRef: row = ReadRow(reader, GetTypeRefSignature()); type = typeof(TypeReference); break; case MetaDataTableType.TypeDef: row = ReadRow(reader, GetTypeDefSignature()); type = typeof(TypeDefinition); break; case MetaDataTableType.FieldPtr: row = ReadRow(reader, GetFieldPtrSignature()); type = typeof(FieldPtr); break; case MetaDataTableType.Field: row = ReadRow(reader, GetFieldDefSignature()); type = typeof(FieldDefinition); break; case MetaDataTableType.MethodPtr: row = ReadRow(reader, GetMethodPtrSignature()); type = typeof(MethodPtr); break; case MetaDataTableType.Method: row = ReadRow(reader, GetMethodDefSignature()); type = typeof(MethodDefinition); break; case MetaDataTableType.ParamPtr: row = ReadRow(reader, GetParamPtrSignature()); type = typeof(ParamPtr); break; case MetaDataTableType.Param: row = ReadRow(reader, GetParamDefSignature()); type = typeof(ParameterDefinition); break; case MetaDataTableType.InterfaceImpl: row = ReadRow(reader, GetInterfaceImplSignature()); type = typeof(InterfaceImplementation); break; case MetaDataTableType.MemberRef: row = ReadRow(reader, GetMemberRefSignature()); tablesHeap._netheader.BlobHeap._mainStream.Seek(Convert.ToUInt32(row._parts[2]), SeekOrigin.Begin); tablesHeap._netheader.BlobHeap._binReader.ReadByte(); byte sigtype = tablesHeap._netheader.BlobHeap._binReader.ReadByte(); if (sigtype == 0x6) type = typeof(FieldReference); else type = typeof(MethodReference); break; case MetaDataTableType.Constant: row = ReadRow(reader, GetConstantSignature()); type = typeof(Constant); break; case MetaDataTableType.CustomAttribute: row = ReadRow(reader, GetCustomAttributeSignature()); type = typeof(CustomAttribute); break; case MetaDataTableType.FieldMarshal: row = ReadRow(reader, GetFieldMarshalSignature()); type = typeof(FieldMarshal); break; case MetaDataTableType.DeclSecurity: row = ReadRow(reader, GetSecurityDeclSignature()); type = typeof(SecurityDeclaration); break; case MetaDataTableType.ClassLayout: row = ReadRow(reader, GetClassLayoutSignature()); type = typeof(ClassLayout); break; case MetaDataTableType.FieldLayout: row = ReadRow(reader, GetFieldLayoutSignature()); type = typeof(FieldLayout); break; case MetaDataTableType.StandAloneSig: row = ReadRow(reader, GetStandAloneSigSignature()); type = typeof(StandAloneSignature); break; case MetaDataTableType.EventMap: row = ReadRow(reader, GetEventMapSignature()); type = typeof(EventMap); break; case MetaDataTableType.Event: row = ReadRow(reader, GetEventDefSignature()); type = typeof(EventDefinition); break; case MetaDataTableType.PropertyMap: row = ReadRow(reader, GetPropertyMapSignature()); type = typeof(PropertyMap); break; case MetaDataTableType.PropertyPtr: row = ReadRow(reader, GetPropertyPtrSignature()); type = typeof(PropertyPtr); break; case MetaDataTableType.Property: row = ReadRow(reader, GetPropertyDefSignature()); type = typeof(PropertyDefinition); break; case MetaDataTableType.MethodSemantics: row = ReadRow(reader, GetMethodSemanticsSignature()); type = typeof(MethodSemantics); break; case MetaDataTableType.MethodImpl: row = ReadRow(reader, GetMethodImplSignature()); type = typeof(MethodImplementation); break; case MetaDataTableType.ModuleRef: row = ReadRow(reader, GetModuleRefSignature()); type = typeof(ModuleReference); break; case MetaDataTableType.TypeSpec: row = ReadRow(reader, GetTypeSpecSignature()); type = typeof(TypeSpecification); break; case MetaDataTableType.MethodSpec: row = ReadRow(reader, GetMethodSpecSignature()); type = typeof(MethodSpecification); break; case MetaDataTableType.ImplMap: row = ReadRow(reader, GetPInvokeImplSignature()); type = typeof(PInvokeImplementation); break; case MetaDataTableType.FieldRVA: row = ReadRow(reader, GetFieldRVASignature()); type = typeof(FieldRVA); break; case MetaDataTableType.Assembly: row = ReadRow(reader, GetAssemblyDefSignature()); type = typeof(AssemblyDefinition); break; case MetaDataTableType.AssemblyProcessor: row = ReadRow(reader, GetAssemblyProcSignature()); type = typeof(AssemblyProcessor); break; case MetaDataTableType.AssemblyOS: row = ReadRow(reader, GetAssemblyOSSignature()); type = typeof(AssemblyOS); break; case MetaDataTableType.AssemblyRef: row = ReadRow(reader, GetAssemblyRefSignature()); type = typeof(AssemblyReference); break; case MetaDataTableType.AssemblyRefProcessor: row = ReadRow(reader, GetAssemblyRefProcSignature()); type = typeof(AssemblyRefProcessor); break; case MetaDataTableType.AssemblyRefOS: row = ReadRow(reader, GetAssemblyRefOSSignature()); type = typeof(AssemblyRefOS); break; case MetaDataTableType.File: row = ReadRow(reader, GetFileReferenceSignature()); type = typeof(File); break; case MetaDataTableType.ExportedType: row = ReadRow(reader, GetExportedTypeSignature()); type = typeof(ExportedType); break; case MetaDataTableType.ManifestResource: row = ReadRow(reader, GetManifestResSignature()); type = typeof(ManifestResource); break; case MetaDataTableType.NestedClass: row = ReadRow(reader, GetNestedClassSignature()); type = typeof(NestedClass); break; case MetaDataTableType.EncLog: row = ReadRow(reader, GetEnCLogSignature()); type = typeof(EnCLog); break; case MetaDataTableType.EncMap: row = ReadRow(reader, GetEnCMapSignature()); type = typeof(EnCMap); break; case MetaDataTableType.GenericParam: row = ReadRow(reader, GetGenericParamSignature()); type = typeof(GenericParameter); break; case MetaDataTableType.GenericParamConstraint: row = ReadRow(reader, GetGenericParamConstraintSignature()); type = typeof(GenericParamConstraint); break; } return type != null; }
internal MetaDataRow ReadRow(BinaryReader reader, byte[] signature) { MetaDataRow row = new MetaDataRow(); row._parts = new ValueType[signature.Length]; row.NETHeader = tablesHeap._netheader; row._offset = (uint)(reader.BaseStream.Position + tablesHeap.StreamOffset); for (int i = 0; i< signature.Length;i++) { if (signature[i] == sizeof(uint)) row._parts[i] = reader.ReadUInt32(); else if (signature[i] == sizeof(ushort)) row._parts[i] = reader.ReadUInt16(); else if (signature[i] == sizeof(byte)) row._parts[i] = reader.ReadByte(); } return row; }