| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 722 人关注过本帖
标题:问个问题别说我问得怪-....
只看楼主 加入收藏
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:6 
问个问题别说我问得怪-....
想通过AllocateAndGetTcpExTableFromStack获取端口到进程的信息,但是用了之后没获取到任何TCP表信息不知道为什么....
宏定义
_PROCVAR    Typedef    proto:dword,:dword,:dword,:dword,:dword
PROCVAR        Typedef    ptr _PROCVAR
这是数据结构的定义
lpAllocateAndGetTcpExTableFromStack    PROCVAR    ?

szDll            db    'Iphlpapi.dll',0
szAllocateAndGetTcpExTableFromStack    db    'AllocateAndGetTcpExTableFromStack',0

MIB_TCPEXROW        struct
         dwState    dd      ? ;//连接状态
         dwLocalAddr    dd    ? ;//本地地址
         dwLocalPort    dd    ? ;//本地端口
         dwRemoteAddr    dd    ? ;//远程地址
         dwRemotePort    dd      ? ;//远程端口
         dwProcessId    dd    ? ;//进程ID号
MIB_TCPEXROW        ends

MIB_TCPEXTABLE    struct
    dwNumEntries    dd    ?
    stMIB_TCPEXROW    MIB_TCPEXROW 256 dup (<>)
MIB_TCPEXTABLE    ends

这是调用
invoke    LoadLibrary,addr szDll
mov    hDllInstance,eax
invoke    GetProcAddress,hDllInstance,addr szAllocateAndGetTcpExTableFromStack
mov    lpAllocateAndGetTcpExTableFromStack,eax
invoke    GetProcessHeap
mov    hHeap,eax
invoke    lpAllocateAndGetTcpExTableFromStack,addr stMIB_TCPEXTABLE,TRUE,hHeap,2,2
函数返回为0根据MCRO的说法返回0为SUCCESS,但是我查看了数据BUFFER确没得到TCP表的信息,这是为什么?是数据定义有问题?
汗别觉得我问得怪...........迫切希望有高人解答!谢谢了!
搜索更多相关主题的帖子: 信息 
2009-10-20 14:46
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
把你的stMIB_TCPEXTABLE的定义贴出来。估计是这个参数传递错误。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-20 21:01
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
local    stMIB_TCPEXTABLE:MIB_TCPEXTABLE
stMIB_TCPEXTABLE就是MIB_TCPEXTABLE结构的名字,结构定义给了伤面
2009-10-20 22:10
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
这样也行,不过你没明白这个参数真正的含义。
实际上定义为:
local pstMIB_TCPEXTABLE:DWARD 就行。

因为它只是保存了Iphlpapi为你分配的MIB_TCPEXTABLE返回结构的地址。也就是说,这个结构参数不是让你分配空间的,是函数自己分配空间的。没看到第3个参数是让你给进程的缺省‘堆’句柄吗。

实际上函数已经调用成功了,你再好好看看你的缓冲区,它应该只是返回了一个‘指针’,而不是你希望的所有数据项。
你可以用这个‘指针’进行数据遍历。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-20 23:09
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:20 
回复 4楼 东海一鱼
TcpListTab                                                   dd ?
hDllInstance                                                dd ?
hHeap                                                          dd ?
pInfoBuf                                                       db  256 dup(?)

.code

_start:
invoke    LoadLibrary,addr szDll
mov        hDllInstance,eax
invoke    GetProcAddress,hDllInstance,addr szAllocateAndGetTcpExTableFromStack
mov        lpAllocateAndGetTcpExTableFromStack,eax
invoke    GetProcessHeap
mov        hHeap,eax

invoke    lpAllocateAndGetTcpExTableFromStack,offset TcpListTab,TRUE,hHeap,2,2
mov        ebx,TcpListTab
assume   ebx :  ptr MIB_TCPEXTABLE
invoke    crt_printf,offset szTcpConnectNum,[ebx].dwNumEntries
 
invoke    crt_printf,offset szFmt
mov        ecx,[ebx].dwNumEntries
.while ecx

图片附件: 游客没有浏览图片的权限,请 登录注册

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-20 23:50
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
返回的是地址啊,我也想到过就是没尝试,一想到有个BUFFER定义以为就会枉里面写.....,
mov        ebx,TcpListTab
assume   ebx :  ptr MIB_TCPEXTABLE
这样做能定义结构指针是把?
2009-10-21 08:18
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
以下是引用nzxhust在2009-10-21 08:18:17的发言:

返回的是地址啊,我也想到过就是没尝试,一想到有个BUFFER定义以为就会枉里面写.....,
mov        ebx,TcpListTab
assume   ebx :  ptr MIB_TCPEXTABLE
这样做能定义结构指针是把?
assume   ebx :  ptr MIB_TCPEXTABLE

确切的说,不是定义。是声明,目的是告诉masm在当前代码上下文中,将ebx视为MIB_TCPEXTABLE类型的指针处理汇编代码。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-22 12:28
快速回复:问个问题别说我问得怪-....
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016857 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved