2017-03-29 22 views
0

XBee DigiMeshファームウェア(Cortex-M3、EM357)からマシンコードを抽出したいので、内部に3セクションのSRECファイルがあります。これらのセクションの1つはコードセクションだと思いますが、arm-none-eabi-objdumpは「未知の命令」を頻繁に報告します。 これはなぜ起こるのか誰も知っていますか?Cortex-M3ファームウェアからマシンコードを抽出できません

これは、私はこれをしようとする方法です。

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

+0

[リバースエンジニアリング](http://reverseengineering.stackexchange.com/)サイトでこれを尋ねます –

答えて

0

でありcortex-m3サポートthumb2は可変長命令ですが、最初から始めて、可変長命令セットを逆アセンブルすることはできません。簡単に同期が取れなくなり、出力がゴミになって永遠に残ることがあります。この場合はそうではないかもしれませんが、エラーが発生することが予想されます。ディスアセンブラを混乱させるような項目を追加することも可能です。あなたはここで多くのデータを持つことができ、またはそれは、コード、または誰が他に何を知っているを圧縮することができる

も...

単語の最初のチャンクのCortex-Mは、ベクタテーブルではありませんので、このコードは何ですか? gnuツールを使ったやり方で出力を調べると、実際のコードと同じようには見えないので、おそらく暗号化や圧縮などのように見えます。スタックフレームが構築されているのを見て、リンクレジスタを含むポップ(ldmia)で終わっている関数があります。その後、いくつかの静的な単語があると、次の関数の開始点のように見えますか?コンパイルされたコードはすべてではないかもしれませんが、コンパイルされたコードのように見えるものがあります。

ファームウェアをハックしようとしている場合は、これがどのように/どこにロードされているか把握し、命令セットシミュレータを作成/使用する必要があります。しかし、ベクトルテーブルがなくても、楽しい時間を過ごせます。あなたの解体をした

方法は、あなたは、アドレスコンテンツ

S123110001BE8110204D5401BE96102452... 
0x1100 : 0x01BE 
0x1102 : 0x8110 
0x1104 : 0x204D 
0x1108 : 0x5401 
0x110C : 0xBE96 
0x110E : 0x1024 

を失ったように、おそらくそれかは、あなたがそのSRECを取り、プログラム作成することができ

0x1100 : 0xBE01 
0x1102 : 0x1081 

をbyteswapped:

.hword 0xbe01 
.hword 0x1081 

項目の連続したアドレス範囲ごとに1つ、アドレスジャンプが新しい項目を開始するときファイルを作成し、各セクションの開始アドレスをカバーするリンカスクリプトを作成し、アセンブルして_startラベルを作成し、スクリプトとリンクして、あなたが解体できるエルフを持っていれば、それでも問題はあると思いますが、相対的なアドレッシングは意味があり、絶対的なアドレッシングになります。

はまた、それが本当であることがあることを前提とする理由がないと仮定すると

S903189351 

あなたのエントリポイントに注意してください。

関連する問題