示例#1
0
        /// <summary>
        /// Perform "position" verb.
        /// </summary>
        /// <param name="options">Options</param>
        static void DoPosition(MonoOptions options)
        {
            IPositionTranslator translator = PositionTranslator.DefaultInstance;

            Int64 position = 0;

            if (options.Key.HasValue)
            {
                // This doesn't work yet: Command line parser can't parse Nullable?
                position = translator.ToPosition(options.PositionString, options.Key.Value);
            }
            else if (options.AssemblyPath != null)
            {
                EazModule module;
                if (!TryLoadModule(options.AssemblyPath, out module))
                {
                    return;
                }

                MethodStub method = module.FindFirstVirtualizedMethod();
                if (method != null)
                {
                    try
                    {
                        position = translator.ToPosition(options.PositionString, method.ResourceCryptoKey);
                    }
                    catch (FormatException e)
                    {
                        Console.WriteLine(e.Message);
                        return;
                    }
                }
                else
                {
                    Console.WriteLine("No virtualized methods found in specified assembly");
                    return;
                }
            }
            else
            {
                Console.WriteLine("Provide either the crypto key or assembly from which to extract the crypto key");
                return;
            }

            Console.WriteLine("{0} => {1:X8}", options.PositionString, position);
        }
        /// <summary>
        /// Perform "position" verb.
        /// </summary>
        /// <param name="options">Options</param>
        static void DoPosition(MonoOptions options)
        {
            Int64 position = 0;

            if (options.AssemblyPath != null)
            {
                EazModule module;
                if (!TryLoadModule(options.AssemblyPath, out module))
                {
                    return;
                }

                IPositionTranslator translator = module.PositionTranslator;

                MethodStub method = module.FindFirstVirtualizedMethod();
                if (method != null)
                {
                    try
                    {
                        position = translator.ToPosition(options.PositionString, method.ResourceCryptoKey);
                    }
                    catch (FormatException e)
                    {
                        Console.WriteLine(e.Message);
                        return;
                    }
                }
                else
                {
                    Console.WriteLine("No virtualized methods found in specified assembly");
                    return;
                }
            }
            else
            {
                Console.WriteLine("Provide either the crypto key or assembly from which to extract the crypto key");
                return;
            }

            Console.WriteLine("{0} => {1:X8}", options.PositionString, position);
        }