阅读:2050回复:1
请问斑竹和各位高手?
不知大家看过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寄存器的作用,其它我却不懂。 请斑竹或哪位高手指点为什么应该这样取得? |
|
|
沙发#
发布于: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中未跟踪过。不知是否适用。 |
|