Tag: 反汇编

.NET中的对象布局结构使用反汇编程序

我有兴趣看到对象布局结构,并试图在visual studio中使用反汇编。 以下是我的代码: class myclass { public int m_a; } myclass myc = new myclass(); myc.m_a = 23; //I am setting a breakpoint after this line 我打开了Memory1窗口,在地址字段中输入myc。 我在输出窗口中获得了以下详细信息(使用Windows XP PC 32位和英特尔编译器): 0x0148B7BC 1c 93 a7 00 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 似乎在对象数据前面添加了一个额外的指针00a7931c,它将对象大小增加了4个字节。 我的困惑是文档说由于每个对象的标题,对象大小增加了8个字节。 有人可以指点我其他4个字节的位置吗?

如何在/ .Net中拦截来自/到第三方库的非虚拟方法的调用?

我认为我需要的是.net人称之为“透明动态代理”的东西,但我迄今为止看到的所有实现(Castle DynamicProxy,Spring.NET AOP等)都要求我至少执行以下其中一项: 将截获的方法声明为虚拟 包装类并创建包装器的实例而不是包装类 更改inheritance或实现接口 显然,如果调用者和被调用者都是非虚拟的,并且来自第三方封闭源库,那么我就无能为力。 如果C#是像Python这样的动态语言,我会这样做: foo = ThirdyPartyLibA.Foo() def interceptor(self, *args, **kwargs): do_something_before(self, *args, **kwargs) result = ThirdyPartyLibB.Bar.intercepted(self, *args, **kwargs) do_something_after(self, result, *args, **kwargs) return result foo.bar.intercepted = interceptor # bar is an instance of ThirdyPartyLibB.Bar foo.do_its_job() # Foo.do_its_job calls Bar.intercepted 我需要这个来改变ThirdyPartyLibA.Foo的不良行为,同时与ThirdyPartyLibB.Bar交互。 我确切知道导致这种行为的原因以及如何更改Foo或Bar来修复此错误,这要归功于dissasemblers。 一些(非常不可能工作)的想法: 反汇编ThirdyPartyLibA,在代码中进行更改并生成兼容的程序集(不太可能工作,因为它是一个强命名的程序集) 编辑二进制文件以使Foo的错误方法成为虚拟的,并改变它保持有效程序集所需的一切,这样我就可以使用动态代理(不太可能工作,也因为与上述想法相同的原因) 找到一个适合的透明动态代理实现(我认为没有基于这个论坛post: http : //www.pcreview.co.uk/forums/overriding-non-virtual-methods-using-il-and-reflection- emit-t2605695.html ) […]

从.NET DLL文件生成PDB?

我需要一些可以从DLL文件(C#.NET代码)生成PDB的东西,有没有免费程序可以做到这一点?

C#64位版本代码的反汇编视图比32位调试代码长75%?

编辑 我测试了32位的版本,代码很紧凑。 因此,下面是64位问题。 我正在使用VS 2012 RC。 调试是32位,Release是64位。 下面是调试然后发布一行代码的反汇编: crc = (crc >> 8) ^ crcTable[((val & 0x0000ff00) >> 8) ^ crc & 0xff]; 0000006f mov eax,dword ptr [ebp-40h] 00000072 shr eax,8 00000075 mov edx,dword ptr [ebp-3Ch] 00000078 mov ecx,0FF00h 0000007d and edx,ecx 0000007f shr edx,8 00000082 mov ecx,dword ptr [ebp-40h] 00000085 mov ebx,0FFh 0000008a and […]

修改C#编译的exe中的Emdeded String

我有一个问题,我需要能够有一个编译的exe(.net 3.5 c#),我将复制分发,例如在发送exe之前需要更改密钥。 每次需要新的exe时我都无法编译。 这是一个瘦客户端,将用作注册过程的一部分。 是否可以向具有空值的资源文件添加条目然后当请求进入时,另一个应用程序获取空白的默认瘦客户端,复制它,用所需数据填充空白值。 如果有,怎么样? 如果没有,你有什么想法吗? 我现在已经摸不着头几天了,这个限制是由于我需要工作的边界。 我的另一个想法是将值注入一个方法,我不知道我怎么会尝试这个。 谢谢。