IDA位段的应用
IDA位段
设置位段
我们创建这个位段,以下是代码:
1 | struct{ |

创建好位段以后,就是添加成员了


如果位段没有一个参数占好几个标志位,那么Mask段是可以填0的
这样就算定义好了

应用位段
我们初始化了一个位段:
1 | struct Enum globalEnum = { 1, 0, 1, 0, 1, 0, 1, 0 }; // 初始化各个位段 |

IDA打开发现,并没有显示出位段的具体表示

点击选项中的Edit,选择Operand type ,再选择Enum member(在此之前记得Undefine一下数据,再设置位段)

选择我们刚刚定义的位段以后,应用后长这样

占位不止一个字节的位段表示
例如下面这个例子:
1 | struct Enum2 { |
在这个位段中,contAddr占的比特位有两个,其中00,01,10,11分别代表不一样的参数,这个如何设置呢?
这就要提到之前我们说的MASK了
现在我们先标记出contAddr所占的比特位代表的十六进制,如下图,代表的十六进制就是0x30
所以contAddr这个位段的MASK就要填0x30
下面具体演示下:
1 | struct Enum2 { |
先填contAddr_0

然后再填contAddr_1

同理填上contAddr_2和contAddr_3


最终效果长这样,我们去测试一下

效果还是十分稳健的

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cc12138's blog!
