首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

.Net面试题:.Net程序assembly是什么?

.Net程序定义: 它是Microsoft . net框架应用程序中部署的主要单元。它被称为应用程序的构建块,为公共语言运行时提供所有必需的执行信息。...程序包含内容: -它包含由公共语言运行时执行的IL代码。 -它构成安全界限。 -程序是请求和授予权限的单元。 -在运行时为类型建立名称范围,确保类型安全。 -它包含版本信息。...-它允许并行运行同一个程序的多个版本。 程序可以是静态的,也可以是动态的。 当使用. net编译器编译程序时,将创建静态程序。它以PE文件的形式存在于.exe或.dll中。...但是,动态程序是在运行时创建的,并从内存运行,而不会保存到磁盘上。...定义程序 程序是一个集合,可以是可执行的(.exe),也可以是动态链接库(.dll),它们构成了功能的逻辑单元,并构建为高效地协同工作。

55420

Donut - 将 .NET 程序作为 Shellcode 注入

因此,.NET 语言的设计者不需要围绕他们将运行的架构来设计他们的编译器。相反,他们只需将其设计为编译为一种语言:CIL。 .NET程序:.NET 应用程序被打包成 .NET 程序。...反射 DLL 被注入子进程以加载 .NET 运行时。 反射 DLL 加载中间 .NET 程序以处理错误并提高有效负载的稳定性。 中间 .NET 程序从子进程内的内存中加载您的 .NET 程序。...NET 程序将被加载到托管进程内的新应用程序域中。.NET 旨在允许为多个 .NET 版本构建的 .NET 程序在同一进程中同时运行。因此,无论注入前进程的状态如何,您的有效负载都应始终运行。...因为它是我能找到的最……啊……复杂的 .NET 程序,所以我将它用于所有测试。您可以使用任何标准的 shellcode 注入技术来注入 .NET 程序。...任何运行 .NET 程序的 shellcode 必须首先引导公共语言运行时并通过它加载程序。输入甜甜圈。

1.7K00

.NET程序加载上下文

我们编写的 .NET 应用程序会使用到各种各样的依赖库。我们都知道 CLR 会在一些路径下帮助我们程序找到依赖,但如果我们需要手动控制程序加载路径的话,需要了解程序加载上下文。...Load-From Context) 仅反射上下文(the Reflection-Only Context) 无上下文 你需要了解这些加载上下文,因为跨不同加载上下文加载的程序是不能访问其中的类型的...带来的问题 .NET 加载程序的这种机制可能让你的程序陷入一点点坑:你可以让你的程序加载任意路径下的一个程序(dll/exe),并且可以执行其中的代码,但你不能依赖那些路径中程序的特定类型或接口等...位于任意路径下的插件程序可以访问到位于探测路径中所有程序的所有 API,但反过来探测路径下的程序不能访问到其他目录下插件程序的特定类型或接口等。...来进行合并,如果你愿意,也可以使用 ILMerge: .NET 使用 ILMerge 合并多个程序,避免引入额外的依赖 ---- 参考资料 Loading .NET Assemblies out

23930

解析.NET对象的跨应用程序访问(下篇)

在上篇博文中主要介绍了.NET的AppDomain的相关信息,在本篇博文中将会主要说明.NET程序、对象代理,以及对象的封送原理。...一.程序集解析:     谈到程序,就要知道什么叫做程序,我们看看程序的定义是什么。...程序是一个或多个模块/资源文件的逻辑分组(一个模块成为单模块程序或者单文件程序;多个模块成为多模块程序或者多文件程序);程序是重用、安全性以及版本控制的最小单元。...:    1.对象代理概述:       本文主要是讲解对象的跨应用程序访问,前面介绍了应用程序域和程序的相关信息,在这里就要开始讲解如何来实现对象的跨应用程序域的访问操作。...1.传值封送:       当位于A应用程序域的对象传递给B应用程序域,.NET将A中对象的状态进行复制、序列化、然后在B中重新创建,并通过代理对象进行访问。 ?

1.3K60

解析.NET对象的跨应用程序访问(上篇)

在.NET种可以通过System.AppDomain类型访问AppDomain。在这里我们具体了解一下System.AppDomain类型的方法和属性。...可以通过SetData和GetData方法访问,在这里给出了GetData()方法的源码。...该方法接收三个参数,assemblyFile:包含要执行程序的文件的名称;assemblySecurity:为程序提供的证据;args:程序的入口点的实参。该方法返回 程序的入口点返回的值。....NET框架在我们允许使用的调用上锁定我们          ///当加载这些程序时,所以我们需要依赖于AssemblyResolver实例附加的          /...,本系列主要讲解.NET对象的跨应用程序域的传递,由于设计应用程序域的内容,所以本文主要讲解了一些基本概念,以及一些基本的对象,对于应用程序域包含的程序的相关内容将在下面进行操作。

94650

.NET Core 3.0 可回收程序加载上下文

一、前世今生 .NET诞生以来,程序的动态加载和卸载都是一个Hack的技术,之前的NetFx都是使用AppDomain的方式去加载程序,然而AppDomain并没有提供直接卸载一个程序的API,而是要卸载整个...AppDomain才能卸载包含在其中的所有程序。...可能有人另辟西经,创建别一个AppDomain来加载/卸载程序,但是由于程序之间是不能跨域访问的,也导致只能通过Remote Proxy的方式去访问,这样在类型创建和使用上带来了一定的难度也是类型的继承变得相当复杂...但是在.NET Core 3.0中,我最期待的一个特性就是对可收集程序的支持(Collectible AssemblyLoadContext)。...众所周知.NET Core中一直使用AssemblyLoadContext的API,来进行程序的动态加载,但是并没有提供Unload的方法,此次升级更新了这方面的能力。

