示例#1
0
        public static string ReadJavaString(HeapObject stringObj)
        {
            FieldReferenceValue charArrayReference = (FieldReferenceValue)stringObj.GetField("value", "[C");
            HeapArray           charArray          = (HeapArray)Heap.GetItem(charArrayReference.Address);

            return(new string((char[])charArray.Array));
        }
示例#2
0
        public static int CreateJavaStringLiteral(string @string)
        {
            HeapArray  charArray   = new HeapArray(@string.ToCharArray(), ClassObjectManager.GetClassObjectAddr("char"));
            int        charArrAddr = Heap.AddItem(charArray);
            HeapObject stringObj   = new HeapObject(ClassFileManager.GetClassFile("java/lang/String"));

            stringObj.SetField("value", "[C", new FieldReferenceValue(charArrAddr));
            int stringObjAddr = Heap.AddItem(stringObj);

            return(StringPool.Intern(stringObjAddr));
        }
示例#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);
            }
        }
示例#4
0
        public override HeapObject Clone()
        {
            HeapArray clone = new HeapArray(Array, ItemTypeClassObjAddr);

            return(clone);
        }