2010-06-23 11:18:41
涉及的技术内容包括:ASM、ANSI C、.NET/C#、Python、Linux/Ubuntu 等。
记录读书笔记、生活点滴。关注基础理论和开发……
除特别标注外,所有文章均为作者原创,转载请注明出处。谢谢!

  查看 "推荐文章目录"。  


  研发中心长期招聘开发人员,详情请点击 "Linux/C, Python 职位"、 ".NET/C# 职位"。
  雨痕内部技术交流群,欢迎熟识的朋友参与。 将 添加为您的 MSN 联系人即可。
  为杜绝垃圾广告的侵扰,只有注册用户可以发表评论和留言。
  如果有什么问题,可以单击右侧图标给雨痕发消息。( 绿色: 在线; 灰色: 脱机)
浏览模式: 普通 | 列表
12月, 2008 | 1

System.Buffer

[ 2008-12-25 00:19:19 | 作者: yuhen ]
System.Buffer 以字节数组(byte[])方式操作基元类型数组,相当于 C 语言的 (char*)int_pointer 指针操作。

1. Buffer.ByteLength

该方法范围基元类型数组累计有多少字节组成。
var bytes = new byte[] { 1, 2, 3 };
var shorts = new short[] { 1, 2, 3 };
var ints = new int[] { 1, 2, 3 };

Console.WriteLine(Buffer.ByteLength(bytes));  // 1 byte * 3 elements = 3
Console.WriteLine(Buffer.ByteLength(shorts)); // 2 byte * 3 elements = 6
Console.Writ
...

阅读全文…

字符串相关算法

[ 2008-12-24 19:58:28 | 作者: yuhen ]
今天在群里聊天,提及了 "编辑距离" 算法。好久不用,重新练练手,免得日后用时乱找。 [sweat]

1. Levenshtein Distance

该算法又称之为 "编辑距离",用于计算两个字符串的相似程度。原理很简单,就是返回将第一个字符串转换(删除、插入、替换)成第二个字符串的编辑次数。次数越少,意味着字符串相似度越高。

算法原理:Wikipedia - Levenshtein distance

Step1:

    人 民 共 和 时 代
  0, 0, 0, 0, 0, 0, 0
中 1, 0, 0, 0, 0, 0, 0
华 2, 0, 0, 0, 0, 0, 0
人 3, 0, 0, 0, 0, 0, 0
...

阅读全文…

简易修改实现 Anti Reflector

[ 2008-12-20 13:35:39 | 作者: yuhen ]
以下两种方法仅适合用来 "显摆",并不能保证程序集文件的安全。当然,对于 Anti Reflector 而言,效果还是不错的,最关键的是修改手段非常简单。

1. 错误的 NumberOfRvaAndSizes 值

在 .NET PE 文件结构中,Optional Header NumberOfRvaAndSizes 默认是 16 (0x10),并规定该值不能小于 16。我们只需将其修改成小于 0x10 即可。NumberOfRvaAndSizes 的 Offset 是 0x000000F4,使用任意 16 进制编辑器 (WinHex、UltraEdit 等) 即可完成修改。

uploads/200812/20_133725_1.png


效果如下:

uploads/200812/20_133729_2.png


2. 错误的 #GUID 值
...

阅读全文…

Windbg 分析 Dump File 简单演示

[ 2008-12-19 13:50:05 | 作者: yuhen ]
使用 Windbg 调试 Dump 文件是一种常用的手法,不同于 Attach Process,这种方式允许我们 "离线" 完成调试工作。Dump 文件保存了目标进程某个时间点的内存及相关程序信息镜像。本文只是一个简单的调试过程演示,更多细节可参考 Windbg 及 SOS.dll 的相关帮助。
class Program
{
    private List<Byte[]> list = new List<byte[]>();

    void Test1()
    {
        for (int i = 0; i < 10; i++)
        {
            list.Add(new byte[1024 * 1024 * 10]);
        }
    }

    void Test2()
    {
        new Thread(() => 
        {
            while (true)
            {
            }
        }).Start();
    }
...

阅读全文…

Hosting IronPython 2.0

[ 2008-12-18 15:50:03 | 作者: yuhen ]
随着 IronPython 2.0 的发布,.NET Dynamic Language Runtime 总算快成熟了。一直以来,我都期望着用动态脚本以粘合剂的方式编写架构体系中的变化剧烈的逻辑单元,既便于修改,又能灵活适合多变的业务场景。当然,我的目标是在 Platform Framework 中 Embedding Script Engine,而不是用 ipy.exe 去执行一个 "独立" 的 LogicTask。

首先去 CodePlex 下载 IronPython 2.0,然后创建 ConsoleApplication 用于学习测试。还有,别忘了添加引用和 Namespace。
using IronPython.Hosting;
using IronPython.Compiler;
using IronPython.Runtime;
using Microsoft.Scripting;
...

阅读全文…
1