思立's profile我不是柠檬BlogListsGuestbookMore Tools Help

Blog


    June 26

    一个Thunk实现-半抄袭半自已研究

    #pragma pack(push, 1)

    template

    <

    typename

    thk, // The class that contains the function to be called.

    typename

    pfn, // The function pointer type of the function you'd like called

    typename

    pfnCallback // The function pointer type that Windows was expecting to call

    >

    class cmsThunk

    {

    public

    :

    cmsThunk()

    {

    m_asm =

    reinterpret_cast<asm_block*>(::VirtualAlloc(NULL, sizeof(asm_block), MEM_COMMIT, PAGE_EXECUTE_READWRITE));

    if (m_asm != NULL)

    {

    // This is our assembly language routine:

    // mov dword ptr [esp+0x4], pThis

    // b8 aabbccdd mov eax, ourfxn ; Place our routine's address in eax

    // jmp eax ; run our routine.

    //

    m_asm->m_mov = 0x042444C7;

    m_asm->m_this = NULL;

    m_asm->m_mov_eax_xb8 = 0xb8;

    m_asm->m_pfn = NULL;

    m_asm->m_jmp_eax_byte1_xff = 0xff;

    m_asm->m_jmp_eax_byte2_xe0 = 0xe0;

    }

    };

    ~cmsThunk()

    {

    if (m_asm != NULL)

    ::VirtualFree(

    reinterpret_cast<LPVOID>(m_asm), 0, MEM_RELEASE);

    };

    // Request a pointer to the newly created callback.

    pfnCallback GetThunk(thk* pthis, pfn pfxn);

    protected:

    struct asm_block

    {

    DWORD m_mov;

    thk* m_this;

    unsigned char m_mov_eax_xb8;

    pfn m_pfn;

    unsigned char m_jmp_eax_byte1_xff;

    unsigned char m_jmp_eax_byte2_xe0;

    } *m_asm;

    // This is, though, intel specific.

    #ifndef

    _M_IX86

    #error

    This thunking code is only functional on Intel x86 platforms

    #endif

    // end of intel-inside check.

    };

    #pragma

    pack(pop)

    // Description: This routine populates the assembly language thunk and returns the address of the thunk.

    template

    <class thk, class pfn, class pfnCallback>

    pfnCallback cmsThunk<thk, pfn, pfnCallback>::GetThunk(thk* pthis, pfn pfxn)

    {

    if (m_asm != NULL)

    {

    m_asm->m_this = pthis;

    m_asm->m_pfn = pfxn;

    }

    FlushInstructionCache(GetCurrentProcess(),

    this, sizeof(cmsThunk));

    return reinterpret_cast<pfnCallback>(m_asm); //lint !e1536 !e611

    };

    June 16

    激流?顺流逆流

    终于看完了二集<激流中国>,这部片在网上引起轰动也不是一两天了,几乎是职业愤青的我,却拖到了这个时候才看.看富人与农民工时,几乎落泪,说实话,我都不记得上一次被催泪还是什么时候了.

    现在想想,觉得很是讽刺,这样的记录片,国内是永远不会去拍的.甚至于日本人给我们拍好后,稍一出名,真理部就急忙封杀.行政封杀有什么用?网络技术如此 先进的今天,只要稍花心思,随便哪个真理部封杀的东西,都可以轻易搞到,然后再反过来笑他们愚蠢,笑他们自欺欺人.另外觉得讽刺的是,假想百年之后,我们 的子孙再来考察如今的这个时代,最真实最可信材料都来自他人,比如NHK,比如BBC,而他们的祖先,却只会录些颂圣之作,即便有责任感,也只能小心翼翼 地在现实和禁令底线间找平衡.

    许多人看完的感觉是,穷人可怜,富人无耻,但我并不赞同这样的观点.现在的中国,残忍和现实到了极点,那些身处底层的人,生活痛苦到了极点.他们的处境, 残忍到让那些过着正常生活,富裕生活的人感到可耻的地步.但是,谁没有追求幸福生活的权利?我们不应该为别人不幸来惩罚自己.如果有责任感,可以大声疾 呼,没有的话,守保好自己的生活也很好.像片中的大富豪,新贵族,他们的赚钱都没有什么不对,资本市场上,人都是逐利的.赚钱是好事,利用人脉赚钱也很 好.虽然片中富人和农民工的生活写照构成了鲜明对比,但是我认为这只是反映了社会现实,而非鼓动人们仇富.NHK的纪录片,总是非常之冷静,鲜有所谓的道 德批判在里面.

    真正应该批判是谁?大家心里都明白.富豪生日宴会上,高官们的奴颜媚骨尽显. 而那些农民工呢?他们完全被政府抛弃,他们,和他们的家庭,完全处于自生自灭的状况.教育要钱,医疗要钱,生活要钱,而所有的这些钱,全是那些朴实善良的 农民工们一分一文地卖苦力得来的.完全是应该拖以援手的弱势群体,这时政府去哪儿了呢?官员们大概还醉倒在富豪们的酒宴上吧.

    我并不认为平均主义是好,一个社会,有一定贫富差距,才有发展的动力.但是,这一切的前提是有一个公平合理的外部环境.像中国这样,贫富两极分化如此严 重,贫富两极之间沟壑也越来越宽,富人垄断一切,贫者没有半点机会,甚至于为基本的生存发愁.这样的社会,发展下去,我真不知道会怎样.我只是觉得,农民 工的生活越来越艰难,如果他们哪天发现,无论怎么努力,也养活不了自己和远在故乡的亲人,他们中间有不少人大概会铤而走险,去偷,去抢,男为盗,女为娼, 因为除此之外,也没有别的活路了.
    June 09

    最佳金句-来自连岳

    一个人的勇气与耐性,只能支撑若干次的挫折,我认为不要把它浪费在小事上,留着它,培养它,壮大它。有一天,你会像巴尔扎克一样,需要用它来征服巴黎;你会像汉尼拔将军一样,需要用它来翻越暴风雪中的阿尔卑斯山。
    zt from 连岳《我是鸡汤》
    June 07

    还有没有天理?

    最近GFW疯了,彻底疯了.这就是和谐社会啊.和谐吧,和谐吧,总有一天我们上网看到的除了一本正经的谎言,就是新浪的黄色小广告.什么什么互联网,这么多网站不能使用,我能去告电信吗?
    订阅的blog挂掉一半,除了牛博的,还有大牛的.咱们的政府就和阿Q没两样,本来只是不能说"癞",现在"光"啊,"亮"啊也不能说了.但是,别人不说,你照样是头顶长疮,脚底流胧.防民之口,甚于防川.这样有意思吗?
    这些封了就算了,为什么连flickr也封?国内这么多付费用户,他们的钱都白交了,交了钱却享受不了服务,这不是坑自己的国民,便宜外国人吗?先是维基,再是blogspot,现在连flickr都不能用了.下一个是什么呢?Youtube?
    封吧,封吧,和谐吧,和谐吧,和谐到无谐可和的地步,就是他们的灭亡之日.
    June 04

    一十八年如一梦

    我们大概还在梦中......醒来发现原来自己住在Matrix里面.
    June 01

    今日厦门

    万人大散步,一起反屁叉!
    看图说话!