我是x86-32bit
的新手。对不起,如果这是一个愚蠢的问题..
我基本上试图在BitVec
汇编指令上实现一个简单的符号执行引擎。这是我现在面临的问题:
假设在执行之前,我使用self.eq['%eax'] = BitVec('reg%d' % 1, 32)
self.eq['%ebx'] = BitVec('reg%d' % 2, 32)
self.eq['%ecx'] = BitVec('reg%d' % 3, 32)
self.eq['%edx'] = BitVec('reg%d' % 4, 32)
初始化了一些寄存器。
16-bit
所以这是我的问题,如何处理一些8-bit
甚至8-bit
个寄存器?
无论如何,我可以从32位BitVec
中提取z3
部分,为其分配一些值,然后将其放回去?我可以在$tempPath
中执行此操作吗?还是有更好的方法..?
答案 0 :(得分:2)
您可以提取位向量的部分,这会产生一个新的,较小的位向量值,您可以按照自己喜欢的方式使用它(例如添加)。
您可以通过首先提取所有部分然后将较小的位向量连接成一个大的位置来替换位向量的部分。
例如,递增eax的上半部分将是这样的:
eaxNew = concat(add(extract(eaxOld, upperHalf), 1), extract(eaxOld, lowerHalf))
(伪代码)
http://research.microsoft.com/en-us/um/redmond/projects/z3/namespacez3py.html