41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
import sys
|
|
import time
|
|
import os
|
|
|
|
|
|
def eprint(*args, **kwargs):
|
|
print(*args, file=sys.stderr, **kwargs)
|
|
|
|
|
|
def create_r2_byte_pattern(sig):
|
|
tokens = sig.split()
|
|
r2_tokens = []
|
|
for token in tokens:
|
|
if token == "?":
|
|
r2_tokens.append("..")
|
|
else:
|
|
r2_tokens.append(token)
|
|
return "".join(r2_tokens)
|
|
|
|
|
|
def sync_r2_output(r2):
|
|
"""
|
|
For some fucking reason r2pipe output gets desynced from the start,
|
|
making the result of every command what the previous command should
|
|
have returned.
|
|
|
|
Read stuff from the process pipe until it stops being stupid.
|
|
"""
|
|
|
|
def set_blocking(fileno, blocking):
|
|
if hasattr(os, "set_blocking"):
|
|
os.set_blocking(fileno, blocking)
|
|
|
|
time.sleep(1)
|
|
set_blocking(r2.process.stdout.fileno(), False)
|
|
p = r2.process.stdout.read(1)
|
|
set_blocking(r2.process.stdout.fileno(), True)
|
|
output = r2.cmd(f"?vi 123").strip()
|
|
if output != "123":
|
|
raise Exception("R2 state never got synced")
|