IDA: Add method signature comments to all method output

This commit is contained in:
Katy Coe
2020-02-03 00:10:32 +01:00
parent a5a79e2bef
commit 01f43af2ab

View File

@@ -69,30 +69,44 @@ def SetName(addr, name):
} }
foreach (var method in model.GenericMethods.Values.Where(m => m.VirtualAddress.HasValue)) { foreach (var method in model.GenericMethods.Values.Where(m => m.VirtualAddress.HasValue)) {
writeLines($"SetName({method.VirtualAddress.Value.Start.ToAddressString()}," + var address = method.VirtualAddress.Value.Start.ToAddressString();
$"'{method.DeclaringType.Name}$${method.Name}{method.GetFullTypeParametersString()}')"); 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)) { foreach (var method in model.AttributesByIndices.Values.Where(m => m.VirtualAddress.HasValue)) {
writeLines($"SetName({method.VirtualAddress.Value.Start.ToAddressString()}," + var address = method.VirtualAddress.Value.Start.ToAddressString();
$"'CustomAttributesGenerator${method.AttributeType.FullName}')"); writeLines($"SetName({address}, 'CustomAttributesGenerator${method.AttributeType.FullName}')");
writeLines($"idc.set_cmt({address}, r'{method}', 1)");
} }
} }
private void writeMethods(string typeName, IEnumerable<MethodBase> methods) { private void writeMethods(string typeName, IEnumerable<MethodBase> methods) {
foreach (var method in methods.Where(m => m.VirtualAddress.HasValue)) { 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() { private void writeUsages() {
foreach (var usage in model.Package.MetadataUsages) { foreach (var usage in model.Package.MetadataUsages) {
var address = usage.VirtualAddress.ToAddressString();
var escapedName = model.GetMetadataUsageName(usage).ToEscapedString(); var escapedName = model.GetMetadataUsageName(usage).ToEscapedString();
if (usage.Type != MetadataUsageType.StringLiteral) if (usage.Type != MetadataUsageType.StringLiteral)
writeLines($"SetName({usage.VirtualAddress.ToAddressString()}, '{usagePrefixes[usage.Type]}${escapedName}')"); writeLines($"SetName({address}, '{usagePrefixes[usage.Type]}${escapedName}')");
else 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)");
}
} }
} }