flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
阅读:2050回复:1

请问斑竹和各位高手?

楼主#
更多 发布于:2001-04-27 11:55
不知大家看过Pietrek写的《Windows 95系统编程奥秘》没有?
我以前大致看过一篇,云里雾里。过了两年后,以为水平大涨,
但现在再看,仍有很多不懂,现有疑问一:
Win32 Walk是不是只能针对95,而不能对98,因为所有进程和
县城以及模块都显示为无效,如“Not a valid process”,
我编译程序,跟踪进去,却发现PPROCESS_DATABASE ppdb
没有弄对,我的ppdb->Type始终不等于5,而书上讲必须为
KERNEL32 object type,即=5。我怀疑98是否有变?
我不太懂ppdb的取得,它是按以下取得:
ppdb = PIDToPDB( GetCurrentProcessId());

PPROCESS_DATABASE PIDToPDB( DWORD pid )
{
    return (PPROCESS_DATABASE)(pid ^ Unobsfucator);
}
其中Unobsfucator是按以下取得:
    __asm {
            mov     ax, fs
            mov     es, ax
            mov     eax, 18h
            mov     eax, es:[eax]
            sub     eax, 10h
            xor     eax,[tid]
            mov     [Unobsfucator], eax
    }
书上仅讲述了FS寄存器的作用,其它我却不懂。
请斑竹或哪位高手指点为什么应该这样取得?
一剑西来,天外飞仙
oneq
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2001-11-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-04-28 17:51
我目前正好在看《奥秘》,在WIN ME中,进程和线程的结构都与win 95有一些差别,Unobsfucator的取得需改为:
__asm {
mov ax, fs
mov es, ax
mov eax, 18h
mov eax, es:[eax]
sub eax, 8h
xor eax,[tid]
mov [Unobsfucator], eax
}
[tid]中应是当前线程。另:fs:[30h]中的指针指向是当前进程的DATABASE,也可由此得到Unobsfucator;ppdb->Type也不等于5,应是6(WORD),线程的Type为7(WORD),高位另有它意。在win 98中未跟踪过。不知是否适用。
游客

返回顶部