<老张>
普通会员
发贴: 459
积分: 0
来自:
注册日期: 2006-05-15
发表时间: 2006-10-28 00:07:42
--------------------------------------------------------------------------------
http://www.vckbase.com/document/viewdoc/?id=1685
我们都知道,在程序里获取命令行参数很简单,WinMain函数会以参数的形式传递给我们,或者可以调用API GetCommandLine 获取。但是GetCommandLine函数不接受参数,获取的只是自己程序的命令行参数。那么如果我们想获取别的应用程序的命令行参数应该怎么办呢?
有的同学说,既然GetCommandLine只能获取本程序的命令行参数,我们可以在其它进程里插入一个Dll,在那个进程的地址空间调用GetCommandLine函数,然后传回来就可以了。这样好像有点儿不太友好。让我们想想还有没有别的办法。
我们想,自己的命令行参数既然随时都可以获取到,那么在该进程里一定有一个地方存放它。那么在哪儿呢?看一下GetCommandLine函数的反汇编代码,我们发现,原来世界是如此的美好!
以下是WinXP系统的GetCommandLine函数反汇编代码:
.text:7C812C GetCommandLineA proc near
.text:7C812C mov eax, dword_7C8835F4 //dword_7C8835F4 就是命令行参数字符串的地址
//该指令机器码为 A1 F4 35 88 7C,从第2个字节开始的4个字节就是我们要的地址
.text:7C812C92 retn
.text:7C812C92 GetCommandLineA endp
既然知道了放在哪儿了,我们自己去拿就可以了。因为GetCommandLine函数的地址在各个进程内都是一样的,所以可以直接用我们进程里的地址。
<---- 以上言论仅代表本人立场 ---->
__________________
你要想明白,
我喝的比较多!
阿狗
普通会员
发贴: 46
积分: 0
来自:
注册日期: 2006-10-27
发表时间: 2006-10-30 16:51:42
--------------------------------------------------------------------------------
这么容易……当时可是害得我用了CreateRemoteThread才搞定的
<---- 以上言论仅代表本人立场 ----> |
|