首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法从Cortex-M3固件中提取机器代码。

无法从Cortex-M3固件中提取机器代码。
EN

Stack Overflow用户
提问于 2017-03-29 10:12:09
回答 1查看 372关注 0票数 0

我想从XBee DigiMesh固件(Cortex-M3,EM357)中提取机器代码,所以我有包含3个部分的SREC文件。我猜想这些部分中有一个是代码部分,但是arm-none eabi-objdump经常报告“未知指令”。,有人知道为什么会这样吗?

我就是这样做的:

代码语言:javascript
代码运行次数:0
运行
复制
arm-none-eabi-objcopy --input-target=srec --output-target=binary -j .sec2 xbp24-dm_8073.ehx2.dec sec2.bin
arm-none-eabi-objdump -D -bbinary -marm -Mforce-thumb sec2.bin

更新:在https://reverseengineering.stackexchange.com/questions/15049/cant-extract-machine-code-from-cortex-m3-firmware有答案

EN

回答 1

Stack Overflow用户

发布于 2017-03-29 18:34:50

大脑皮层-m~3支持thumb2,它是可变指令长度,您不能简单地从开始开始并分解一个可变长度指令集,您可以/将很容易地脱离同步,输出变成垃圾,并且永远保持这种方式。在这种情况下可能不是,但您会有错误,这是预期的。很有可能他们添加了项目来混淆反汇编程序。

而且你可以在这里有很多数据,或者是压缩代码,或者谁知道还有什么.

作为一个皮层-m的第一个词块不是一个向量表,那么这是什么代码。如果以使用gnu的方式检查输出,这看起来并不像真正的代码,因此可能是加密的或压缩的或其他。您是否看到堆栈框架正在构建,函数以pop (ld与否)结尾,其中包含了一些静态单词的链接寄存器,那么下一个函数的开头是什么呢?当然,并不是所有的代码都是编译的,但是其中一些看起来应该像编译过的代码。

如果你想黑一些固件,你也许应该弄清楚它是如何/在哪里加载的,并创建/使用指令集模拟器。但是,如果没有一个向量表,那就好好享受吧。

您的反汇编方式丢失了地址内容。

代码语言:javascript
代码运行次数:0
运行
复制
S123110001BE8110204D5401BE96102452...
0x1100 : 0x01BE
0x1102 : 0x8110
0x1104 : 0x204D
0x1108 : 0x5401
0x110C : 0xBE96
0x110E : 0x1024

以此类推,或者说很可能是

代码语言:javascript
代码运行次数:0
运行
复制
0x1100 : 0xBE01
0x1102 : 0x1081

您可以使用该srec并创建一个程序:

代码语言:javascript
代码运行次数:0
运行
复制
.hword 0xbe01
.hword 0x1081

一个对于每个相邻的地址范围的项目,当地址跳转开始一个新的文件,创建一个链接脚本来覆盖每个部分的开始地址,组装,在其中之一制作一个_start标签,链接到脚本,然后你有一个精灵,你可以拆解,我仍然认为它是有问题的,但一些相对的寻址将是有意义的和或绝对的寻址。

还请注意您的入口点

代码语言:javascript
代码运行次数:0
运行
复制
S903189351

假设这是真的,就没有理由假设它是真的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43090565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档