Esempio n. 1
0
        private static void WriteObjectValue(string type, int argument)
        {
            if (argument == 0)
            {
                Console.ForegroundColor = classNameColor;
                Console.Write(type);

                Console.ForegroundColor = separatorColor;
                Console.Write('/');

                Console.ForegroundColor = nullColor;
                Console.Write("Null");
            }
            else
            {
                ClassFile argCFile = Heap.GetObject(argument).ClassFile;
                if (argCFile.Name == "java/lang/String")
                {
                    Console.ForegroundColor = stringColor;
                    FieldReferenceValue charArr = (FieldReferenceValue)Heap.GetObject(argument).GetField("value", "[C");
                    if (charArr.Address == 0)
                    {
                        Console.ForegroundColor = classNameColor;
                        Console.Write(Heap.GetObject(argument).ClassFile.Name);
                    }
                    else
                    {
                        Console.Write('"' + JavaHelper.ReadJavaString(argument) + '"');
                    }
                }
                else if (argCFile.Name == "java/lang/Class")
                {
                    Console.ForegroundColor = classObjColor;
                    Console.Write(JavaHelper.ClassObjectName(argument));
                }
                else
                {
                    Console.ForegroundColor = classNameColor;
                    Console.Write(Heap.GetObject(argument).ClassFile.Name);
                }
                Console.ForegroundColor = separatorColor;
                Console.Write('/');

                Console.ForegroundColor = objAddrColor;
                Console.Write(argument);
            }
        }
Esempio n. 2
0
 private static void WriteArgs(string descriptor, bool isStatic, int[] args)
 {
     if (WriteDebugMessages)
     {
         ConsoleColor originalColor = Console.ForegroundColor;
         int          argIndex      = 0;
         int          i;
         Console.Write("(");
         if (!isStatic)
         {
             int callerAddr = args[0];
             if (Heap.GetObject(callerAddr) is HeapArray heapArr)
             {
                 WriteArrayValue(JavaHelper.ClassObjectName(heapArr.ItemTypeClassObjAddr), callerAddr);
             }
             else
             {
                 ClassFile argCFile = Heap.GetObject(callerAddr).ClassFile;
                 WriteObjectValue(argCFile.Name, callerAddr);
             }
             argIndex++;
         }
         for (i = 1; descriptor[i] != ')';)
         {
             if (!isStatic || i != 1)
             {
                 Console.Write(", ");
             }
             string argumentType = JavaHelper.ReadDescriptorArg(descriptor, ref i);
             if (argumentType[0] == 'J' || argumentType[0] == 'D')
             {
                 long argument = (args[argIndex], args[argIndex + 1]).ToLong();
                 WriteWideValue(argumentType[0], argument);
                 argIndex += 2;
             }
             else
             {
                 int argument = args[argIndex];
                 WriteValue(argumentType, argument);
                 argIndex++;
             }
         }
         Console.ForegroundColor = originalColor;
         Console.Write(')');
     }
 }
Esempio n. 3
0
        private static void WriteArrayValue(string itemType, int argument)
        {
            if (argument != 0)
            {
                HeapArray heapArr         = Heap.GetArray(argument);
                string    itemTypeFromArg = JavaHelper.ClassObjectName(heapArr.ItemTypeClassObjAddr);
                if (!JavaHelper.IsPrimitiveType(itemTypeFromArg))
                {
                    itemType = JavaHelper.ClassObjectName(heapArr.ItemTypeClassObjAddr).Replace('.', '/');
                }
            }
            Console.ForegroundColor = arrayBracketColor;
            int i = -1;

            do
            {
                Console.Write('[');
                i++;
            } while (itemType[i] == '[');

            Console.ForegroundColor = classNameColor;
            if (itemType[i] == 'L')
            {
                Console.Write(itemType.Substring(i + 1, itemType.Length - i - 2));
            }
            else
            {
                Console.Write(itemType.Substring(i));
            }

            Console.ForegroundColor = separatorColor;
            Console.Write("/");

            if (argument == 0)
            {
                Console.ForegroundColor = nullColor;
                Console.Write("Null");
            }
            else
            {
                Console.ForegroundColor = objAddrColor;
                Console.Write(argument);
            }
        }