首页
社区
课程
招聘
[求助]求助一个bind问题
发表于: 2010-3-12 19:41 3007

[求助]求助一个bind问题

2010-3-12 19:41
3007
使用的是罗老大的代码改的一段代码,用于在本地bind一个端口,然后接受一个连接,目的在于测试是否能绑定成功并且能响应一个连接,后面的多线程的接受工作先不谈。

其中_ListenThread是导出函数。
用外部程序调用这个函数。但是每次在bind的时候都不成功,错误代码WSAEFAULT。感觉很差异,完整代码如下。

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 3rd Edition>
; by 罗云彬, http://www.win32asm.com.cn
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Dll.asm
; 用来被嵌入到其它进程执行的测试 dll
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff DLL.asm
; Link  /subsystem:windows /Dll DLL.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.386
		.model flat, stdcall
		option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include		windows.inc
include		user32.inc
includelib	user32.lib
include		kernel32.inc
includelib	kernel32.lib
include		wsock32.inc
includelib	wsock32.lib
include		_Message.inc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TCP_PORT	equ	9999
WM_SOCKET       equ	WM_USER + 12
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
       .data

;hInstance	dd	?
;hWinMain	dd	?
hSocket		dd	?
szServer	db	'127.0.0.1',0
szUserName	db	12 dup (?)
szPassword	db	12 dup (?)
szText		db	256 dup (?)

;szSendMsg	MSG_STRUCT 10 dup (<>)
;szRecvMsg	MSG_STRUCT 10 dup (<>)
dwSendBufSize	dd	?
dwRecvBufSize	dd	?
dbStep		db	?
szIP    db  20 dup (?)

bindfail    db  '绑定端口失败',0
socketFail  db  'socket建立失败',0




;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.data?
hInstance	dd	?
hWinMain	dd	?
hListenSocket   dd  ?
		.const
szClassName	db	'RemoteClass',0
szCaptionMain	db	'RemoteWindow',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		.code
;include     Connect.asm

_ListenThread	proc	uses edi esi ebx,_lParam,dwPort
		local	@stSin:sockaddr_in
		local   @OtherstSin:sockaddr_in
		local   @OtherstSinLen

;********************************************************************
; 创建 socket
;********************************************************************
		invoke	socket,AF_INET,SOCK_STREAM,0

		mov	hListenSocket,eax

		invoke	RtlZeroMemory,addr @stSin,sizeof @stSin
		invoke	RtlZeroMemory,addr @OtherstSin,sizeof @OtherstSin
		mov eax,dwPort
		invoke	htons,ax
		mov	@stSin.sin_port,ax
		mov	@stSin.sin_family,AF_INET
		mov	@stSin.sin_addr,INADDR_ANY
		invoke	bind,hListenSocket,addr @stSin,sizeof @stSin
		.if	eax
            invoke  WSAGetLastError
            .if eax == WSAEFAULT
                invoke MessageBox,NULL,addr bindfail,addr bindfail,NULL
			.endif
			ret
		.endif
;********************************************************************
; 开始监听,等待连接进入并为每个连接创建一个线程
;********************************************************************
		invoke	listen,hListenSocket,5
		.while	TRUE
			invoke	accept,hListenSocket,addr @OtherstSin,addr @OtherstSinLen
			.break	.if eax == INVALID_SOCKET

			mov eax,@OtherstSin.sin_addr
			
			invoke  inet_ntoa,eax
			
			
			invoke  lstrcpy,offset szIP,eax
			lea  eax ,offset szIP
			

			ret
			;invoke	CloseHandle,eax
		.endw
		invoke	closesocket,hListenSocket
		ret

_ListenThread	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DllEntry	proc	_hInstance,_dwReason,_dwReserved
		local	@dwThreadID
        local	@stWsa:WSADATA
        
        
		.if	_dwReason == DLL_PROCESS_ATTACH
			push	_hInstance
			pop	hInstance
			
			
			invoke	WSAStartup,101h,addr @stWsa
			
			
		.endif
		mov	eax,TRUE
		ret

DllEntry	Endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		End	DllEntry



[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//