注册 登录
编程论坛 操作系统内核开发

求WinMain函数的一个参数lpCmdLine所指向的进程命令行缓冲区的理解,作用与应用?

wangxiaosu 发布于 2010-12-27 12:24, 1938 次点击
请问各位大侠WinMain函数的一个参数lpCmdLine(指向进程命令行缓冲区的指针):
(1)该如何理解该参数指向的命令行内存,即主要讲讲为什么要设置这样的一个命令行内存?
(2)进程命令行缓冲区中都放了些什么数据?
(3)命令行内存中保存的数据的作用是什么?
(4)什么情况下会用到该参数指向的命令行内存中的数据?
(5)该如何应用该参数指向的命令行内存中的数据?
(6)结合您个人的开发经验,谈谈您在开发软件时对它的使用情况?

为了能更好的理解进程的命令行,请各位大侠按上面的提问回答,回答时标明是第几个问题,谢谢!

我对它已有的理解(可能有误,敬请赐教):
(1)该参数是一个指针,指向内存的一块地址,系统在创建进程时,会将一个命令行缓冲区(包含已执行文件的完整的路径)地址传给它;
(2)该命令行内存始终不会是空的,至少它的第一个标记是可执行文件的名字;
(3)进程可以接收只有一个字符的命令行,即用于终止字符串的0;
(4)C运行库的启动代码开始执行一个GUI程序时,会调用GetCommandLine()函数来获得进程的完整命令行,忽略可执行文件的名称,然后将指向命令行剩余部分的指针传给
     WinMain函数的lpCmdLine参数;
(5)我们可以在命令行的内存空间中写入内容,但不建议;
(6)调用GetCommandLine函数返回的总是同一个缓冲区的地址,所以不建议向它指向的缓冲区中写入数据,因为一旦那样做就不知道它原来的内容了;可以将它中的内容拷贝                      到自己的缓冲区中再写,改等。
12 回复
#2
你们都要疼我哦2010-12-28 13:42
楼主的理解很牛叉呀,居然跟最新版的核心编程上的理解一样

这个以前没明白 现在也没明白
期待楼主搞明白后 发出来学习
#3
wangxiaosu2010-12-28 21:58
回复 2楼 你们都要疼我哦
是的,我的理解就是那本书上的,读那本书我只知道那么多了,所以把还不明白的贴出来
#4
你们都要疼我哦2010-12-29 04:01
楼主是徐州矿大的?

你为什么不顺藤摸瓜顺手牵羊的多翻几页去看后面讲的CreateProcess呢?
如果多翻几页  至少你也不会有6个问题这么多了

学这些东东急不来,你也应该暂时放弃这种 完美而详尽 的理解企图。
#5
wangxiaosu2010-12-29 12:05
回复 4楼 你们都要疼我哦
我是矿大的。
我读的没那么快,喜欢将一节不懂得记下来;
我只是觉得自己应该去多了解这些缓存,内存...的东西,将它们的内容搞清楚,这对网络攻防应该很重要吧,希望自己读研究生时读的是这个方向的
这个东西对个人来说像是无底洞,没什么完美不完美的,就看自己愿不愿意去钻研,将它做的更深
#6
你们都要疼我哦2010-12-29 16:21
偶只能说 这些东东不比某个算法 某个语言上的知识点,可以一次性或者是很快的搞清楚 搞的很透彻 达到 完美而详尽的地步。
那本书对于一般人学习来说,已经算是很低层了,但是对于真正想学习 系统  安全 这块知识的人来说,只算是很普通的一本。
这条路从一开始就会让人时刻感到挫折 挫折 还是挫折。。。

从你主贴上来看,你还没完全适应这样的学习方式。
这方面的学习是孤独的。。。。。。

在微软的地盘混,就得痛苦啊

你既然开始看这书 就应该再买本 张银奎 的软件调试 那本书,windbg的使用很重要的。
#7
wangxiaosu2010-12-29 21:00
回复 6楼 你们都要疼我哦
en,我也只有一年的Windows程序设计经验,感觉很喜欢就继续做了;你建议的书,谢了
#8
wangxiaosu2010-12-30 21:55
为什么每次总是催着结贴,又没有人给我的问题作出正面回答,我为什么要给分?是不是只要在楼主的回复中有“谢谢”之类的词语,那版主就可以催着结贴呀?
#9
wangxiaosu2011-01-07 12:47
回复 4楼 你们都要疼我哦
只有本站会员才能查看附件,请 登录
#10
你们都要疼我哦2011-01-07 16:25
楼主真执着。 还是看看软件调试 学学OD 用用windbg。

启动函数获得命令行 返回指针放EAX
只有本站会员才能查看附件,请 登录


完整命令行指针1520A0内容
只有本站会员才能查看附件,请 登录
#11
你们都要疼我哦2011-01-07 16:31
进入WINMAIN函数后 堆栈中所传递参数
只有本站会员才能查看附件,请 登录


1520F4为传递给WINMAIN的命令行指针 内容为
只有本站会员才能查看附件,请 登录



#12
你们都要疼我哦2011-01-07 16:38
1520F4为传递给WINMAIN的命令行指针,启动函数中获取完整命令行地址为1520A0
截去的就是可执行文件的路径,上图1520F4地址从EXE后面开始。
至于说这个东东有什么用 从何处开始 从何处调用。。。 咳 偶的看法是这个地方不是值得深究的。有兴趣的话,自己跟踪调试一下。
1