98930

在SQL Server2005中使用 .NET程序

在.NET 中创建这样的函数,返回的结果是一个IEnumerable接口.这个接口非常灵活,所有.NET数组集合等都是实现了该接口的.下面我们举一个简单的例子来说明....这样写完成以后,在数据库那边添加好这个程序,然后就可以创建表值函数了: create function BuildTable() returns table(SID int,[sName] nvarchar...这儿需要说明一下就是数据库中的类型和.NET中的类型的对应问题.int,datetime就不说了,主要是.NET中的string,在数据库中没有string类型,在FillRow中指出了类型SqlString...,可以调用DDL和DML语句. .NET创建存储过程要编写为静态函数,然后加上SqlProcedure属性....c.imag = Convert.ToDouble(st[]);                 return c;             }         }     } 编译好,在数据库中添加程序

1.6K10

.NET 使用 ILMerge 合并多个程序,避免引入额外的依赖

我们有多种工具可以将程序集合并成为一个。打包成一个程序可以避免分发程序的时候带上一堆依赖而出问题。 ILMerge 可以用来将多个程序集合并成一个程序。...,这样分发程序的时候只需要一个程序即可。...如果你希望在你的项目当中进行尝试,可以把所有 /log 参数之后的那些程序名称改为你自己的名称。 那么在编译的时候使用命令 msbuild /t:ILMerge 就可以完成程序的合并了。...,如果是控制台程序,则为 exe /out 输出文件的名称(或路径)(此路径可以和需要合并的程序名称相同,这样在合并完之后会覆盖同名称的那个程序) /log 所有需要合并的程序名称(或路径) /targetplatform...目标平台,如果是 .NET Framework 4.0 - .NET Framework 4.8 之间,则都是 v4 在合并完成之后,我们反编译可以发现程序集中已经包含了依赖程序集中的全部类型了。

95430

“前.NET Core时代”如何实现跨平台代码重用 ——程序重用

除了在源代码层面实现共享(“前.NET Core时代”如何实现跨平台代码重用 ——源文件重用)之外,我们还可以跨平台共享同一个程序,这种独立于具体平台的“中性”程序通过创建一种名为“可移植类库(PCL...二、程序一致性 我们都知道.NET Framework是向后兼容的,也就是说原来针对低版本.NET Framework编译生成的程序是可以直接在高版本CLR下运行的。...我们试想一下这么一个问题:就一个针对.NET Framework 2.0编译生成的程序自身来说,所有引用的.NET Framework程序的版本都是2.0,如果这个程序在4.0环境下执行,CLR在决定加载它所依赖程序的时候...五、可移植类库(PCL) 就目前来说,创建PCL项目是实现跨.NET Framework平台程序共享唯一的方式。...Visual Studio会为新建的项目添加一个名为“.NET”的引用,这个引用指向一个由选定.NET Framework平台决定的程序列表。

1.1K80

使Spring.NET的IOC容器支持动态加载的程序

当我们发布系统时,有时候希望不用关掉应用程序就能完成发布,但Spring.NET的ApplicationContext是从AppDomain.CurrentDomain中加载的程序集中创建对象的...当然,我们还需要一个FileSystemWatcher来监控程序的目录,当目录中的程序发生变化时,再把新的程序复制到新的临时目录,然后再加载新临时目录中的程序文件。...为了区分出哪个程序才是最新的,我们还需要一个全局的dictionary来存放最新的程序,这个dictionary以程序的名字作为key,以最新的加载后的程序作为value。...AppDomain.AssemblyResolve事件了,因为.net framework认为这个程序它是可以识别的,不需要再触发这个事件了。...><objects xmlns="http://www.springframework.<em>net</em>" xmlns:db="http://www.springframework.<em>net</em>/database

66340

二、源代码=>程序程序概念介绍

文本脉络图如下: 一、源代码-面向CLR的编译器-托管模块-(元数据&IL代码)中介绍了编译器将源文件编译成托管模块(中间语言和元数据),本文主要介绍如何将托管模块合并成程序. 1、程序的基本概念...2、程序生成的过程 注: (1)、清单指出程序只有一个文件组成, (2)、对于只有一个托管模块,没有资源文件的项目,程序就是托管模块. (3)、如果需要将一组文件合并到程序集中可以使用程序链接器...常用的方法是,把程序的物理表示和逻辑表示区分开,将很少用到的类型和文件放到单独的文件中,并将这些文件作为程序的一部分,如果运行时需要,则去下载,这样不仅节省了磁盘空间,还节省了安装时间.通过程序,...可以在不同的地方部署,同时任然将所有的文件当作一个整体来看待. 4、关于程序自描述的优点 在程序的模块中,还包含与引用的程序有关的信息(版本号、描述等等),具体如下图 这些信息(当然远不止上图中的这点信息...)使程序能够自描述.也就是说CLR能判断为了执行程序集中的代码,程序的直接依赖对象是什么.不需要在注册表或者Active Directory Domain Services(ADDS)中注册额外的信息

75090
领券