Mono.Cecil.PE.TextMap.GetNextRVA C# (CSharp) Метод

GetNextRVA() публичный Метод

public GetNextRVA ( TextSegment segment ) : UInt32
segment TextSegment
Результат System.UInt32
        public RVA GetNextRVA(TextSegment segment)
        {
            var i = (int) segment;
            return map [i].Start + map [i].Length;
        }

Usage Example

Пример #1
0
        private void BuildTextMap()
        {
            TextMap textMap = text_map;

            textMap.AddMap(TextSegment.Code, metadata.code.length, (!pe64) ? 4 : 16);
            textMap.AddMap(TextSegment.Resources, metadata.resources.length, 8);
            textMap.AddMap(TextSegment.Data, metadata.data.length, 4);
            if (metadata.data.length > 0)
            {
                metadata.table_heap.FixupData(textMap.GetRVA(TextSegment.Data));
            }
            textMap.AddMap(TextSegment.StrongNameSignature, GetStrongNameLength(), 4);
            BuildMetadataTextMap();
            int length = 0;

            if (debug_header != null && debug_header.HasEntries)
            {
                int num  = debug_header.Entries.Length * 28;
                int num2 = (int)textMap.GetNextRVA(TextSegment.BlobHeap) + num;
                int num3 = 0;
                for (int i = 0; i < debug_header.Entries.Length; i++)
                {
                    ImageDebugHeaderEntry imageDebugHeaderEntry = debug_header.Entries[i];
                    ImageDebugDirectory   directory             = imageDebugHeaderEntry.Directory;
                    directory.AddressOfRawData      = ((imageDebugHeaderEntry.Data.Length != 0) ? num2 : 0);
                    imageDebugHeaderEntry.Directory = directory;
                    num3 += imageDebugHeaderEntry.Data.Length;
                    num2 += num3;
                }
                length = num + num3;
            }
            textMap.AddMap(TextSegment.DebugDirectory, length, 4);
            if (!has_reloc)
            {
                uint nextRVA = textMap.GetNextRVA(TextSegment.DebugDirectory);
                textMap.AddMap(TextSegment.ImportDirectory, new Range(nextRVA, 0u));
                textMap.AddMap(TextSegment.ImportHintNameTable, new Range(nextRVA, 0u));
                textMap.AddMap(TextSegment.StartupStub, new Range(nextRVA, 0u));
            }
            else
            {
                uint nextRVA2 = textMap.GetNextRVA(TextSegment.DebugDirectory);
                uint num4     = nextRVA2 + 48;
                num4 = (uint)((int)(num4 + 15) & -16);
                uint num5 = num4 - nextRVA2 + 27;
                uint num6 = nextRVA2 + num5;
                num6 = (uint)((module.Architecture == TargetArchitecture.IA64) ? ((int)(num6 + 15) & -16) : (2 + ((int)(num6 + 3) & -4)));
                textMap.AddMap(TextSegment.ImportDirectory, new Range(nextRVA2, num5));
                textMap.AddMap(TextSegment.ImportHintNameTable, new Range(num4, 0u));
                textMap.AddMap(TextSegment.StartupStub, new Range(num6, GetStartupStubLength()));
            }
        }
All Usage Examples Of Mono.Cecil.PE.TextMap::GetNextRVA