-1

我想将 asm 转换为 c(程序集到 C)我在 web 上看到http://www.textmaestro.com/InfoEx_17_Convert_Assembly.htm (请查看页面)页面,之后我很容易尝试使用查找和替换来完成这项工作C# 中的正则表达式

我不是计算机专业的学生,​​所以我不是 Regex 的专业人士。我工作了 5 天,现在我知道我不能这样做。我写了很多代码,但没有任何成功示例程序:mov r1,1; 移动 r2,2; 转换为:r1=1;r2=2;请帮我正确地做到这一点

4

1 回答 1

3

OP(痛苦地)了解到,正则表达式不是解决涉及软件分析或翻译的问题的好方法。处理字符串与构建具有复杂结构的文本的上下文相关分析不同。

人们不断地重新学习这一课。的确,您可以使用重复的正则表达式来模拟 Post 重写系统,并且 Post 系统具有图灵能力,在技术上可以做任何事情。确实没有人真正想要,或者更重要的是,没有人可以为真正的图灵机 [或等效的 Post 系统] 编写非常复杂的程序。这就是我们拥有所有其他计算机语言和工具的原因。[OP 所指的 TextMaestro 系统正试图完全成为 Post 系统。]

然而,他想做的任务是可能的,并且使用适当的工具是可行的:程序转换系统(PTS)

特别是,他应该看到这篇技术论文,以准确描述如何使用一个特定的 PTS 做到这一点:看到来自香肠的猪吗?通过 FermaT 转换从汇编程序重新设计为C。这种工具实际上是从汇编源代码到目标语言的自定义编译器,包括解析、名称(标签)解析、通常是数据流分析以及复杂的代码生成和优化。使用 PTS 是因为它们使构建这种编译器相对容易。该工具至少已用于英特尔汇编到 C,大型机(系统 360/370/Z)汇编到 C,用于大规模任务。(我与这个工具没有关系,但对作者非常尊重)。

评论中的反对者似乎认为这是不可能做到的,除非在极其有限的情况下。诚然,对汇编代码的习语了解越多,这就越容易,但本文中的技术方法无论如何都不限于特定的编译器输出。确实,真正晦涩难懂的汇编代码(尤其是自修改或具有运行时代码生成)极难翻译。

于 2012-12-09T12:48:32.650 回答