有没有办法修改IDA反编译源以反映两个或多个枚举的“或”值?例如,我有以下枚举,

HTTP_QUERY_CONNECTION has the value 23 and 
HTTP_QUERY_FLAG_REQUEST_HEADERS has the value 0x80000000


我想将值为0x80000023的代码更改为/>

#1 楼

对的,这是可能的。枚举必须设置为“位域”类型,并且位掩码必须正确设置。将光标放在枚举名称上(在“枚举”视图中),然后按Ctrl-N;在出现的对话框的左下角,有一个名为“位域”的复选框。

如果所有值都是独立的,则每个值的位掩码就是值本身;如果存在包含枚举值的子字段,则这些子字段必须具有相同的掩码。我不知道HttpQueryInfo()的确切详细信息,所以我在枚举部分使用了0xFFFF的掩码,并假定高16位是独立的标志。您需要的是这样的东西:

HTTP_QUERY_FLAG_REQUEST_HEADERS value 0x80000000 mask 0x80000000

HTTP_QUERY_CONTENT_TYPE         value          1 mask 0x0000FFFF
...
HTTP_QUERY_CONNECTION           value         23 mask 0x0000FFFF
HTTP_QUERY_ACCEPT               value         24 mask 0x0000FFFF
...


但是,修改现有的枚举可能非常困难。如果存在需要屏蔽的值(“ blah is阻碍”或某些此类腐烂),则无法将枚举切换为“ bitfield”,但是如果枚举未设置为“ bitfield”,则IDA不允许您设置枚举成员的面具。最好从头开始建立一个新的枚举。

评论


小注释,如果您的枚举包含的成员为零,则IDA会抱怨无法将枚举转换为位域。

– mrexodia
18年7月20日在13:08