能力值:
( LV12,RANK:210 )
|
-
-
2 楼
可以使用管道来获取ml.exe的输出信息
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
最初由 thebutterfly 发布 可以使用管道来获取ml.exe的输出信息
可不可以讲详细一些?最好举个例子!
谢谢!
|
能力值:
(RANK:1010 )
|
-
-
4 楼
管道属于进程间通信方式。
主要有匿名管道和命名管道两种。
一般在核心编程之类的书籍中出现
原本正打算这两天写篇关于这方面的文章,
只可惜一直没有时间
|
能力值:
( LV12,RANK:210 )
|
-
-
5 楼
管道是windows环境下进程之间相互通信的手段之一,它实际上是一段共享的内存区,进程把共享消息放在那里。并通过一些 API 提供信息交换。管道是两个头的东西,每个头各连接一个进程或者同一个进程的不同代码。使用管道的好处在于:读写它使用的是对文件操作的 api,结果操作管道就和操作文件一样。即使你在不同的计算机之间用命名管道来通信,你也不必了解和自己去实现网络间通信的具体细节。
命名管道是由服务器端的进程建立的,管道的命名必须遵循特定的命名方法,就是 "\\.\pipe\管道名",当作为客户端的进程要使用时,使用"\\计算机名\\pipe\管道名" 来打开使用,具体步骤如下:
服务端通过函数 CreateNamedPipe 创建一个命名管道的实例并返回用于今后操作的句柄,或为已存在的管道创建新的实例。
服务端侦听来自客户端的连接请求,该功能通过 ConnectNamedPipe 函数实现。
客户端通过函数 WaitNamedPipe 来等待管道的出现,如果在超时值变为零以前,有一个管道可以使用,则 WaitNamedPipe 将返回 True,并通过调用 CreateFile 或 CallNamedPipe 来呼叫对服务端的连接。
此时服务端将接受客户端的连接请求,成功建立连接,服务端 ConnectNamedPipe 返回 True建立连接之后,客户端与服务器端即可通过 ReadFile 和 WriteFile,利用得到的管道文件句柄,彼此间进行信息交换。
当客户端与服务端的通信结束,客户端调用 CloseFile,服务端接着调用 DisconnectNamedPipe。最后调用函数CloseHandle来关闭该管道。
一个控制台有三个句柄:标准输入、标准输出和和标准错误句柄,标准输入、标准输出句柄是可以重新定向的,你可以用匿名管道来代替它,这样一来,你可以在管道的另一端用别的进程来接收或输入,而控制台一方并没有感到什么不同,就象 Dos 下的 > 或者 < 可以重新定向输出或输入一样。通常控制台程序的输入输出如下:
(控制台进程output) write ----> 标准输出设备(一般是屏幕)
(控制台进程input) read <---- 标准输入设备(一般是键盘)
而用管道代替后:
(作为子进程的控制台进程output) write ----> 管道1 ----> read (父进程)
(作为子进程的控制台进程input) read <----> 管道2 <---- write (父进程)
使用匿名管道的步骤如下:
使用 CreatePipe 建立两个管道,得到管道句柄,一个用来输入,一个用来输出
准备执行控制台子进程,首先使用 GetStartupInfo 得到 StartupInfo
使用第一个管道句柄代替 StartupInfo 中的 hStdInput,第二个代替 hStdOutput、hStdError,即标准输入、输出、错误句柄
使用 CreateProcess 执行子进程,这样建立的子进程输入和输出就被定向到管道中
父进程通过 ReadFile 读第二个管道来获得子进程的输出,通过 WriteFile 写第一个管道来将输入写到子进程
父进程可以通过 PeekNamedPipe 来查询子进程有没有输出
子进程结束后,要通过 CloseHandle 来关闭两个管道。
节选自罗云彬的win32汇编教程
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这个是Radasm里面的一个编辑控件的使用例子,你可以好好研究一下
http://www.radasm.com/projects/MasmEd.zip
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
非常非常感谢!!
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
一个比较笨的方法:
在命令行参数后加上“>fielname.tmp”(引号不要加),"filename.tmp"可以取任意名字,还可以加上路径,运行过后"ml.exe"、“link.exe”等的控制台输出就被重定向到了文件filename.tmp里,然后再从文件“filename.tmp”里读取。
其实这也是间接利用了管道(pipe)!
|
|
|