Ste*_*ven 24 c embedded assembly reverse-engineering microchip
我用谷歌搜索,我看到一个惊人的轻浮反应,基本上嘲笑提问者问这样的问题.
Microchip免费提供一些源代码(我不想在这里发布,以防万一.基本上,谷歌AN937,点击第一个链接,有一个链接"源代码"及其压缩文件).它在ASM中,当我看到它时,我开始睁大眼睛.我想将它转换为类似ac类型语言的东西,以便我可以跟随它.因为行如:
GLOBAL  _24_bit_sub
movf    BARGB2,w
subwf   AARGB2,f
可能很简单,但它们对我毫无意义.
必须有一些自动ASM到C的翻译器,但我能找到的是人们说它不可能.坦率地说,它不可能是不可能的.两种语言都有结构,这种结构肯定可以翻译.
谢谢.
old*_*mer 38
你绝对可以从汇编程序制作ac程序.问题是它可能看起来不像你在想什么,或者它可能会.我的PIC生锈了但是使用了另一个汇编程序,比如说你有
add r1,r2
在C中,让我们说成为
r1 = r1 + r2;
可能更具可读性.随着值从内存跳转到寄存器并返回并且寄存器被重用,您可能会失去任何变量名称.如果你在谈论有两个注册累加器和另一个的旧图片,那么它实际上可能更容易,因为变量大部分都在内存中,你看看地址,比如说
q = mem[0x12];
e = q;
q = mem[0x13];
e = e + q;
mem[0x12] = e;
很长并且抽出但很明显mem [0x12] = mem [0x12] + mem [0x13];
对于带有一堆寄存器的处理器,这些存储器位置可能不会像编译的C代码那样跳转.pic可以更容易地找出变量,然后进行搜索和替换以在文件中命名它们.
您正在寻找的是一个静态二进制转换,不一定是从一个二进制到另一个二进制的转换(从一个处理器到另一个处理器),但在这种情况下是从pic二进制到C的转换.理想情况下,您希望采用在应用笔记并使用微芯片工具将其组装成二进制文件,然后进行翻译.你也可以进行动态二进制翻译,但你更不可能找到其中的一个,它通常不会导致C,而是一个二进制到另一个.有没有想过那些带有pac-man和galaga的沃尔玛15美元操纵杆怎么样?来自街机的rom使用静态二进制转换,优化和清理以及为手持设备盒中的新目标处理器编译的C或任何中间语言进行转换.我想不是所有这些都是这样做的,但我很确定有些人.
百万美元的问题,你能找到一张静态的二进制翻译吗?谁知道,你可能要自己写一个.并猜测这意味着什么,你编写一个反汇编程序,而不是反汇编到本机汇编语法中的指令,如添加r0,r1,你的反汇编程序打印输出r0 = r0 + r1; 当你完成这个反汇编程序时,虽然你会非常了解pic汇编语言,所以你不需要asm到C的翻译器.你有鸡和蛋的问题.
您无法 确定性地将汇编代码转换为C.中断,自修改代码和其他低级事物除了C中的内联汇编外没有其他表示.只有某种程度上,汇编到C进程才能工作.更不用说生成的C代码可能比实际读取汇编代码更难理解......除非你使用它作为开始在C中重新实现汇编代码的基础,那么它有点有用.查看IDA的Hex-Rays插件.
我曾经做过一个项目,其中很大一部分知识产权是用x86汇编代码编码的一些严肃的算法.为了将代码移植到嵌入式系统,该代码的开发人员(不是我)使用了名为MicroAPL的装备中的工具(如果我没记错的话):
我对这个工具的表现非常非常惊讶.
另一方面,我认为这是"如果你不得不问,你买不起"的东西之一(它们的价格范围为一次性转换项目工作到大约4行装配处理一美元).
但是,通常从供应商处获得的汇编程序被打包为可以从C调用的函数 - 因此只要例程执行您想要的操作(在您想要使用的处理器上),您可能只需要组装它们和或多或少忘了他们 - 他们只是你从C调用的库函数.
小智 7
是的,很有可能将汇编程序代码反向设计为高质量的C语言.
我为一家MicroAPL工作,这家公司生产一种名为Relogix的工具,用于将汇编代码转换为C.在其他一篇文章中提到过.
请查看我们网站上的示例:
http://www.microapl.co.uk/asm2c/index.html
必须有一些自动ASM到C的翻译器,但我能找到的是人们说它不可能.坦率地说,它不可能是不可能的.
不,这不对.编译失去信息:最终目标代码中的信息少于C源代码中的信息.反编译器无法从零开始神奇地创建该信息,因此真正的反编译是不可能的.
这并非不可能,只是非常困难。熟练的汇编和 C 程序员可能可以做到这一点,或者您可以考虑使用Decompiler。其中一些在将 asm 转换为 C 方面做得相当好,尽管您可能需要重命名一些变量和方法。
查看此站点,获取可用于 x86 架构的反编译器列表。
| 归档时间: | 
 | 
| 查看次数: | 68249 次 | 
| 最近记录: |