From 01f43af2ab63fcbcf61f2382c130b062d9b89f0f Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Mon, 3 Feb 2020 00:10:32 +0100 Subject: [PATCH] IDA: Add method signature comments to all method output --- Il2CppDumper/Il2CppIDAScriptDumper.cs | 28 ++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/Il2CppDumper/Il2CppIDAScriptDumper.cs b/Il2CppDumper/Il2CppIDAScriptDumper.cs index 05e6037..d0f14b1 100644 --- a/Il2CppDumper/Il2CppIDAScriptDumper.cs +++ b/Il2CppDumper/Il2CppIDAScriptDumper.cs @@ -69,30 +69,44 @@ def SetName(addr, name): } foreach (var method in model.GenericMethods.Values.Where(m => m.VirtualAddress.HasValue)) { - writeLines($"SetName({method.VirtualAddress.Value.Start.ToAddressString()}," + - $"'{method.DeclaringType.Name}$${method.Name}{method.GetFullTypeParametersString()}')"); + var address = method.VirtualAddress.Value.Start.ToAddressString(); + writeLines($"SetName({address}, '{method.DeclaringType.Name}$${method.Name}{method.GetFullTypeParametersString()}')"); + writeLines($"idc.set_cmt({address}, r'{method}', 1)"); } foreach (var method in model.AttributesByIndices.Values.Where(m => m.VirtualAddress.HasValue)) { - writeLines($"SetName({method.VirtualAddress.Value.Start.ToAddressString()}," + - $"'CustomAttributesGenerator${method.AttributeType.FullName}')"); + var address = method.VirtualAddress.Value.Start.ToAddressString(); + writeLines($"SetName({address}, 'CustomAttributesGenerator${method.AttributeType.FullName}')"); + writeLines($"idc.set_cmt({address}, r'{method}', 1)"); } } private void writeMethods(string typeName, IEnumerable methods) { foreach (var method in methods.Where(m => m.VirtualAddress.HasValue)) { - writeLines($"SetName({method.VirtualAddress.Value.Start.ToAddressString()}, '{typeName}$${method.Name}')"); + var address = method.VirtualAddress.Value.Start.ToAddressString(); + writeLines($"SetName({address}, '{typeName}$${method.Name}')"); + writeLines($"idc.set_cmt({address}, r'{method}', 1)"); } } private void writeUsages() { foreach (var usage in model.Package.MetadataUsages) { + var address = usage.VirtualAddress.ToAddressString(); var escapedName = model.GetMetadataUsageName(usage).ToEscapedString(); if (usage.Type != MetadataUsageType.StringLiteral) - writeLines($"SetName({usage.VirtualAddress.ToAddressString()}, '{usagePrefixes[usage.Type]}${escapedName}')"); + writeLines($"SetName({address}, '{usagePrefixes[usage.Type]}${escapedName}')"); else - writeLines($"SetString({usage.VirtualAddress.ToAddressString()}, r'{escapedName}')"); + writeLines($"SetString({address}, r'{escapedName}')"); + + if (usage.Type == MetadataUsageType.MethodDef || usage.Type == MetadataUsageType.MethodRef) { + var method = model.GetMetadataUsageMethod(usage); + writeLines($"idc.set_cmt({address}, r'{method}', 1)"); + } + else if (usage.Type != MetadataUsageType.StringLiteral) { + var type = model.GetMetadataUsageType(usage); + writeLines($"idc.set_cmt({address}, r'{type}', 1)"); + } } }