字节操作反编译

时间:2012-11-18 14:58:04

标签: visual-c++ assembly reverse decompiler

所以我厌倦了“标志”和字节操作,所以这里是汇编代码:

loc_4097F5:
   .text:004097F5     cmp     [esi+1Bh], dl
   .text:004097F8     jnz     short loc_409812
   .text:004097FA     cmp     [esi+6], dl
   .text:004097FD     jnz     short loc_409812
   .text:004097FF     mov     ecx, [ebp+490h]
   .text:00409805     test    cl, 2 ; How to represent this????
   .text:00409808     jz      short loc_40980F
   .text:0040980A     test    ch, 1 ; How to represent this????
   .text:0040980D     jz      short loc_409812
   .text:0040980F loc_40980F:                        
   .text:0040980F     mov     [esi+25h], dl
   .text:00409812 loc_409812:                      
   .text:00409812     mov     ecx, [esp+18h+arg_0]
   .text:00409816     cmp     [ecx+8Ch], eax

这是反编译器产生的伪代码:

v13 = a3->field_454.TextureCaps;
  if ( !(v13 & 2) || BYTE1(v13) & 1 )
    *(_BYTE *)(v5 + 37) = v3;

任何想法如何为VC ++ 6.0编译器代表这一点(编译此代码)??

编辑:实际上a3-> field_454是D3DCAPS9结构。

1 个答案:

答案 0 :(得分:1)

除了反编译版本中已经存在的内容之外,还不确定您还需要什么。 您当然可以查找d3d标头中的TextureCaps标志位,以便更加了解它。我认为这是正确的:

if (!(TextureCaps & D3DPTEXTURECAPS_POW2) || (TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL))

因此,它正在测试是否无条件支持非二次幂纹理(如果支持,则条件评估为true)。 另请参阅相关的msdn page