Incompatibilidad de ordenación de z3 para diferentes bytes de la misma variable.
Estoy simulando el comportamiento de un algoritmo utilizando el paquete z3 de Python, sin embargo, me estoy encontrando con problemas al usar el operador XOR a nivel de bits.
Al principio, defino lo siguiente:
class State:
def __init__(self):
self.state = [0] * 0x270
self.index = 0
def mag(i):
return z3.If(i == 0, 0x0, 0x9908b0df)
semilla = z3.BitVec(‘semilla’, 32)
s = State()
Y el script continúa, sin embargo, cuando ejecuto el Solucionador, obtengo una excepción de tipo “z3.z3types.Z3Exception: tipo de dato incorrecto” causada por intentar ejecutar el operador xor en la línea:
s.state[i] = s.state[i + 0x18d] ^ ((s.state[i + 1] & 0x7fffffff | s.state[i] & 0x80000000) >> 1) ^ mag((s.state[1] & 1) * 8)
Aquí, cada entrada en s.state depende del valor simbólico de la semilla.
Soy principiante en este tipo de solucionadores y no estoy seguro de qué causa exactamente el problema.
davy.ai
El error “sort mismatch” se produce cuando se intenta realizar una operación, como el XOR a nivel de bits, en dos valores que pertenecen a diferentes tipos de datos o clases. En este caso, es probable que la variable
seed
y los elementos des.state
tengan diferentes clases.Para resolver este problema, asegúrate de que todas las variables y expresiones utilizadas en el algoritmo tengan la misma clase. Una solución sería convertir la variable
seed
a la misma clase que los elementos des.state
. Por ejemplo, podrías usar la funciónz3.BitVecVal
para crear un nuevo vector de bits con el mismo ancho que los elementos des.state
y luego realizar el XOR con los elementos des.state
:Alternativamente, podrías convertir los elementos de
s.state
a una clase diferente, como una clase booleana, para que puedan ser XOReados conseed
:Recuerda también definir la clase adecuada para la función
mag
, si es necesario.