私は、C ソース ファイルから定数を抽出し、1 つの自動化されたプロセス (手動入力なし) でそれらのバイト オーダーを逆にする方法を探していました。これまでのところ、pycparser を使用して面倒な作業のほとんどを行うことができ、C ファイルのすべての定数をコンソールに出力するスクリプトを作成しました。印刷される形式は次のようになります: 定数: int, 0x243F6A88
私の質問は、Python でこの変換プロセスを自動化する直感的な方法を知っている人はいますか? join() でバイト順を逆にする方法は知っていますが、手動入力の量を最小限に抑える方法を考えるのに苦労しています。理想的には、私のスクリプトは定数を出力し (既に完了しています)、ある種の正規表現 (たぶん?) を使用して、0x で始まる定数を変換します (印刷される乱数はたくさんありますが、これは望ましくありません)。 )。これが理にかなっていることを願っています、ありがとう!
私がこれまでに持っているもの:
class ConstantVisitor(c_ast.NodeVisitor):
def __init__(self):
self.values = []
def visit_Constant(self, node):
self.values.append(node.value)
node.show(showcoord=True)
def show_tree(filename):
# Note that cpp is used. Provide a path to your own cpp or
# make sure one exists in PATH.
ast = parse_file(filename, use_cpp=True,cpp_args=['-E', r'-Iutils/fake_libc_include'])
cv = ConstantVisitor()
cv.visit(ast)
if __name__ == "__main__":
if len(sys.argv) > 1:
filename = sys.argv[1]
else:
filename = 'xmrig-master/src/crypto/c_blake256.c'
show_tree(filename)