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!