| 
 | 
 
VC++是这样来着: 
 
ret=bind(listenFD,(sockaddr *)&server,sizeof(server)); 
   ret=listen(listenFD,2); 
   //如果客户请求830端口,接受连接 
   int iAddrSize = sizeof(server); 
   SOCKET clientFD=accept(listenFD,(sockaddr *)&server,&iAddrSize); 
 
   STARTUPINFO si; 
   ZeroMemory(&si,sizeof(si)); 
   si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; 
   si.wShowWindow = SW_HIDE; 
   si.wShowWindow = SW_SHOWNORMAL; 
    
   si.hStdInput = si.hStdOutput = si.hStdError = (void *)clientFD; 
   char cmdLine[] = "cmd.exe"; 
   PROCESS_INFORMATION ProcessInformation; 
   //建立进程     
   ret=CreateProcess(NULL,cmdLine,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation); 
    
   return 0; 
} 
 
这个代码实现了cmd的输出转向,但是用汇编我不知道怎么搞,一般我是用CreateProcess直接执行命令行了..... 
. 
. 
. 
. 
 
    invoke    WSAStartup,0202H,addr @wsaData ;初始化WSAStartup库 
       invoke    RtlZeroMemory,addr @stAddr,sizeof sockaddr_in ;清空内存 
       mov    @stAddr.sin_family,AF_INET ;设置IP格式 
       invoke    htons,TCP_PORT ;设置端口 
       mov    @stAddr.sin_port,ax ;保存 
       mov    @stAddr.sin_addr,INADDR_ANY ;设置IP地址 
       invoke    socket,AF_INET,SOCK_STREAM,0 ;加载套接字 
       .if    eax != INVALID_SOCKET 
       mov    hScoket,eax ;保存句柄 
       .endif 
       invoke    bind,hScoket,addr @stAddr,sizeof sockaddr_in ;绑定 
       .if    eax != SOCKET_ERROR 
       invoke    listen,hScoket,5 ;开始监听,默认连接5个 
       .endif 
       invoke    accept,hScoket,NULL,NULL ;如果有客户端连接,马上确定 
. 
. 
invoke    recv,hScoket1,addr szBuffer,1024,0 ;开始接收命令 
. 
. 
invoke    GetStartupInfo,addr stStartUp 
       invoke    CreateProcess,NULL,addr szBuffer,NULL,NULL,NULL,\ ;是的话就处理 
           CREATE_NO_WINDOW,NULL,NULL,addr stStartUp,addr stProcInfo 
 
这样挺麻烦的,如果能直接实现cmd输出转向,那就非常的好了 |   
 
 
 
 |