首页
社区
课程
招聘
[求助]Windows内核源代码中有一段代码不了解,高手可否来看看!
发表于: 2007-12-27 15:22 8323

[求助]Windows内核源代码中有一段代码不了解,高手可否来看看!

2007-12-27 15:22
8323
在WRK-1.2中,有一段代码的意思我没有完全搞清楚。

有一个结构,比如名为SomeStruct,该结构内包含有类似为BOOLEAN的域b1。

下面是我在WRK中看到的两种对该结构的初始化方式:
1.
SomeStruct ss;
RtlZeroMemory ( &ss, sizeof(ss) );

2.
SomeStruct ss = { 0 };

第一种方法我理解,就是DDK中提供的例程,把整个结构的内容用零来填,问题是第二种方法,大括号里加个零不知道是什么意思。可否请懂的人解释一下,谢谢!

还有,如果要是用第一种方法,也就是将整个结构的内存清零的话,那么该结构中的b1,也就是类型为布尔值的域应该也就自动为TRUE了吧,不知道我的想法对不对。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
嗯,第二种方法是定义时的初始化。

是否还记得在初始化数组的时候曾有过这样的写法: char buffer[1024] = {0};
2007-12-27 15:45
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
其实2种方式是一样的

SomeStruct ss = { 0 }

在编译的时候 (VC++) 等于

SomeStruct ss;
memset( &ss ,0,sizeof(SomeStruct));
2007-12-27 19:15
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
这贴可以往新手区放了
2007-12-27 19:16
0
雪    币: 80
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
抱歉抱歉,可能是发错地方了.
2007-12-28 16:26
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
用VC验证了一下:
int a(){
int a[100]={0}
return 1;
}

对应的编译代码是:
public _a
_a proc near

var_190= dword ptr -190h
var_18C= dword ptr -18Ch

push    ebp
mov     ebp, esp
sub     esp, 190h
push    edi
mov     [ebp+var_190], 0
mov     ecx, 63h
xor     eax, eax
lea     edi, [ebp+var_18C]
rep stosd
mov     eax, 1
pop     edi
mov     esp, ebp
pop     ebp
retn
_a endp

不过觉得奇怪的是
代码为什么不编译成这样?
push    ebp
mov     ebp, esp
sub     esp, 190h
push    edi
;;;;;del:  mov     [ebp+var_190], 0
mov     ecx, 64h
xor     eax, eax
lea     edi, [ebp+var_190]
rep stosd
mov     eax, 1
pop     edi
mov     esp, ebp
pop     ebp
retn
2007-12-28 19:37
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
7
不懂编程,看不懂滴说。
2007-12-29 10:22
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
8
十分敬佩Happytown

(*^__^*) 嘻嘻……
2007-12-29 10:26
0
雪    币: 267
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=auser;397053]用VC验证了一下:
int a(){
int a[100]={0}
return 1;
}

对应的编译代码是:
public _a
_a proc near

var_190= dword ptr -190h
var_18C= dword ptr -18Ch

push ...[/QUOTE]

因为a[100]={0}表示a[0]初始化为0,剩下的值初始化为int型默认值(即0)
2007-12-29 14:06
0
游客
登录 | 注册 方可回帖
返回
//