Beispiel #1
0
		public bool MapAndLoad(
            string ImageName,
            string DllPath,
            out LOADED_IMAGE LoadedImage,
            bool DotDll,
            bool ReadOnly)
			=> MapAndLoad(ImageName, DllPath, out LoadedImage, DotDll, ReadOnly);
Beispiel #2
0
            private void LoadImports(LOADED_IMAGE loadedImage)
            {
                var hMod = (void *)loadedImage.MappedAddress;

                if (hMod != null)
                {
                    uint size;
                    var  pImportDir =
                        (IMAGE_IMPORT_DESCRIPTOR *)
                        ImageDirectoryEntryToData(hMod, false,
                                                  IMAGE_DIRECTORY_ENTRY_IMPORT, out size);
                    if (pImportDir != null)
                    {
                        while (pImportDir->OriginalFirstThunk != 0)
                        {
                            try
                            {
                                var    szName = (char *)RvaToVa(loadedImage, pImportDir->Name);
                                string name   = Marshal.PtrToStringAnsi((IntPtr)szName);
                                var    pr     = new Tuple <string, List <string> >(name, new List <string>());
                                _imports.Add(pr);
                                var pThunkOrg = (THUNK_DATA *)RvaToVa(loadedImage, pImportDir->OriginalFirstThunk);
                                while (pThunkOrg->AddressOfData != IntPtr.Zero)
                                {
                                    uint ord;
                                    if ((pThunkOrg->Ordinal & 0x80000000) > 0)
                                    {
                                        ord = pThunkOrg->Ordinal & 0xffff;
                                    }
                                    else
                                    {
                                        var pImageByName =
                                            (IMAGE_IMPORT_BY_NAME *)RvaToVa(loadedImage, pThunkOrg->AddressOfData);

                                        if (
                                            !IsBadReadPtr(pImageByName, (uint)sizeof(IMAGE_IMPORT_BY_NAME)))
                                        {
                                            ord = pImageByName->Hint;
                                            var    szImportName = pImageByName->Name;
                                            string sImportName  = Marshal.PtrToStringAnsi((IntPtr)szImportName);
                                            pr.Item2.Add(sImportName);
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                    pThunkOrg++;
                                }
                            }
                            catch (AccessViolationException e) { }

                            pImportDir++;
                        }
                    }
                }
            }
 public static extern bool MapAndLoad(string imageName, string dllPath, out LOADED_IMAGE loadedImage, bool dotDll, bool readOnly);
            private void LoadImports(LOADED_IMAGE loadedImage)
            {
                var hMod = (void*)loadedImage.MappedAddress;

                if (hMod != null)
                {
                    uint size;
                    var pImportDir =
                        (IMAGE_IMPORT_DESCRIPTOR*)
                        ImageDirectoryEntryToData(hMod, false,
                                                            IMAGE_DIRECTORY_ENTRY_IMPORT, out size);
                    if (pImportDir != null)
                    {
                        while (pImportDir->OriginalFirstThunk != 0)
                        {
                            try
                            {
                                var szName = (char*)RvaToVa(loadedImage, pImportDir->Name);
                                string name = Marshal.PtrToStringAnsi((IntPtr)szName);
                                var pr = new Tuple<string, List<string>>(name, new List<string>());
                                _imports.Add(pr);
                                var pThunkOrg = (THUNK_DATA*)RvaToVa(loadedImage, pImportDir->OriginalFirstThunk);
                                while (pThunkOrg->AddressOfData != IntPtr.Zero)
                                {
                                    uint ord;
                                    if ((pThunkOrg->Ordinal & 0x80000000) > 0)
                                    {
                                        ord = pThunkOrg->Ordinal & 0xffff;
                                    }
                                    else
                                    {
                                        var pImageByName =
                                            (IMAGE_IMPORT_BY_NAME*)RvaToVa(loadedImage, pThunkOrg->AddressOfData);

                                        if (
                                            !IsBadReadPtr(pImageByName, (uint)sizeof(IMAGE_IMPORT_BY_NAME)))
                                        {
                                            ord = pImageByName->Hint;
                                            var szImportName = pImageByName->Name;
                                            string sImportName = Marshal.PtrToStringAnsi((IntPtr)szImportName);
                                            pr.Item2.Add(sImportName);
                                        }
                                        else
                                        {
                                            break;
                                        }
                                    }
                                    pThunkOrg++;
                                }
                            }
                            catch (AccessViolationException e) { }

                            pImportDir++;
                        }
                    }
                }
            }
 private static IntPtr RvaToVa(LOADED_IMAGE loadedImage, IntPtr rva)
 {
     return RvaToVa(loadedImage, (uint)(rva.ToInt32()));
 }
 private static IntPtr RvaToVa(LOADED_IMAGE loadedImage, uint rva)
 {
     return ImageRvaToVa(loadedImage.FileHeader, loadedImage.MappedAddress, rva, IntPtr.Zero);
 }
Beispiel #7
0
 public static extern bool UnMapAndLoad(
     ref LOADED_IMAGE LoadedImage);
Beispiel #8
0
 public static extern bool MapAndLoad(
     string ImageName,
     string DllPath,
     out LOADED_IMAGE LoadedImage,
     bool DotDll,
     bool ReadOnly);
Beispiel #9
0
    public void IntPtrGeneration()
    {
        LOADED_IMAGE image = default(LOADED_IMAGE);

        image.FileHeader_IntPtr = IntPtr.Zero;
    }
Beispiel #10
0
 private static extern bool MapAndLoad(string imageName, string dllPath, out LOADED_IMAGE loadedImage, bool dotDll, bool readOnly);
Beispiel #11
0
 public static extern bool UnMapAndLoad(
     ref LOADED_IMAGE LoadedImage);
Beispiel #12
0
 public static extern bool MapAndLoad(
     string ImageName,
     string DllPath,
     out LOADED_IMAGE LoadedImage,
     bool DotDll,
     bool ReadOnly);
Beispiel #13
0
 private static IntPtr RvaToVa(LOADED_IMAGE loadedImage, IntPtr rva)
 {
     return(RvaToVa(loadedImage, (uint)(rva.ToInt32())));
 }
Beispiel #14
0
 private static IntPtr RvaToVa(LOADED_IMAGE loadedImage, uint rva)
 {
     return(ImageRvaToVa(loadedImage.FileHeader, loadedImage.MappedAddress, rva, IntPtr.Zero));
 }
Beispiel #15
0
		public bool UnMapAndLoad(
            ref LOADED_IMAGE LoadedImage)
			=> UnMapAndLoad(ref LoadedImage);