奇葩的编译器 ULONG 为啥要movsx byte ptr?

真的是第一次遇到这种编译器解释,年轻人,见识少啊。

if(*(DWORD*)&nInstructions[0] == 0x878af88bUL)

结果是:

1: kd> u b126f1e5
xxxxxx!TryToX+0x1c5 [e:\drv\xxxx\xxxx.c @ 639]:
b126f1e5 0fbe1590e926b1  movsx   edx,byte ptr [xxxxxx!nInstructions (b126e990)]
b126f1ec 81fa8b000000    cmp     edx,8Bh
b126f1f2 0f8598000000    jne     xxxxxx!TryToHookNtWriteVirtualMemory+0x270 (b126f290)
b126f1f8 0fbe0591e926b1  movsx   eax,byte ptr [xxxxxx!nInstructions+0x1 (b126e991)]
b126f1ff 3df8000000      cmp     eax,0F8h
b126f204 0f8586000000    jne     xxxxxx!TryToHookNtWriteVirtualMemory+0x270 (b126f290)
b126f20a 0fbe0d92e926b1  movsx   ecx,byte ptr [xxxxxx!nInstructions+0x2 (b126e992)]
b126f211 81f98a000000    cmp     ecx,8Ah

从movsx开始我就隐约有点蛋疼了,不是ULONG互相比较吗,为啥要一个字节一个字节的movsx + cmp?接着果然蛋疼了:

1: kd> db nInstructions
b126e990  8b f8 8a 87 40 01 00 00-00 00 00 00 94 53 5b 80  ....@........S[.
b126e9a0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
b126e9b0  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

果不其然:

Breakpoint 2 hit
xxxxxxx!TryX+0x1c5:
b138b1e5 0fbe1590a938b1  movsx   edx,byte ptr [xxxxxxx!nInstructions (b138a990)]
1: kd> r edx
edx=ffffff8b

条件不满足,然后呢?改成这样就过了,你逗我?

if((ULONG)*(DWORD*)&nInstructions[0] == (ULONG)0x878af88bUL)

这回判断正常了:

1: kd> u b13931e5
xxxxxxx!TryX+0x1c5 [e:\drv\***.c @ 639]:
b13931e5 813d902939b18bf88a87 cmp dword ptr [xxxxxxx!nInstructions (b1392990)],878AF88Bh

标签:none

已有 14 条评论

  1. 你好 你好

    您好。看了您的很多篇文章,您使用过的调试工具,您说了的术语,让我领悟到了我对缓冲区溢出这个领域一无所知,我居然以为只学c语言就能在这个领域驰骋。
    同时我意识到了我的急功近利,十几天的c语言学习却连你写的代码都看不懂。
    我多么幸运我看到了您的博客,我感到计算机领域的奇妙。我决定扬帆起航,重新学习!
    但是正如蒹葭中的"所谓伊人,在水一方,溯洄从之,道阻且长。"所说,这条路长且千难万阻。
    我真切希望您抽出一点宝贵的时间能向罗盘一样给我指引航行的方向,还有所要购买的"粮食",所要了解的"领域"!
    最后祝您的技术越来越好,写的博客也越来越好!

    1. 都是慢慢积累的过程~相互学习共同进步~~

      1. 你好 你好

        哦!懂了!我原本以为你会精彩的回答我!但没想到你回复给我更为精彩的一句!这句话胜过千言万语啊!

        1. C C++的坑实在是太多了,10天左右有个基础的话差不多,这个东西就是一直耗时间边写边学慢慢积累啦
          至于需要的东西,如果你觉得哪一个方向比较合适,专门去向那边发展就好啦,看你提到缓冲区溢出,这个入门的话可以看看《0day:软件漏洞分析技术》,但是这个书有些年头了,新的东西还是看看黑客大会上面大神发的pdf ppt吧

        2. 当然还是建议在理解系统和原理的基础上去学这些~

          1. 你好 你好

            我就是对计算机理解不深~~~
            对了黑客大会的pdf在哪有下载?

          2. https://www.blackhat.com/us-14/archives.html
            http://www.blackhat.com/asia-14/briefings.html
            这里有详细的记录

            有需要的资料也可以去google搜搜 上不去的话可以用886404.com试试

          3. 你好 你好

            对了,我听说学习破解都不用学汇编,学缓冲区溢出要懂汇编吗?

          4. 不用学完汇编吧 不是不要
            溢出这个不会汇编的话 溢出了有何用。。就看程序崩溃吗= =

          5. hi hi

            不好意思,昨天晚上刚开始学缓冲区溢出,才看几页就有好几个问题了,能否劳烦您一下?联系一下?

          6. 50189695
            直接发问题吧,公司事情忙完以后,在线的时候我看下

  2. 你好 你好

    ~~~

  3. 轩轩 轩轩

    您可以建个群让我们交流下吗?我看了这本书,还是有很多地方 不懂

    1. 现在暂时还没有维护群之类的,有什么需要交流的可以联系我的QQ 50189695

添加新评论

captcha
请输入验证码