問題タブ [thumb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
483 参照

arm - ARM Cortex-M4: アセンブリで printf を呼び出すときに発生する問題

ARM M4 アセンブリで printf を呼び出そうとしていますが、いくつかの問題があります。目的は、コンテンツを R1 にダンプすることです。コードは次のようなものです

私が遭遇する問題は、「output_string」アドレスを R0 に入れると、値に 1 が追加されることです。たとえば、シンボル「output_string」の値が 0x2000 の場合、R0 は値 0x2001 を取得します。

これは THUMB/ARM モードと関係があると思います。しかし、データ セクションで「output_string」を宣言しましたが、なぜアセンブラはそれを命令アドレスとして変換するのでしょうか?

または、そのようなアセンブリ内関数呼び出しを行うためのより正式な方法はありますか?

0 投票する
1 に答える
3215 参照

gdb - gdb で ARM モードか Thumb モードかを確認するにはどうすればよいですか?

GDB を使用して ARMv7 バイナリをデバッグする場合、命令の長さを調べる以外に、CPU が現在どのモードにあるかを判断する方法はありますか? (腕、親指)

0 投票する
1 に答える
891 参照

assembly - Cortex M3 上の非 Thumb ARM コード

Cortex M3 で実行しようとしている ARM コードがいくつかあります。私のコードの大部分は、C からコンパイルされた Thumb で書かれていますが、一部の関数については、通常の ARM コードを実行できるようにしたいと考えています (私が理解しているように、これは M3 で可能ですか?)。

そう...

元の C コードとアセンブリ:

を使用してコンパイルarm-none-eabi-gcc -mfloat-abi=soft -nostdinc -nostdlib

私はこれに - で分岐しますblx r4。これは、ベース アドレス &3 が 0 の場合に交換する必要があります。

これを GDB でステップ実行すると、アドレスに正しいデータが含まれていても、表示されている行に到達するとすぐに HardFaults が発生します。

コード (BLX を使用) は Thumb コードに対して完全に機能しますが...

何が起こっているのか分かりますか?ありがとう!

0 投票する
0 に答える
935 参照

arm - 位置に依存しないコードを持つ親指関数ポインタ?

私は関数callerが引数として親指関数ポインタを取るようにしたい:

でコンパイルすると

そしてリンク

、リンカーはインターワーク コードでラップしようとfunし、インターワークが有効になっていないことを警告します。しかし、私はそれを親指だけのコードにしたいので、インターワークを有効にしたくありません。がなければ-fpic、コードはコンパイルされ、関数ポインタは正しく機能します。

サム関数ポインターを渡して PIC コードを提供する必要がある理由を知りたい場合は、API を変更できないためです。

編集: Gcc のバージョンは 4.7.2 です。指定-march=armv4t -mcpu=arm7tdmiしても役に立ちませんでした。

0 投票する
1 に答える
1799 参照

assembly - ARM/Thumb-2 命令セットとアセンブリ

まず第一に、私は ARM アセンブリに関しては初心者です。実際には ARM 命令セット用に書かれたコードがいくつかありますが、ターゲットは Thumb-2 命令セットを使用する Cortex-M4 アーキテクチャです。コード全体を書き直すか、一部を変更するか、そのままにしておく必要がありますか?

実際には、それぞれ約 250 行のファイルがいくつかあります。ここにサンプルがあります

0 投票する
1 に答える
103 参照

assembly - 異なる命令を示す同じバイナリの逆アセンブル

私のアプリケーションでは at91sam4e16e マイクロコントローラーを使用しており、starter_kit_bootloader_demo という名前のブートローダーには ASF(xdk-1.15.0) のブートローダーの例を使用しています。

今、sam4e-ek 用にプロジェクトをカスタマイズしました。そのブートローダーを使用してバイナリを更新しようとしています。

更新後、両方のバイナリファイルを比較しました1)更新ブートローダ バイナリの逆アセンブル

および 2) スタンドアロン

ここに画像の説明を入力

両方のバイナリは同じですが、IAR でデバッグすると、逆アセンブリで命令が異なることが示されます。なぜ違うのですか?

0 投票する
3 に答える
12120 参照

assembly - ARM アセンブリ コードと SVC の番号付け

ARMアセンブリコードでは、次のようなものを見ることができます...(特にシェルコードで)

「svc(または swi)」は、Intel の「int 0x80」や「SYSENTER」のような「スーパーバイザー呼び出し」であることを知っています。しかし、「svc」番号をどのように解釈できますか?? その情報のリストはどこで入手できますか?? 親指の「svc」命令はどうですか??

アームの取扱説明書はこれらを説明していないようです...

誰かが私を助けることができますか?前もって感謝します。

0 投票する
1 に答える
567 参照

arm - ARM ThumbEE 自動ヌル ポインタ チェック

ARM では、Thumb-EE 命令セットが自動ヌルポインタ チェックをサポートしています。

ARM マニュアルには、thumb-EE 命令がヌル ポインターを参照しようとすると、「ハンドラーが呼び出される」と記載されています。しかし、このハンドラーのアドレスを設定するのは誰でしょうか? そしてどのように?、いつ?ARM Thumb-EE マニュアルから回答が得られません。

0 投票する
1 に答える
1460 参照

gcc - ARM Thumb-2、GCC、コードの変更、および `stmdaeq` 命令

私は STM32F4 (Cortex-M4) MCU を使用しており、arm-none-eabi-g++ でコンパイルしています (C++ を使用しています)。

バイナリを MCU のフラッシュ メモリにアップロードするのにかかる時間を短縮する必要があります。変更の間にバイナリに変更をアップロードするだけでこれを行うことができることがわかりました。ただし、コンパイラはこれを不可能にする興味深いコードを生成しています。

次の 2 つのプログラムを検討してください。

(1)

(2)

呼び出しを削除するだけprintfで、バイナリは大幅に異なります。を使用してコードを逆アセンブルすると、これを確認できますarm-none-eabi-objdump -D mybinary。WinMerge の違いの例を次に示します。

ここに画像の説明を入力

画像でわかるように、ほぼすべての関数でstmdaeq命令が少し異なりますが、これについてもっと知りたいと思っています。

この質問への回答には、次のものが含まれます。

  • 命令が何であるかは知っていstmdaeqますが、ほとんどすべての関数の最後にあるのはなぜですか? これは機能のエピローグですか?
  • 上記の例のような小さなコード変更がバイナリ全体でそのような変更を引き起こさないようにするためにできること (コンパイラ オプションなど) はありますか?

GNU Tools for ARM Embedded Processors GCC ツールチェーンを使用しています。

あなたの助けが最も高く評価されます。

0 投票する
3 に答える
9666 参照

c++ - GCC --gc-sections とシンボルの依存関係の検索

elf 実行可能ファイルのサイズを縮小しようとしています。でコンパイル-ffunction-sections -fdata-sectionsおよびリンクして-gc-sectionsいますが、使用されていないと思われるシンボルの一部が破棄されていないようです。

どのシンボルがどこで使用されているかを調べるために実行できる GNU ツールチェーンのコマンドはありますか?

  • ツールチェーン: GNU arm-none-eabi
  • プラットフォーム: Cortex-M4
  • 言語: C++

私の典型的なビルドフラグは次のとおりです。

コンパイル:arm-none-eabi-g++.exe -Wall -O3 -mthumb -std=c++11 -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -fsingle-precision-constant -ffunction-sections -fdata-sections

リンク:arm-none-eabi-g++.exe -static -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Wl,-gc-sections -Wl,-T"LinkerScript.ld

助けてくれてありがとう。