| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 751 人关注过本帖
标题:请解释一下函数数组的赋值步骤
只看楼主 加入收藏
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
结帖率:85.71%
收藏
 问题点数:0 回复次数:3 
请解释一下函数数组的赋值步骤
程序代码:
static int (*fcntab[])(PDEVICE_EXTENSION pdx, PIRP Irp) =
    {
        DefaultPnpHandler,        // 0x00401020

        DefaultPnpHandler,
        DefaultPnpHandler,     
    };
int DefaultPnpHandler(int int )
{
}
书上好像是这样说的:数组名=数组的第一个元素  fcntab=fcntab[0]
实际上是*fcntab=fcntab[0].
那么*fcntab的值因该为DefaultPnpHandler的地址0x00401020
DefaultPnpHandler为标号所以是没有占用内存空间,他只是一个偏移量
但fcntab[0]=
0x0040100a

到底错在哪

[ 本帖最后由 WDMfans 于 2010-9-23 19:41 编辑 ]
搜索更多相关主题的帖子: 赋值 函数 解释 
2010-09-23 19:36
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
收藏
得分:0 
我晕
cl.exe是这样编译的:
0x0040100a   jmp DefaultPnpHandler
.
.
0x00401020   int DefaultPnpHandler(int ,int)

也就是说函数数组保存的是跳转到DefaultPnpHandler的指令。
2010-09-23 19:57
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
收藏
得分:0 
可我还是不理解:这函数数组到底怎么回事
汇编代码里没找到下面这段代码的赋值动作
int main()
7:    {
00401050   push        ebp
00401051   mov         ebp,esp
00401053   sub         esp,40h
00401056   push        ebx
00401057   push        esi
00401058   push        edi
00401059   lea         edi,[ebp-40h]
0040105C   mov         ecx,10h
00401061   mov         eax,0CCCCCCCCh
00401066   rep stos    dword ptr [edi]//为栈空间填充INT 3指令
8:        static int (*fcntab[])(int  , int ) =
9:        {
11:               DefaultPnpHandler,      // IRP_MN_START_DEVICE
12:               DefaultPnpHandler,      // IRP_MN_QUERY_BUS_INFORMATION
13:               DefaultPnpHandler,      // IRP_MN_DEVICE_USAGE_NOTIFICATION
14:               DefaultPnpHandler,      // IRP_MN_SURPRISE_REMOVAL
15:       };
16:
17:       return 0;
00401068   xor         eax,eax
18:   }

没高手解说一下吗


[ 本帖最后由 WDMfans 于 2010-9-23 20:09 编辑 ]
2010-09-23 20:04
WDMfans
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:168
注 册:2010-9-19
收藏
得分:0 
已解  ,有网络就是方便         
答案公布下。static 定义的变量在程序初始化时,已经赋值完毕。保存在data段。
去掉修饰符 static,则有相应的动作
2010-09-23 20:56
快速回复:请解释一下函数数组的赋值步骤
数据加载中...
 
   



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

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