簡體   English   中英

Z3py - 做一個滾動

[英]Z3py - do a roll

是否有推薦的方式向左或向右滾動任意數量?

例如,一個字節 - 0x57 rolr 3 = 0xEA

我沒有在Z3py文檔中找到任何“滾動”操作。 我正在考慮為每個位使用BitVec ,但這看起來效率不高/可能無效。 任何建議表示贊賞,謝謝。

編輯:感謝您的答案到目前為止。 這更像是一個API問題,因為我現在很尷尬。 以我所擁有的為出發點。

def roll(bt):
count = BitVecVal(int('0x03', 16), 8)
s.add(bt == (bt << count | bt >> (8 - count)) & 0xFF)

a = BitVec('a', 8)
s = Solver()
roll(a)
s.add(a == BitVecVal(int('0xEA', 16), 8))
s.check()

這打印出來沒有,模型不可用。

你可以像這樣做一個旋轉:

size = 0x100  # size of the bitvector

rotated = (x << n) | (x >> (size - n)) & (size - 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM