阅读:1802回复:7
为何分析获取到的进程路径名蓝屏?
通过对peb进行操作 我们可以获取到当前进程的完整路径的punicode类型的字符串processname,但是当我们有时候需要分析该字符串时候,比如 sccstr(...,processname->Buffer,l"\\c:good")会蓝屏,dbg跟踪结果是process->buffer指针是非法的。。。。他指向地地址。。
为什么出现这样的问题?怎么解决谢谢 |
|
沙发#
发布于:2007-06-27 15:18
当 利用peb获取到了当前进程的完整路径pname后,如果想进行下面的操作 比如:想比较该路径是否含有特定字符用:if((wcsstr(name->Buffer,L"\\C:")))
{...} 就会死机,为什么呢????? |
|
板凳#
发布于:2007-06-27 15:41
你是直接用PEB中的成员BUFFER还是自己额外申请的BUFFER?
|
|
|
地板#
发布于:2007-06-28 15:24
wcsstr是以short 0为结尾来查找字串,如果buffer边界恰好不是short 0 .....
|
|
地下室#
发布于:2007-06-29 10:00
近日在通过peb获取到进程的完整路径然后需要对他进行分析的时候就出错了。代码如下 :
获取当前进程的完整路径的代码: PEPROCESS CurrentProcess = NULL; PUNICODE_STRING ProcessName=NULL; ULONG OffSet=0; CurrentProcess = PsGetCurrentProcess(); OffSet = *(PULONG)((ULONG)CurrentProcess + 0x1b0); OffSet =#(PULONG)((ULONG)CurrentProcess+0x10); ProcessName = (PUNICODE_STRTING)(OffSet+0x38); 这里就可当前的进程的完整路径保存到ProcessName里面了 。 下面开始对他进行分析 if(wcsstr(ProcessName->Buffer,L"\\c:")) { .... } 这就要出错。 我也想过另外自己造个buffer把processname里面的buffer拷贝出来再使用,但是还是不行 错误是一样的。 |
|
5楼#
发布于:2007-06-29 13:17
根据你的代码分析,你是先取得PEB的指针,然后取得PEB里的指向_RTL_USER_PROCESS_PARAMETERS的ProcessParameters,然后取ImagePathName
但是你的代码里 PEPROCESS CurrentProcess = NULL; PUNICODE_STRING ProcessName=NULL; ULONG OffSet=0; CurrentProcess = PsGetCurrentProcess(); OffSet = *(PULONG)((ULONG)CurrentProcess + 0x1b0); OffSet =#(PULONG)((ULONG)CurrentProcess+0x10);<<<------这一行显然有问题,改成 //OffSet =*(PULONG)((ULONG)OffSet +0x10); 试试 ProcessName = (PUNICODE_STRTING)(OffSet+0x38); |
|
6楼#
发布于:2007-06-29 16:31
楼上的说的是对的 那一行的确是错了但只是我的笔误. 事实上就算改过了还是一样会出错, 这样做的话 只要打开word就会死掉. 但是其他程序不会存在这样的问题. 所以提出来给大家 希望大家能多多指点谢谢
|
|
7楼#
发布于:2007-06-29 19:20
你应该明白 cstr,wstr和unicode_string的不同,前两个是以\0结尾,最后一个是以长度标识的
你的用法,早晚要死机...... |
|
|