如何在Python中反转常量列表的字节顺序?

2024-10-03 15:29:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在寻找一种方法,从C源文件中提取常量,并在一个自动化过程中反转它们的字节顺序(无需手动输入)。到目前为止,我已经成功地利用pycparser为我完成了大部分繁重的工作,并创建了一个脚本,将C文件的所有常量打印到控制台。它打印的格式如下: 常量:int,0x243F6A88

我的问题是,有没有人知道用Python自动执行这个转换过程的直观方法?我知道如何使用join()反转字节顺序,但我正在努力想一种方法来实现这一点,在这种方法中,我可以最小化手动输入的数量。理想情况下,我的脚本会打印出常量(已经完成),然后使用某种regex(也许?)转换任何以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)

Tags: 方法self脚本node字节顺序过程def
1条回答
网友
1楼 · 发布于 2024-10-03 15:29:52

你似乎有三个步骤:

  1. pycparser解析代码-你已经知道了
  2. 查找所有常量(仅整数常量?花车怎么样?)并反转它们的字节顺序
  3. 对结果做点什么

对于(2)您可以使用类似于建议in this answer的内容,但是可以根据您需要的实际类型进行调整。你知道吗

对于(3)不清楚您想做什么;您想把常量写回原来的C文件吗?那么,pycparser并不是最好的工具。您可能希望改用Python绑定到Clang,因为Clang工具是为修改现有代码而设计的。你知道吗

相关问题 更多 >