問題タブ [data-segment]
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.
c - アセンブリ: C から呼び出された場合、または独立したプログラムとして作成された場合のデータ セグメント
私はこれについて混乱しています。どちらの場合も違いはないと思いますが、プログラムは最終的にexeファイルになります。違うと思ったら助けてください....
私の質問を明確にさせてください:
アセンブリ プログラムを「スタンドアロン」で作成する場合と、Cプログラムからアセンブリ ルーチンを呼び出す場合とで、データ セグメントの定義または処理に違いはありますか?
どちらの場合も、日付セグメントの位置またはサイズを定義しているのは誰ですか? これはコンパイラですか、それともオペレーティング システムですか? どちらの場合も、データ セグメントの値はどのように決定されたのでしょうか?
x86 - 静的ストレージ(主にデータセグメント)はセグメンテーション違反を引き起こす可能性がありますか?
static
ストレージはコンパイル時に決定されます。ただし、関数に遅延初期化がたくさんあるシナリオを考えてみましょう。
ここではコーディングの実践についてではなく、技術的な側面について説明します。のような他の多くの関数 foo()
が実行されると、それらの多くのstatic
変数がデータセグメントに導入されます。
コンパイラは、データセグメントにスペースを割り当てるときに、アカウントでも遅延初期化を行いますか。「いいえ」の場合、コードの実行中に実行時にセグメンテーション違反が発生しますか?(メソッド内に多くのstatic
データがある場合に発生する可能性が高くなりtemplate
ます)。
assembly - TurboShell/TurboAsmでの`Var2DW Var1`はどういう意味ですか?
次のコードが完全にコンパイルされるのはなぜですか?
「Var2DwVar1」という行はどういう意味ですか?を定義する型の後には、即値のみが続くと思いました。
c - bss セグメントの有用性は何ですか?
bss セグメントには、初期値として 0 が与えられる初期化されていない変数が含まれていることはわかっていますが、データ セグメントを使用してそれらを保存しないのはなぜですか?
OSローダーがmemsetを呼び出してこれらすべての変数を一度に初期化するため、実行が高速化されると読みましたが、ローダーはmemsetを呼び出してデータセグメントでも初期化できるため、あまり確信が持てません!
c - C の bss セグメント
「 Unix の bss セグメントとデータ セグメントについて」という質問への回答の 1 つに、 bssに関する次のような説明があります。
Bss は特別です。.bss オブジェクトはオブジェクト ファイル内でスペースを取りません。特に初期化されていないすべてのシンボルをグループ化することで、一度に簡単にゼロにすることができます。
しかし、コードから生成されたオブジェクト ファイルで size を使用すると、次のようになります。
私は次のものを持っています
グローバル スコープを持つ初期化されていないデータ メンバーに基づいて bss が成長するのを確認します。それで、誰でも言及された声明を正当化できますか?
assembly - x86アセンブリを使用してデータセグメントからデータを読み取るにはどうすればよいですか?
nasm32、x86アセンブリ言語を使用しています。データセグメントからいくつかの数値を読み取りたい。
このコードはちょうど
20
DATA1 53h(= 83(10進数))の値が返されると思いました。(ASCII文字で)
しかし、奇妙な数は戻りです。どうした?この結果がわかりません。
そして、どうすればこのコードを修正できますか?
assembly - データセグメントを変更するには? 私は何を間違っていますか?
私は 32 ビット OS を開発しており、問題なく動作する ELF ローダーを開発しました。現在、ページングを有効にしておらず (後で有効にする予定ですが、現在はカーネル モジュールをロードしようとしています)、起動時にモジュールを実行しようとしています。基本的に、現時点ではマルチタスクが完全に実装されていないため、各モジュールをロードし、init を呼び出して (割り込みハンドラーをインストールし、モジュールの目的を設定するだけです)、終了して次のモジュールを実行します。動作しますが、C プログラムのポインターを使用して何もできません (カーネル データ セグメントを使用していると考えているため)。したがって、基本的に私がやりたいことは、RAM のモジュール .data セグメントを指す新しいデータ セグメントを作成することです。GDTのようにエントリ番号6を設定することでこれを行っています。
setEntry メソッドは問題なく動作します。次のようになります。
ここでも両方とも 100% 動作します。データ セグメント セレクターを変更すると、問題が発生します。私はアセンブリでこれを行っています.ELFのエントリポイントはEAXに保存されています.
これにより、カーネルがパニックになり、CPU 例外 0x6、無効なオペコードが発生します。私の C プログラムのソース コードは、テキストをビデオ RAM にコピーする単なる hello world プログラムです (特に注目すべき点はありません)。私が間違っていることを誰かが知っていますか?私は GDT とセグメント セレクターの概念全体に不慣れです........そして、現時点ではページングまたはマルチタスクを有効にすることはできません.理由を説明したくありません....
compiler-construction - コンパイラ構築におけるデータセグメント
私は独自に定義した言語用のコンパイラを開発しています。3 つのアドレス コードを生成しました。次に、その 3 つのアドレス コードを実行できる仮想マシンを開発します。しかし、そのためにはデータセグメントが必要です(すべての変数値を保存できる場所)。言語には2つのデータ型(intとchar)があります。
問題を読んでくれてありがとう
、すべての変数 (int と char の両方) の値を格納できるデータ セグメントを作成する方法を教えてください。
c++ - ベクターを DLL データ セグメントに格納する
情報
次の警告:
LINK : warning LNK4039: section '.SHARED' specified with /SECTION option does not exist
C++ でダイナミック リンク ライブラリのデータ セグメントにベクトルを格納しようとすると常に発生します。
例:
ただし、単純な変数を格納しようとすると、コンパイル時に警告は表示されません。このような:
私は絶対に肯定的ではありませんが、ベクトルを初期化していないために警告が発生したと思いますか? もしそうなら、データ セグメント内に格納されるベクトルをどのように初期化できますか?
もう 1 つ質問があります。ベクトルを DLL 内のデータ セグメントに格納するのはひどい考えですか?
私の目標
複数の異なるプロセスにロードされる DLL 内でベクターのコンテンツを共有しようとしています。
このような: