如何反转 Python 中常量列表的字节顺序?
How do I reverse the byte order of a list of constants in Python?
我一直在寻找一种方法来从 C 源文件中提取常量并在一个自动化过程中反转它们的字节顺序(无需手动输入)。到目前为止,我已经设法利用 pycparser 为我完成了大部分繁重的工作,并创建了一个脚本,将 C 文件的所有常量打印到控制台。它打印出来的格式是这样的:
常量:整数,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)
您的任务似乎有 3 个步骤:
- 用
pycparser
解析代码 - 你有
- 找到所有常量(只是整数常量?浮点数怎么样?)并反转它们的字节顺序
- 对结果做点什么
对于 (2),您可以使用类似建议 in this answer 的内容,但请根据您实际需要的类型进行调整。
对于 (3),您不清楚您要做什么;你想把常量写回原来的 C 文件吗?那么 pycparser 不是最好的工具。您可能希望使用 Python 绑定到 Clang,因为 Clang 工具旨在修改现有代码。
我一直在寻找一种方法来从 C 源文件中提取常量并在一个自动化过程中反转它们的字节顺序(无需手动输入)。到目前为止,我已经设法利用 pycparser 为我完成了大部分繁重的工作,并创建了一个脚本,将 C 文件的所有常量打印到控制台。它打印出来的格式是这样的: 常量:整数,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)
您的任务似乎有 3 个步骤:
- 用
pycparser
解析代码 - 你有 - 找到所有常量(只是整数常量?浮点数怎么样?)并反转它们的字节顺序
- 对结果做点什么
对于 (2),您可以使用类似建议 in this answer 的内容,但请根据您实际需要的类型进行调整。
对于 (3),您不清楚您要做什么;你想把常量写回原来的 C 文件吗?那么 pycparser 不是最好的工具。您可能希望使用 Python 绑定到 Clang,因为 Clang 工具旨在修改现有代码。