С Python Z3 у меня есть массив байтов и можно использовать Select для чтения 1 байта, как показано ниже.Z3: Как выбрать 4 байта из массива из 8 бит?
MI = BitVecSort(32)
MV = BitVecSort(8)
Mem = Array('Mem', MI, MV)
pmt = BitVec('pmt', 32)
pmt2 = BitVec('pmt2', 8)
g = True
g = And(g, pmt2 == Select(Mem, pmt))
Пока все в порядке. Однако теперь я хочу прочитать 4 байта из массива Mem, как показано ниже.
t3 = BitVec('t3', 32)
g = And(g, t3 == Select(Mem, pmt))
Это оказывается неправильным, потому что t3 является 32-бит, а не 8 бит, в то время как Mem это массив из 8 бит.
Вопрос: Как я могу использовать Select, чтобы читать 4 байта, но не 1 байт в приведенном выше примере?
Я полагаю, что я могу создать новую функцию для чтения 4 байтов, скажем, Select4(), но я не уверен, как создать функцию в Z3 python.
Большое вам спасибо!
Лео, спасибо так много. Однако, я думаю, вы забываете упомянуть, что вы принимаете мало-edian в вышеуказанном коде? – user311703
Хорошая точка. Да, я предполагаю, что мало-мальски. –