首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

55620
您找到你想要的搜索结果了吗?
是的
没有找到

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

因此,.NET 语言的设计者不需要围绕他们将运行的架构来设计他们的编译器。相反,他们只需将其设计为编译为一种语言:CIL。 .NET程序:.NET 应用程序被打包成 .NET 程序。...反射 DLL 被注入子进程以加载 .NET 运行时。 反射 DLL 加载中间 .NET 程序以处理错误并提高有效负载的稳定性。 中间 .NET 程序从子进程内的内存中加载您的 .NET 程序。...您的程序的主要入口点与您的命令行参数一起被调用。 结果是 execute-assembly确实允许您将 .NET 程序集注入远程进程。但是,它不允许您注入正在运行的进程或指定注入的发生方式。...NET 程序将被加载到托管进程内的新应用程序域中。.NET 旨在允许为多个 .NET 版本构建的 .NET 程序在同一进程中同时运行。因此,无论注入前进程的状态如何,您的有效负载都应始终运行。...任何运行 .NET 程序的 shellcode 必须首先引导公共语言运行时并通过它加载程序。输入甜甜圈。

1.7K00

.NET程序加载上下文

我们编写的 .NET 应用程序会使用到各种各样的依赖库。我们都知道 CLR 会在一些路径下帮助我们程序找到依赖,但如果我们需要手动控制程序加载路径的话,需要了解程序加载上下文。...带来的问题 .NET 加载程序的这种机制可能让你的程序陷入一点点坑:你可以让你的程序加载任意路径下的一个程序(dll/exe),并且可以执行其中的代码,但你不能依赖那些路径中程序的特定类型或接口等...具体一点,比如你定义了一个接口 IPlugin,任意路径中的程序可以实现这个接口,你加载这个程序之后也可以通过 IPlugin 接口调用程序集中的方法,因为这个接口的定义所在的程序依然在你的探测路径中...- .NET Blog。因为你随时可以指定应用程序的探测路径,所以它可能让你的程序以各种不确定的方式加载程序,于是你的程序将变得很不稳定;可能完全崩溃到你无法预知的程度。...来进行合并,如果你愿意,也可以使用 ILMerge: .NET 使用 ILMerge 合并多个程序,避免引入额外的依赖 ---- 参考资料 Loading .NET Assemblies out

24630

.NET 应用程序支持直接调用 WebAssembly 模块

WebAssembly Runtime 现已添加 .NET Core API,开发者可直接在 .NET 应用程序调用 WebAssembly 模块。   ....NET 应用程序调用 WebAssembly 代码。...原生函数库可以先编译成 WebAssembly,然后包括 .NET Core 在内的许多平台就能使用这些 WebAssembly 模块,这将简化函数库的发布以及应用程序对这些函数库的依赖方式。   ...由于 WebAssembly 是面向网页设计的,网页是一种每次访问网站(读/写数据)都会执行不受信任代码的环境,WebAssembly 模块只能调用从主机环境明确输入的外部函数,而且只能在主机分配的内存区域进行读写数据...Mozilla 表示,WebAssembly 接口类型简化了应用程序与 WebAssembly 模块间来回传递复杂类型所需的“胶水代码”。

67020

GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

然后使用 strace 命令启动 .NET 程序。 strace dotnet /***/***.dll 启动后就可以看到程序的堆栈信息,还可以看到函数调用时的函数定义。...但是因为仅启动 .NET Core runtime 是没用的,还要启动 .NET 程序。 所以,要启动的 .NET 程序,要将其路径作为参数传递给 dotnet。...启动调试,目的是启动 .NET Core runtime 启动 .NET 程序,Linux 和 GDB 是无法直接启动 .NET 程序的。.... # 进入GDB 后 set args /***/***.dll 查看调用栈信息 以下两个 gdb 命令都可以查看当前调用堆栈信息,如果程序调用某个函数时崩溃退出,则执行这些命令,会看到程序终止时的函数调用堆栈...查看当前代码运行位置,如果程序已经终止,则输出程序终止前最后执行的函数堆栈。 where 使用 bt 可以看到函数的调用关系,哪个函数调用哪个函数,在哪个函数里面出现了异常。

1.3K30

.NET简谈组件程序设计之(初识远程调用)

在.NET1.0版本出来的时候,要想进行远程调用基本上都是通过WebService的方式。...而随着.NET2.0版本的出现,我们可以通过一个更加方便且高扩展性的框架来进行编写远程调用程序,也就是我们都比较熟悉的.NetRemoting。...[王清培版权所有,转载请给出署名] 在本人的“.NET简谈组件程序设计之(AppDomain应用程序域) ”一章中我简单的介绍了.NET托管运行时环境应用程序域(AppDomain)的概念。...任何跨越应用程序域的访问.NET都将它视为远程调用,不管是在同一个进程中的两个应用程序域,还是一台PC上的两个进程中的两个应用程序域,还是跨越网络的两个应用程序域,.NET都通过代理的方式进行调用。...那么如果一个进程中的应用程序域想调用另一个进程中的应用程序域的对象必须通过物理进程的承载才行,也就是涉及到了IPC的调用

27820

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

一、前世今生 .NET诞生以来,程序的动态加载和卸载都是一个Hack的技术,之前的NetFx都是使用AppDomain的方式去加载程序,然而AppDomain并没有提供直接卸载一个程序的API,而是要卸载整个...AppDomain才能卸载包含在其中的所有程序。...但是在.NET Core 3.0中,我最期待的一个特性就是对可收集程序的支持(Collectible AssemblyLoadContext)。...众所周知.NET Core中一直使用AssemblyLoadContext的API,来进行程序的动态加载,但是并没有提供Unload的方法,此次升级更新了这方面的能力。...在使用过程中自定义AssemblyLoadContext可以内部管理其中的程序,并对整体Context进行Unload。使用AssemblyLoadContext也可以避免程序名称和版本的冲突。

99930

在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 在合并完成之后,我们反编译可以发现程序集中已经包含了依赖程序集中的全部类型了。

1K30

“前.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的IOC容器取出对象,然后调用对象的方法,这种应用场景,最适合的还是只存在一个AppDomain,所以得考虑另外的方法来动态加载程序。...如果是“TypeName”的格式(即不写AssemblyName),则调用LoadTypeByIteratingOverAllLoadedAssemblies来加载程序。...也就是便利AppDomain.CurrentDomain中所有已加载的程序,对每个程序调用一次Assembly.GetType方法,看看哪个程序可以成功的返回类型。...通过试验,这种方式也是不可以的,因为一旦Assembly.LoadWithPartialName利用AppDomain.AssemblyResolve事件得到了程序之后,第二次再调用这个方法时,就不会再去触发...AppDomain.AssemblyResolve事件了,因为.net framework认为这个程序它是可以识别的,不需要再触发这个事件了。

66640

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

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

75990

在.NET调用存储过程

因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。...下面是它的定义: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。...存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。...中调用存储过程。...在VS2005里面新建一个控制台程序,新建一个方法如下: public void nopara() { SqlConnection con = new SqlConnection

2.1K10
领券