首页
论坛
课程
招聘

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

2007-12-27 15:22 6756

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

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

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

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

2.
SomeStruct ss = { 0 };

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

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

[推荐]看雪企服平台,提供项目众包、渗透测试、安全分析、定制项目开发、APP等级保护等安全服务!

最新回复 (8)
combojiang 26 2007-12-27 15:45
2
0
嗯,第二种方法是定义时的初始化。

是否还记得在初始化数组的时候曾有过这样的写法: char buffer[1024] = {0};
binglan212 2007-12-27 19:15
3
0
其实2种方式是一样的

SomeStruct ss = { 0 }

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

SomeStruct ss;
memset( &ss ,0,sizeof(SomeStruct));
Bughoho 8 2007-12-27 19:16
4
0
这贴可以往新手区放了
JSniperWYC 1 2007-12-28 16:26
5
0
抱歉抱歉,可能是发错地方了.
auser 2007-12-28 19:37
6
0
用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
happytown 31 2007-12-29 10:22
7
0
不懂编程,看不懂滴说。
北极狐狸 7 2007-12-29 10:26
8
0
十分敬佩Happytown

(*^__^*) 嘻嘻……
Rinrin 1 2007-12-29 14:06
9
0
[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)
游客
登录 | 注册 方可回帖
返回