Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJb Evain <jbevain@gmail.com>2017-10-01 19:46:50 +0300
committerGitHub <noreply@github.com>2017-10-01 19:46:50 +0300
commit328ea67d86f01b4061c50571dd864a99f104ba02 (patch)
tree79402e4f281aaa694b7da7dadf7cf4ff5e80efdd
parent7dfa7b811adae4c0ac669f9abc116d2551341ad7 (diff)
parent5cde681b780d56a6734b0b6d510f891933fdc84f (diff)
Merge pull request #450 from erozenfeld/Win32Resources
Fix win32 resource processing.
-rw-r--r--Mono.Cecil.PE/Image.cs1
-rw-r--r--Mono.Cecil.PE/ImageReader.cs8
-rw-r--r--Mono.Cecil.PE/ImageWriter.cs22
3 files changed, 16 insertions, 15 deletions
diff --git a/Mono.Cecil.PE/Image.cs b/Mono.Cecil.PE/Image.cs
index 8160f94..d9d182a 100644
--- a/Mono.Cecil.PE/Image.cs
+++ b/Mono.Cecil.PE/Image.cs
@@ -39,6 +39,7 @@ namespace Mono.Cecil.PE {
public uint Timestamp;
public ModuleAttributes Attributes;
+ public DataDirectory Win32Resources;
public DataDirectory Debug;
public DataDirectory Resources;
public DataDirectory StrongName;
diff --git a/Mono.Cecil.PE/ImageReader.cs b/Mono.Cecil.PE/ImageReader.cs
index f36d2e5..63213f3 100644
--- a/Mono.Cecil.PE/ImageReader.cs
+++ b/Mono.Cecil.PE/ImageReader.cs
@@ -160,12 +160,18 @@ namespace Mono.Cecil.PE {
// ExportTable 8
// ImportTable 8
+
+ Advance (pe64 ? 56 : 40);
+
// ResourceTable 8
+
+ image.Win32Resources = ReadDataDirectory ();
+
// ExceptionTable 8
// CertificateTable 8
// BaseRelocationTable 8
- Advance (pe64 ? 88 : 72);
+ Advance (24);
// Debug 8
image.Debug = ReadDataDirectory ();
diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs
index 3fc689d..f69e134 100644
--- a/Mono.Cecil.PE/ImageWriter.cs
+++ b/Mono.Cecil.PE/ImageWriter.cs
@@ -87,21 +87,15 @@ namespace Mono.Cecil.PE {
void GetWin32Resources ()
{
- var rsrc = GetImageResourceSection ();
- if (rsrc == null)
- return;
-
- win32_resources = module.Image.GetReaderAt (rsrc.VirtualAddress, rsrc.SizeOfRawData, (s, reader) => new ByteBuffer (reader.ReadBytes ((int) s)));
- }
-
- Section GetImageResourceSection ()
- {
if (!module.HasImage)
- return null;
+ return;
- const string rsrc_section = ".rsrc";
+ DataDirectory win32_resources_directory = module.Image.Win32Resources;
+ var size = win32_resources_directory.Size;
- return module.Image.GetSection (rsrc_section);
+ if (size > 0) {
+ win32_resources = module.Image.GetReaderAt (win32_resources_directory.VirtualAddress, size, (s, reader) => new ByteBuffer (reader.ReadBytes ((int) s)));
+ }
}
public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable<Stream> stream)
@@ -846,10 +840,10 @@ namespace Mono.Cecil.PE {
void PatchResourceDataEntry (ByteBuffer resources)
{
- var old_rsrc = GetImageResourceSection ();
var rva = resources.ReadUInt32 ();
resources.position -= 4;
- resources.WriteUInt32 (rva - old_rsrc.VirtualAddress + rsrc.VirtualAddress);
+
+ resources.WriteUInt32 (rva - module.Image.Win32Resources.VirtualAddress + rsrc.VirtualAddress);
}
}
}