Skip to content

Commit 398499a

Browse files
committed
Merge branch 'master' of https://github.com/KN4CK3R/ReClass.NET
2 parents 19cd533 + 720907e commit 398499a

18 files changed

+393
-100
lines changed

CodeGenerator/CSharpCodeGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Text;
66
using ReClassNET.Logger;
77
using ReClassNET.Nodes;
8+
using ReClassNET.Util;
89

910
namespace ReClassNET.CodeGenerator
1011
{
@@ -84,7 +85,7 @@ private IEnumerable<MemberDefinition> YieldMemberDefinitions(IEnumerable<BaseNod
8485
Contract.Ensures(Contract.Result<IEnumerable<MemberDefinition>>() != null);
8586
Contract.Ensures(Contract.ForAll(Contract.Result<IEnumerable<MemberDefinition>>(), d => d != null));
8687

87-
foreach (var member in members.Where(n => !(n is BaseHexNode)))
88+
foreach (var member in members.WhereNot(n => n is BaseHexNode))
8889
{
8990
if (member is BitFieldNode)
9091
{

CodeGenerator/CppCodeGenerator.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Text;
66
using ReClassNET.Logger;
77
using ReClassNET.Nodes;
8+
using ReClassNET.Util;
89

910
namespace ReClassNET.CodeGenerator
1011
{
@@ -48,7 +49,7 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
4849
sb.AppendLine(
4950
string.Join(
5051
"\n\n",
51-
OrderByInheritance(classes).Select(c =>
52+
OrderByInheritance(classes.Where(c => c.Nodes.None(n => n is FunctionNode))).Select(c =>
5253
{
5354
var csb = new StringBuilder();
5455
csb.Append($"class {c.Name}");
@@ -74,7 +75,7 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
7475
csb.AppendLine(
7576
string.Join(
7677
"\n",
77-
YieldMemberDefinitions(c.Nodes.Skip(skipFirstMember ? 1 : 0), logger)
78+
YieldMemberDefinitions(c.Nodes.Skip(skipFirstMember ? 1 : 0).WhereNot(n => n is FunctionNode), logger)
7879
.Select(m => MemberDefinitionToString(m))
7980
.Select(s => "\t" + s)
8081
)
@@ -92,6 +93,18 @@ public string GenerateCode(IEnumerable<ClassNode> classes, ILogger logger)
9293
);
9394
}
9495

96+
var functions = classes.SelectMany(c2 => c2.Nodes).OfType<FunctionNode>().Where(f => f.BelongsToClass == c);
97+
if (functions.Any())
98+
{
99+
csb.AppendLine();
100+
csb.AppendLine(
101+
string.Join(
102+
"\n",
103+
functions.Select(f => $"\t{f.Signature} {{ }}")
104+
)
105+
);
106+
}
107+
95108
csb.Append($"}}; //Size: 0x{c.MemorySize:X04}");
96109
return csb.ToString();
97110
})
@@ -145,7 +158,7 @@ private IEnumerable<MemberDefinition> YieldMemberDefinitions(IEnumerable<BaseNod
145158
int fill = 0;
146159
int fillStart = 0;
147160

148-
foreach (var member in members.Where(m => !(m is VTableNode)))
161+
foreach (var member in members.WhereNot(m => m is VTableNode))
149162
{
150163
if (member is BaseHexNode)
151164
{

DataExchange/ReClassFile.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ public override int Draw(ViewInfo view, int x, int y)
381381
typeof(UTF8TextPtrNode),
382382
typeof(UTF16TextPtrNode),
383383
typeof(BitFieldNode),
384-
typeof(UInt64Node)
384+
typeof(UInt64Node),
385+
typeof(FunctionNode)
385386
};
386387

387388
#endregion

DataExchange/ReClassNetFile.Read.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,17 @@ private IEnumerable<BaseNode> ReadNodeElements(IEnumerable<XElement> elements, C
175175
TryGetAttributeValue(element, XmlBitsAttribute, out bits, logger);
176176
bitFieldNode.Bits = bits;
177177
}
178+
var functionNode = node as FunctionNode;
179+
if (functionNode != null)
180+
{
181+
functionNode.Signature = element.Attribute(XmlSignatureAttribute)?.Value ?? string.Empty;
182+
183+
var reference = NodeUuid.FromBase64String(element.Attribute(XmlReferenceAttribute)?.Value, false);
184+
if (project.ContainsClass(reference))
185+
{
186+
functionNode.BelongsToClass = project.GetClassByUuid(reference);
187+
}
188+
}
178189

179190
yield return node;
180191
}

DataExchange/ReClassNetFile.Write.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,13 @@ private IEnumerable<XElement> CreateNodeElements(IEnumerable<BaseNode> nodes, IL
121121
{
122122
element.SetAttributeValue(XmlBitsAttribute, bitFieldNode.Bits);
123123
}
124+
var functionNode = node as FunctionNode;
125+
if (functionNode != null)
126+
{
127+
var uuid = functionNode.BelongsToClass == null ? NodeUuid.Zero : functionNode.BelongsToClass.Uuid;
128+
element.SetAttributeValue(XmlReferenceAttribute, uuid.ToBase64String());
129+
element.SetAttributeValue(XmlSignatureAttribute, functionNode.Signature);
130+
}
124131

125132
yield return element;
126133
}

DataExchange/ReClassNetFile.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public partial class ReClassNetFile : IReClassImport, IReClassExport
3737
public const string XmlCountAttribute = "count";
3838
public const string XmlBitsAttribute = "bits";
3939
public const string XmlLengthAttribute = "length";
40+
public const string XmlSignatureAttribute = "signature";
4041

4142
private readonly ReClassNetProject project;
4243

@@ -49,13 +50,15 @@ public ReClassNetFile(ReClassNetProject project)
4950

5051
private static Dictionary<string, Type> BuildInStringToTypeMap = new Type[]
5152
{
53+
typeof(BoolNode),
5254
typeof(BitFieldNode),
5355
typeof(ClassInstanceArrayNode),
5456
typeof(ClassInstanceNode),
5557
typeof(ClassPtrArrayNode),
5658
typeof(ClassPtrNode),
5759
typeof(DoubleNode),
5860
typeof(FloatNode),
61+
typeof(FunctionNode),
5962
typeof(FunctionPtrNode),
6063
typeof(Hex8Node),
6164
typeof(Hex16Node),

Forms/MainForm.Designer.cs

Lines changed: 26 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Memory/MemoryBuffer.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public byte ReadByte(int offset)
7979
{
8080
Contract.Requires(offset >= 0);
8181

82-
if (Offset + offset > data.Length)
82+
if (Offset + offset >= data.Length)
8383
{
8484
return 0;
8585
}
@@ -150,6 +150,11 @@ public string ReadPrintableASCIIString(int offset, int length)
150150
length = Math.Max(data.Length - Offset - offset, 0);
151151
}
152152

153+
if (length <= 0)
154+
{
155+
return string.Empty;
156+
}
157+
153158
var sb = new StringBuilder(length);
154159
for (var i = 0; i < length; ++i)
155160
{

Nodes/BaseFunctionPtrNode.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace ReClassNET.Nodes
1010
public abstract class BaseFunctionPtrNode : BaseNode
1111
{
1212
private IntPtr address = IntPtr.Zero;
13-
private readonly List<string> assembledCode = new List<string>();
13+
private readonly List<string> instructions = new List<string>();
1414

1515
/// <summary>Size of the node in bytes.</summary>
1616
public override int MemorySize => IntPtr.Size;
@@ -21,7 +21,7 @@ public override string GetToolTipText(HotSpot spot, MemoryBuffer memory)
2121

2222
DisassembleRemoteCode(memory, ptr);
2323

24-
return string.Join("\n", assembledCode);
24+
return string.Join("\n", instructions);
2525
}
2626

2727
protected int Draw(ViewInfo view, int x, int y, string type, string name)
@@ -42,10 +42,11 @@ protected int Draw(ViewInfo view, int x, int y, string type, string name)
4242
x += TextPadding;
4343

4444
x = AddIcon(view, x, y, Icons.Function, -1, HotSpotType.None);
45-
x = AddAddressOffset(view, x, y);
4645

4746
var tx = x;
4847

48+
x = AddAddressOffset(view, x, y);
49+
4950
x = AddText(view, x, y, Program.Settings.TypeColor, HotSpot.NoneId, type) + view.Font.Width;
5051
x = AddText(view, x, y, Program.Settings.NameColor, HotSpot.NameId, name) + view.Font.Width;
5152

@@ -78,7 +79,7 @@ protected int Draw(ViewInfo view, int x, int y, string type, string name)
7879

7980
DisassembleRemoteCode(view.Memory, ptr);
8081

81-
foreach (var line in assembledCode)
82+
foreach (var line in instructions)
8283
{
8384
y += view.Font.Height;
8485

@@ -99,7 +100,7 @@ public override int CalculateHeight(ViewInfo view)
99100
var h = view.Font.Height;
100101
if (levelsOpen[view.Level])
101102
{
102-
h += assembledCode.Count * view.Font.Height;
103+
h += instructions.Count * view.Font.Height;
103104
}
104105
return h;
105106
}
@@ -110,7 +111,7 @@ private void DisassembleRemoteCode(MemoryBuffer memory, IntPtr address)
110111

111112
if (this.address != address)
112113
{
113-
assembledCode.Clear();
114+
instructions.Clear();
114115

115116
this.address = address;
116117

@@ -121,9 +122,9 @@ private void DisassembleRemoteCode(MemoryBuffer memory, IntPtr address)
121122
address,
122123
200,
123124
#if WIN64
124-
(a, l, i) => assembledCode.Add($"{a.ToString("X08")} {i}")
125+
(a, l, i) => instructions.Add($"{a.ToString("X08")} {i}")
125126
#else
126-
(a, l, i) => assembledCode.Add($"{a.ToString("X04")} {i}")
127+
(a, l, i) => instructions.Add($"{a.ToString("X04")} {i}")
127128
#endif
128129
);
129130
}

0 commit comments

Comments
 (0)