コード例 #1
0
ファイル: V45Runtime.cs プロジェクト: snowdream1985/clrmd
        internal override IMethodDescData GetMDForIP(ulong ip)
        {
            ulong md = _sos.GetMethodDescPtrFromIP(ip);

            if (md == 0)
            {
                if (!_sos.GetCodeHeaderData(ip, out CodeHeaderData codeHeaderData))
                {
                    return(null);
                }

                if ((md = codeHeaderData.MethodDesc) == 0)
                {
                    return(null);
                }
            }

            V45MethodDescDataWrapper mdWrapper = new V45MethodDescDataWrapper();

            if (!mdWrapper.Init(_sos, md))
            {
                return(null);
            }

            return(mdWrapper);
        }
コード例 #2
0
ファイル: V45Runtime.cs プロジェクト: snowdream1985/clrmd
        protected override DesktopStackFrame GetStackFrame(DesktopThread thread, byte[] context, ulong ip, ulong framePtr, ulong frameVtbl)
        {
            DesktopStackFrame frame;

            if (frameVtbl != 0)
            {
                ClrMethod innerMethod = null;
                string    frameName   = _sos.GetFrameName(frameVtbl);

                ulong md = _sos.GetMethodDescPtrFromFrame(framePtr);
                if (md != 0)
                {
                    V45MethodDescDataWrapper mdData = new V45MethodDescDataWrapper();
                    if (mdData.Init(_sos, md))
                    {
                        innerMethod = DesktopMethod.Create(this, mdData);
                    }
                }

                frame = new DesktopStackFrame(this, thread, context, framePtr, frameName, innerMethod);
            }
            else
            {
                frame = new DesktopStackFrame(this, thread, context, ip, framePtr, _sos.GetMethodDescPtrFromIP(ip));
            }

            return(frame);
        }
コード例 #3
0
ファイル: V45Runtime.cs プロジェクト: snowdream1985/clrmd
        internal override IMethodDescData GetMethodDescData(ulong md)
        {
            V45MethodDescDataWrapper wrapper = new V45MethodDescDataWrapper();

            if (!wrapper.Init(_sos, md))
            {
                return(null);
            }

            return(wrapper);
        }
コード例 #4
0
ファイル: v45runtime.cs プロジェクト: mattwarren/clrmd
        internal override IMethodDescData GetMDForIP(ulong ip)
        {
            ulong md;
            if (_sos.GetMethodDescPtrFromIP(ip, out md) < 0 || md == 0)
            {
                CodeHeaderData codeHeaderData;
                if (_sos.GetCodeHeaderData(ip, out codeHeaderData) < 0)
                {
                    return null;
                }
                if ((md = codeHeaderData.MethodDescPtr) == 0)
                    return null;
            }

            V45MethodDescDataWrapper mdWrapper = new V45MethodDescDataWrapper();
            if (!mdWrapper.Init(_sos, md))
                return null;

            return mdWrapper;
        }
コード例 #5
0
ファイル: v45runtime.cs プロジェクト: mattwarren/clrmd
        protected override DesktopStackFrame GetStackFrame(DesktopThread thread, int res, ulong ip, ulong framePtr, ulong frameVtbl)
        {
            DesktopStackFrame frame;
            StringBuilder sb = new StringBuilder();
            sb.Capacity = 256;
            uint needed;
            if (res >= 0 && frameVtbl != 0)
            {
                ClrMethod innerMethod = null;
                string frameName = "Unknown Frame";
                if (_sos.GetFrameName(frameVtbl, (uint)sb.Capacity, sb, out needed) >= 0)
                    frameName = sb.ToString();

                ulong md = 0;
                if (_sos.GetMethodDescPtrFromFrame(framePtr, out md) == 0)
                {
                    V45MethodDescDataWrapper mdData = new V45MethodDescDataWrapper();
                    if (mdData.Init(_sos, md))
                        innerMethod = DesktopMethod.Create(this, mdData);
                }

                frame = new DesktopStackFrame(this, thread, framePtr, frameName, innerMethod);
            }
            else
            {
                ulong md;
                if (_sos.GetMethodDescPtrFromIP(ip, out md) >= 0)
                {
                    frame = new DesktopStackFrame(this, thread, ip, framePtr, md);
                }
                else
                {
                    frame = new DesktopStackFrame(this, thread, ip, framePtr, 0);
                }
            }

            return frame;
        }
コード例 #6
0
ファイル: v45runtime.cs プロジェクト: mattwarren/clrmd
        internal override IMethodDescData GetMethodDescData(ulong md)
        {
            V45MethodDescDataWrapper wrapper = new V45MethodDescDataWrapper();
            if (!wrapper.Init(_sos, md))
                return null;

            return wrapper;
        }
コード例 #7
0
ファイル: v45runtime.cs プロジェクト: Pavel-Durov/msos
        internal override IMethodDescData GetMDForIP(ulong ip)
        {
            ulong md;
            if (m_sos.GetMethodDescPtrFromIP(ip, out md) < 0 || md == 0)
                return null;

            V45MethodDescDataWrapper mdWrapper = new V45MethodDescDataWrapper();
            if (!mdWrapper.Init(m_sos, md))
                return null;

            return mdWrapper;
        }