阅读:2467回复:3
如何在核心态获得Commandline
各位大虾:
请问如何在核心态获得进程的命令行。在核心态下可以获得进程的进程名和进程号。 |
|
最新喜欢:xiangs... |
沙发#
发布于:2001-06-01 09:27
000107D0 call j_KeGetCurrentIrql
000107D5 cmp al, 2 ;DISPATCH_LEVEL 000107D7 jnb short loc_107E8 000107D9 lea eax, [ebp+var_4] 000107DC push eax 000107DD call j_PsGetCurrentProcessId 000107E2 push eax 000107E3 call j_PsLookupProcessByProcessId 000107E8 000107E8 loc_107E8: 000107E8 mov eax, [ebp+var_4] ;peprocess 000107EB test eax, eax 000107ED jnz short loc_107F8 000107EF call ds:IoGetCurrentProcess 000107F5 mov [ebp+var_4], eax ;peprocess 000107F8 000107F8 loc_107F8: 000107F8 mov ecx, dword_166D0 ;win2k off=1fc 000107FE mov esi, [ebp+arg_0] 00010801 add ecx, eax 00010803 push 10h ;maxlength 00010805 push ecx 00010806 push esi ;eprocess+1fch 00010807 call ds:strncpy 以上的代码从tdimon的驱动tdimsys中截取,它在取进程名时,会先判断当前的中断请求级而采取不同的办法(不同的系统服务要求在不同的irql上运行)。它取得指向执行体进程块的指针后,就利用在初始化时取得的偏移(WIN2K下是1FCH)来定位当前进程名。 |
|
板凳#
发布于:2001-06-07 14:03
这样获得只是进程名。并且只需调用PsGetCurrentProcess()就能获得执行体进程块的指针。但不是进程的命令行
|
|
地板#
发布于:2001-06-20 16:16
http://www.chinawolf.com/~lu0/tips/tips.html
8.VXD/DRIVER在98/2000下获取当前进程的命令行. by 陆麟 2000.8.3 2000零售版的KERNEL32.DLL为当前进程ANSI版命令行保留的地址为77EE0694. 一个DRIVER在FastIoDeviceControl里进行处理.也就是:MOV EAX,[77EE0694H],EAX为指向ANSI版本CMDLINE的指针. 在98零售版上,有点复杂. 要用如下代码: MOV EAX,[BFFFC9CDCH] MOV ECX,[EAX] MOV EAX,[ECX+C0H] TEST EAX,EAX JNZ ERROR MOV EAX,[ECX+40H] MOV EAX,[EAX+8] 现在,EAX为指向ANSI版本CMDLINE的指针. |
|
|