void WriteVTableFixupComment(LineWriter lw)
{
int ptrsize = GetPointerSize();
VTableFixups[] fixups = GetVTableFixups();
if (fixups.Length != 0)
{
lw.WriteLine("// VTableFixup Directory:");
for (int i = 0; i < fixups.Length; i++)
{
lw.WriteLine("// IMAGE_COR_VTABLEFIXUP[{0}]:", i);
lw.WriteLine("// RVA: 0x{0:x8}", fixups[i].RVA);
lw.WriteLine("// Count: 0x{0:x4}", fixups[i].Count);
lw.WriteLine("// Type: 0x{0:x4}", fixups[i].Type);
var methods = GetVTableMethods(fixups[i]);
for (int j = 0; j < methods.Length; j++)
{
var method = methods[j];
List<KeyValuePair<int,int>> list;
if (!vtentryMap.TryGetValue(method, out list))
{
list = new List<KeyValuePair<int, int>>();
vtentryMap.Add(method, list);
}
list.Add(new KeyValuePair<int,int>(i + 1, j + 1));
if (ptrsize == 4)
{
lw.WriteLine("// [0x{0:x4}] (0x{1:x8})", j, method.MetadataToken);
}
else
{
lw.WriteLine("// [0x{0:x4}] (0x {1:x})", j, method.MetadataToken);
}
}
}
lw.WriteLine();
}
lw.WriteLine();
}