打印

请教关于MCU反汇编问题!(50分)

[复制链接]
2878|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Sin90Cos90|  楼主 | 2011-5-15 20:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
Sin90Cos90|  楼主 | 2011-5-15 20:18 | 只看该作者
我们编译好的 下载到 MCU的都 是 BIN  文件  有生成的是 .HEX  .OUT  .S  .ELF  不管他是 啥后缀。总之到MCU里的 ROM或FLASH 中的 都是 二进制 文件  然后读 出来的  无非是BIN  和HEX 文件

我现在 知道 是  读出的这个些个  文件里总是之 包含 了代码部分(RO)和数据部分(RW)

使用特权

评论回复
板凳
Sin90Cos90|  楼主 | 2011-5-15 20:24 | 只看该作者
如果要把它变成 汇编的话 那就要查  MCU公司 提供的  反汇编表格!就是 汇编指令对应的 二进制数值

相信 老 一辈  早年都经历过  把编写好的  汇编代码  翻译成机器码  然后在 下载到MCU里

老的烧写器(不需要PC机的那种) 需要人工把 汇编代码 翻译成机器码然后 人工输入到烧写器 然后在下栽到MCU里。

使用特权

评论回复
地板
Sin90Cos90|  楼主 | 2011-5-15 20:28 | 只看该作者
数据代码分离  可能是PC软件 有时候 会把数据文件当成 程序代码 吧?

使用特权

评论回复
5
Sin90Cos90|  楼主 | 2011-5-15 20:31 | 只看该作者
本帖最后由 Sin90Cos90 于 2011-5-15 20:33 编辑

但是如果 生成的BIN文件  里的  代码部分(RO)和数据部分(RW)

放在不同地址空间里就好办了  比如说  0X00-0XFFF放的是代码部分(RO)而0X1000-1FFF数据部分(RW)
那么PC机软件就不会把数据文件当成 程序代码 吧??????

使用特权

评论回复
6
HWM| | 2011-5-15 20:40 | 只看该作者
任何处理器代码的反汇编首先都需要分离指令和数据,这基本没有例外。当然,编程者为了提高反汇编的难度会进行一些特殊处理,这些一般都没有通用的解法。

其实,抄板或反向设计基本是没有什么前途的做法。任何产品,用户只会青睐于先行者,特别是崇尚个性和时尚的当今。苹果就是一例。

使用特权

评论回复
7
yjhon| | 2011-5-15 21:27 | 只看该作者
同意,不过搞搞小家电还差不多

使用特权

评论回复
8
McuPlayer| | 2011-5-16 01:46 | 只看该作者
以8051core为例,
LJMP  Label001   是3个字节
mov A,#22是2个字节
clr A是一个字节

你逐个字节去翻汇编,是不行的,很多指令都错位了。
可行的做法是,建立虚拟机,运行,记录运行路线,然后再进行反汇编。

曾经,反一个文件,我收客户3K的,没点难度客户能让你赚钱这么容易。

使用特权

评论回复
9
readdai| | 2011-5-16 14:51 | 只看该作者
8# McuPlayer
额,,,那PIC那种单字节指令的,,,反起来3K立马变300了。估计都没人愿意出这个冤枉钱。呵呵。

使用特权

评论回复
10
Sin90Cos90|  楼主 | 2011-5-16 16:34 | 只看该作者
请教  McuPlayer   一般虚拟机  在那里能找到!

是不是所有的  的MCU 的数据和代码是 搅和在一起 的?????

使用特权

评论回复
11
Sin90Cos90|  楼主 | 2011-5-16 16:35 | 只看该作者
任何处理器代码的反汇编首先都需要分离指令和数据,这基本没有例外。当然,编程者为了提高反汇编的难度会进行一些特殊处理,这些一般都没有通用的解法。

其实,抄板或反向设计基本是没有什么前途的做法。任何产品, ...
HWM 发表于 2011-5-15 20:40


如果涉及到一些 高深的算法 可能还是需要学习人家的东西:handshake

使用特权

评论回复
12
McuPlayer| | 2011-5-16 22:19 | 只看该作者
我做的反汇编工具是内置虚拟机的,反之前都有虚拟运行,所以能丢弃一些故意迷糊人的花指令。
但独立的虚拟机可以做到更深的虚拟运行深度,导出运行轨迹文件,给反汇编工具做参考用。

在我做的软件Release之前,是3K而不是300反一个文件,没有什么不正常。
后来对这些不感兴趣了,就把HT和义隆的反汇编Release出去了。

使用特权

评论回复
13
EDsea| | 2011-5-17 00:29 | 只看该作者
(1)如果没有用汇编写过功能齐全的单片机程序,可能会被玩。
(2)想被玩的话,那网上找个对应型号的反汇编软件先反汇编一下,只要数据不是放在最开始,前面的指令都是对的,或从外围器件入手、如按键输入、LED显示。重要的发挥你以前汇编写代码的功力。
(3)如果有算法,也不要忐忑,我反汇编过一个算法,用matlab仿真,才知道原理的。
(4)经过反汇编过程后,你的功力会大增,good luck!

使用特权

评论回复
14
Hardsofter| | 2011-5-17 08:45 | 只看该作者
楼上大牛,大家正着都不会走路呢,有人已经倒着走路了。

使用特权

评论回复
15
dongshan| | 2011-5-17 09:43 | 只看该作者
需要分数据和指令。但是
不要被有的人唬住了。
用IDA反汇编,在IDA中你的问题就是 按C或D键的事。最反感的是有人把问题故意的复杂化,不这样好像不能显示出其水平。

使用特权

评论回复
16
Sin90Cos90|  楼主 | 2011-5-18 17:17 | 只看该作者
顶上去

使用特权

评论回复
17
TopV| | 2011-5-21 21:30 | 只看该作者
支持楼主啊

使用特权

评论回复
18
Periodic| | 2011-12-18 18:02 | 只看该作者
原来这里也有反汇编强人啊

使用特权

评论回复
19
tyw| | 2011-12-18 19:19 | 只看该作者
哈哈,我要是技术处理一下,跳转指令与数据交融在一起,借用数据块作为跳转地址,你智能反汇编就头晕了.
这也是加密的方法之一哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:请教如何把笔记本显示调成 关机瞬间的黑白色! 已经问过 GOOGLE  BAIDU了无解!

0

主题

176

帖子

1

粉丝