能力值:
( LV12,RANK:210 )
2 楼
sizeof和编译器坑个毛啊!
你没数对括号!
能力值:
( LV3,RANK:20 )
3 楼
呵呵,都能编译过去,括号肯定没问题,就是类型转换的问题,sizeof 返回值似乎是unsigned类型
能力值:
( LV8,RANK:130 )
4 楼
sizeof返回值是 size_t
vc6好像是unsigned int
你那一串的减法结果是负数,但被提升成unsigned int当然大于Len.
能力值:
( LV2,RANK:10 )
5 楼
不管哪个编译器sizeof返回值size_t,带unsigned是肯定的的,
长度可能为0,或正数,什么时候长度可能为负数?
楼主,你要研究sizeof的问题,就应该不应该把sizeof放在一堆加减运算中去测试,
就好比你研究1+1等于几,
你用
1+a-a+a-a+a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a++a-a+1
来测试一样
能力值:
( LV3,RANK:20 )
6 楼
[QUOTE=nevergone;1252812]sizeof返回值是 size_t
vc6好像是unsigned int
你那一串的减法结果是负数,但被提升成unsigned int当然大于Len.[/QUOTE]
我在代码最前面加上(int)转换了,但是只是针对0x201000转的,后面后面的加减公式中如果再有unsigned类型的话,整个语句就又变成unsigned类型的了么?
能力值:
( LV3,RANK:20 )
7 楼
这是我实际中的一段代码,不是针对sizeof函数的,实际应用中很有可能出现很多类似的求和/求减语句,如果不注意类型转换,就会得到错误的结果.
能力值:
( LV3,RANK:25 )
8 楼
[QUOTE=nevergone;1252812]sizeof返回值是 size_t
vc6好像是unsigned int
你那一串的减法结果是负数,但被提升成unsigned int当然大于Len.[/QUOTE]
是这个问题
能力值:
( LV12,RANK:340 )
9 楼
类型强制转换好像只对后面的对象有用,如果把后面的用()括起来,编译器就会把它当成一个对象了
但我感觉编译器一般会把未确定符号的hex当成有符号的来处理啊0.0
能力值:
( LV2,RANK:10 )
10 楼
DRIVER_OBJECT drvObject; sizeof(DRIVER_OBJECT) != sizeof(drvObject) 结果返回值才不一样,能解释清楚吗?
能力值:
( LV6,RANK:90 )
11 楼
大家都是搞逆向的
为什么不用事实来回答这个问题呢
00411387 mov eax,0CCCCCCCCh
0041138C rep stos dword ptr es:[edi]
int Len=0x400;
0041138E mov dword ptr [Len],400h
if(Len>(int)0x201000-0x200fff-sizeof(DWORD)-0x10){
00411395 cmp dword ptr [Len],0FFFFFFEDh
[COLOR="Red"]00411399 jbe main+32h (4113A2h) [/COLOR] int a=1;//此句能否执行?
0041139B mov dword ptr [a],1
0041138C rep stos dword ptr es:[edi]
int Len=0x400;
0041138E mov dword ptr [Len],400h
if(Len>(int)(0x201000-0x200fff-sizeof(DWORD)-0x10)){
00411395 cmp dword ptr [Len],0FFFFFFEDh
[COLOR="red"]00411399 jle main+32h (4113A2h) [/COLOR] int a=1;//此句能否执行?
0041139B mov dword ptr [a],1
现在清楚了吧
能力值:
( LV3,RANK:20 )
12 楼
[QUOTE=elianmeng;1252943]大家都是搞逆向的
为什么不用事实来回答这个问题呢
00411387 mov eax,0CCCCCCCCh
0041138C rep stos dword ptr es:[edi]
int Len=0x400;
0041138E mov d...[/QUOTE]
这是为什么呢?
能力值:
( LV2,RANK:10 )
13 楼
第二个编译器可以确定一定是有符号数的比较,(int)转换的右侧算术运算的结果,jle用于有符号数比较后条件转移指令,jbe无符号数