能力值:
( LV4,RANK:50 )
|
-
-
2 楼
第二个问题
mov edx, [ebp+var_58]
mov eax, [ebp+var_54]
mov ecx, [eax+8]
mov [edx], ecx
是否可以从最后一句来判断var_58 是指针?
是否可以通过第三句怀疑var_54是结构体指针?
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
第三个问题
IDA反编译的函数 int __cdecl sub_63E380(int)
里面有一段代码
mov eax, [ebp+arg_0]
mov [ebp+var_4], eax
这里可以判断var_4是int类型么?
之后
mov ecx, [ebp+var_4]
cmp dword ptr [ecx+14h], 0FFFFFFFFh
那么var_4应该是个地址吧,dword ptr [ecx+14h]能说明var_4是结构体指针么?
|
能力值:
(RANK:410 )
|
-
-
4 楼
第一、使用不使用edx没有固定的说法,主要还是要全局的操作和指令的优化有关系。如可能后面的操作要使用edx的值,而现在改变edx的值就会增加后面再次读取的时间。
第二、暂时不能从最后一句判断var_58就是一个指针,因也可能是一个整数值。可以怀疑var_54是一个结构体或类指针
第三、从之后的操作中可以看出arg_0变量是一个结构体或类指针,所以可以判断前面并不是一个int类型变量,而应该是结构体或类指针变量。
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
谢谢回答,第二个和第三个问题我明白了,第一个还是不明白,我说的是
为什么不直接用edx
mov edx, [ebp+var_54]
mov eax, [edx+14h]
add eax, 1
mov ecx, [ebp+var_54] 这个时候edx里面就是 [ebp+var_54]
mov [ecx+14h], eax 这里和上面一句为什么不直接用 mov [edx+14h], eax
这样并没有改变edx,而是改变了edx+14h指向的数据,是不是怀疑var_54是通用数据指针的原因呢?
|
能力值:
(RANK:410 )
|
-
-
6 楼
前面已经说过了,和当前环境和编译器对指令的优化而决定。毕竟机器是机器,还没有智能到和人一样的智能。
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
收到,谢谢。
|
|
|