問題タブ [mbr]
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.
loops - この ASM 関数が正しく印刷されないのはなぜですか?
null で終わる文字列または固定長の文字列を特定のメモリ位置に出力する小さな関数を作成しようとしています。これが私のコードです:
テストすると、無限に出力され、null バイトで停止しません。どこで間違いを犯したのですか?
embedded - MBR なしで小さな SD カードをフォーマットすることは可能ですか?
SDカードを読み取るために、組み込みシステム用の読み取り専用FAT16/32ファイルシステムライブラリを実装しようとしています(教育目的でホイールを再発明しています)。
MBR なしでフォーマットされたカードがあるようです。パーティションテーブルのないFATだけです。
FAT ドキュメントと MBR ドキュメントを読み、MBR と FAT の両方を備えた SD カードを読み取る方法を学びました。
MBR なしで SD カードの読み取りをサポートするには、C++ ライブラリが必要です。
私の現在のアプローチは次のとおりです。
- FAT BPB (Boot Parameter Block) が含まれていると仮定して、最初のセクターを読み取ってみてください。
- 情報が有効かどうかを確認してください。
- はいの場合は、ルート ディレクトリの読み取りを続けます。
- それ以外の場合は、MBR があると想定します。
- 0x1BE から始まるパーティション テーブルを読み取ります。
- サポートされているパーティション タイプが使用可能な場合は、その最初のセクターを FAT として読み取ってみてください。
- 読み取った情報が有効な場合は、ルート ディレクトリの読み取りを続行します。
- それ以外の場合は ERROR_CODE を返します
より良いアプローチはありますか?たとえば、特定できるマジック ナンバーや特定のパターンはありますか。
windows - Boot Indicator フィールドは MBR パーティション テーブル内にどのように収まりますか?
どうやら MBR は 512 バイトのデータ構造です。
- BootCode の場合は 446 バイト。
- パーティション テーブルの場合は 64 バイト
- 最後に署名用の 2 バイト。
パーティション テーブル構造には、ハード ディスク上のパーティションの種類と場所を識別するために使用される 16 バイトのエントリが 4 つあります。
マイクロソフトによると
パーティション テーブルの最初の要素である Boot Indicator フィールドは、ボリュームがアクティブなパーティションであるかどうかを示します。このフィールドを設定できるのは、ディスク上の 1 つのプライマリ パーティションだけです。
パーティション 1\ 0x01BE(446)
パーティション 2\ 0x01CE(462)
パーティション 3\ 0x01DE(478)
パーティション 4\ 0x01EE(494)
パーティション テーブルの 16 バイトの 4 つのエントリがそれぞれ利用可能な 64 バイトのスペースを完全に使い切ってしまうため、ブート インジケータ フィールド用のスペースを残すことができるでしょうか?
ブート インジケータ フィールドは、アクティブなエントリ フィールド スペースであるパーティションに詰め込まれていますか? (エントリごとに実行されているブート インジケータ フィールドを盗聴するための正規表現操作を想像することはできません...)
おそらく私はこれを間違って視覚化していますが、何かが違法に見えますか?
pointers - データ セグメントを使用する場合、BYTE PTR を使用してアドレス サイズを決定する
MBR コード (リアル モードの 16 ビット アセンブリ コード) を理解しようとしていますが、次の行があります。
リアルタイムで何が起こるかというと、物理アドレスが「D8」であるということです - どうすればそれを知ることができますか? これは、文字列をロードして文字列に出力するために使用されるためです。これは、このプログラムを実行して最初に目にするもので、コードの最初の行です。
私の質問は 2 行目についてです。私が取得した物理アドレスは、物理アドレス (セグメント * 16 + オフセット) を取得するために計算が行われたためか、または BYTE PTR が SI アドレスが BYTE のタイプになることを示しているためですか?読み取るデータのタイプはバイト型ですか?
assembly - MBRのパーティションテーブルからCHS情報にアクセスするには?
パーティション テーブルを読み取り、ブータブル パーティションの最初のセクターをロードする基本的な MBR を作成しています。CHS と LBA のアドレッシング モードで混乱しています。互換性の理由を除いて、CHS は多かれ少なかれ使用されていないことをチュートリアルで読みました。そこで、LBA (INT 13h 拡張機能) を使用することにしました。ドライブのセクターをロードするには、そのパーティションのパーティション テーブルから CHS 値を読み取る必要があります。そうして初めて、それを LBA に変換し、「ディスク アドレス パケット」に格納することができました。
私の疑問は、パーティション テーブルの CHS がそれぞれ 1 バイトであることです。この値を直接取得して LBA に変換する必要があります (または) 最初に変換する必要があります。
そしてそれをLBAに変換しますか?
注: 私の MBR は、HDD と USB の両方のセクターにアクセスできる必要があります - それが動機です。
OS: Ubuntu
アセンブラー : ガス