首页
社区
课程
招聘
[旧帖] [邀请码已发][原创]关于VC下的inline 汇编, 由《非API检测操作系统版本信息》想到的,为邀请码而开新贴 0.00雪花
发表于: 2009-7-14 19:37 1836

[旧帖] [邀请码已发][原创]关于VC下的inline 汇编, 由《非API检测操作系统版本信息》想到的,为邀请码而开新贴 0.00雪花

2009-7-14 19:37
1836
在《非API检测操作系统版本信息》中使用了如下inline 汇编
_asm
    {
      pushad
      mov ebx,fs:[0x18] ; get self pointer from TEB
      mov eax,fs:[0x30] ; get pointer to PEB / database
      mov ebx,[eax+0A8h] ; get OSMinorVersion
      mov eax,[eax+0A4h] ; get OSMajorVersion
      mov j,ebx
      mov i,eax
      popad
    }
其实如此复杂是没有必要的,上述代码的关键是取得PEB,而且PEB也是经常使用的,取PEB可以定义如下函数:
#pragma warning (push)
#pragma warning (disable:4035)        // 关闭报警 4035 (函数没有返回值)
_inline char* GetPEB() { __asm mov eax, fs:[0x30]}
#pragma warning(pop)
上面的取版本则可以重写如下:
        char* pPEB=GetPEB();
        DWORD dwMajor=*(DWORD*)(pPEB+0xa4);
        DWORD dwMinor=*(DWORD*)(pPEB+0xa8);
        ......
由于是inline函数,汇编代码中不会因GetPEB而产生call,无论从C源代码或是汇编代码都会更清爽些

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
2
学习了,浏览了你发的帖子,很强的功底,以后请多多分享了,谢谢支持!
发邀请码
2009-7-14 20:21
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,学习了,比我的好多了。
2009-7-14 20:29
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
非常感谢, 我来这的目的就是学习与分享!
2009-7-14 20:41
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
5
恩 你功底很扎实 以后多来这里照顾我们下了
2009-7-14 20:42
0
游客
登录 | 注册 方可回帖
返回
//