示例#1
0
 private static extern void CreateDynamicAssembly(
     ObjectHandleOnStack name,
     StackCrawlMarkHandle stackMark,
     int access,
     ObjectHandleOnStack assemblyLoadContext,
     ObjectHandleOnStack retAssembly
     );
示例#2
0
 private extern static void SwapMethodBody(
     RuntimeTypeHandle cls,           // [in] class containing the method
     int methodtoken,                 // [in] method token
     IntPtr rgIL,                     // [in] pointer to bytes
     int methodSize,                  // [in] the size of the new method body in bytes
     int flags,                       // [in] flags
     StackCrawlMarkHandle stackMark); // [in] stack crawl mark used to find caller
示例#3
0
 private static extern void InternalLoad(
     ObjectHandleOnStack assemblyName,
     ObjectHandleOnStack requestingAssembly,
     StackCrawlMarkHandle stackMark,
     bool throwOnFileNotFound,
     ObjectHandleOnStack assemblyLoadContext,
     ObjectHandleOnStack retAssembly
     );
示例#4
0
 static private extern void DefineDynamicModule(RuntimeAssembly containingAssembly,
                                                bool emitSymbolInfo,
                                                String name,
                                                String filename,
                                                StackCrawlMarkHandle stackMark,
                                                ref IntPtr pInternalSymWriter,
                                                ObjectHandleOnStack retModule,
                                                bool fIsTransient,
                                                out int tkFile);
示例#5
0
 internal static extern void GetGrantedPermissions(ObjectHandleOnStack retGranted, ObjectHandleOnStack retDenied, StackCrawlMarkHandle stackMark);
 private static extern void GetTypeByName(string name, bool throwOnError, bool ignoreCase, bool reflectionOnly, StackCrawlMarkHandle stackMark, bool loadTypeFromPartialName, ObjectHandleOnStack type);
示例#7
0
 private static partial void InternalLoad(ObjectHandleOnStack assemblyName,
                                          ObjectHandleOnStack requestingAssembly,
                                          StackCrawlMarkHandle stackMark,
                                          [MarshalAs(UnmanagedType.Bool)] bool throwOnFileNotFound,
                                          ObjectHandleOnStack assemblyLoadContext,
                                          ObjectHandleOnStack retAssembly);
示例#8
0
 private static extern void GetExecutingAssemblyNative(StackCrawlMarkHandle stackMark, ObjectHandleOnStack retAssembly);
示例#9
0
 private static extern int GetManifestResourceInfo(RuntimeAssembly assembly,
                                                   string resourceName,
                                                   ObjectHandleOnStack assemblyRef,
                                                   StringHandleOnStack retFileName,
                                                   StackCrawlMarkHandle stackMark);
示例#10
0
 private extern static void GetExecutingAssembly(StackCrawlMarkHandle stackMark, ObjectHandleOnStack retAssembly);
示例#11
0
 private static extern void SwapMethodBody(RuntimeTypeHandle cls, int methodtoken, IntPtr rgIL, int methodSize, int flags, StackCrawlMarkHandle stackMark);
示例#12
0
 private static extern void GetCallerType(StackCrawlMarkHandle stackMark, ObjectHandleOnStack retType);
示例#13
0
 private static extern unsafe byte *GetResource(RuntimeAssembly assembly, string resourceName, out ulong length, StackCrawlMarkHandle stackMark, bool skipSecurityCheck);
示例#14
0
        static void GetExecutingAssembly(StackCrawlMarkHandle scmh, TysosModule.ObjectHandleOnStack ret)
        {
            int scm = *(int *)scmh.ptr;

            System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: scm: " + scm.ToString());

            Unwinder u = OtherOperations.GetUnwinder();

            u.UnwindOne();
            u.UnwindOne();      // we are double-nested within coreclr so unwind this and calling method (GetExecutingAssembly(ref StackMarkHandle)) first

            switch (scm)
            {
            case 0:
                break;

            case 1:
                u.UnwindOne();
                break;

            case 2:
                u.UnwindOne();
                u.UnwindOne();
                break;

            default:
                System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: unsupported scm: " + scm.ToString());
                throw new NotSupportedException();
            }

            System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: requested pc " + ((ulong)u.GetInstructionPointer()).ToString("X"));

            void *offset;
            var   name = JitOperations.GetNameOfAddress((void *)u.GetInstructionPointer(), out offset);

            if (name == null)
            {
                System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: symbol not found");
                *ret.ptr = null;
                return;
            }

            System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: found method " + name);

            var ts = Metadata.MSCorlib.DemangleObject(name);

            if (ts == null)
            {
                System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: demangler returned null");
                *ret.ptr = null;
                return;
            }
            var m = ts.Metadata;

            if (m == null)
            {
                System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: returned ts had no assembly");
                *ret.ptr = null;
                return;
            }
            var aptr = (m.file as Metadata.BinaryInterface).b;
            var retm = TysosModule.GetModule(aptr, m.AssemblyName);

            System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetExecutingAssembly: returning " + retm.ass.assemblyName);
            *ret.ptr = CastOperations.ReinterpretAsPointer(retm.ass);
        }
示例#15
0
        static byte *GetResource(TysosAssembly ass, string resourceName, out ulong length, StackCrawlMarkHandle stackMark,
                                 bool skipSecurityCheck)
        {
            System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetResource(" + ass.assemblyName + ", " + resourceName + ", out ulong length, " +
                                            "StackCrawlMarkHandle stackMark, bool skipSecurityCheck) called");

            var res_addr = JitOperations.GetAddressOfObject(ass.assemblyName + "_resources");

            if (res_addr == null)
            {
                System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetResource: cannot find " + ass.assemblyName + "_resources");
                length = 0;
                return(null);
            }

            uint *ret = (uint *)res_addr;

            // length is the first int32
            length = *ret++;

            System.Diagnostics.Debugger.Log(0, "libsupcs", "TysosAssembly.GetResource: returning: " + ((ulong)ret).ToString("X") +
                                            ", length: " + length.ToString("X"));

            return((byte *)ret);
        }