問題タブ [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.
assembly - BIOS のデータ セグメントを読み取るための intel から ATT アセンブリへの変換
次の Intel コードに相当する ATT コードは何ですか:
linux - プログラム実行中のデータセグメント
疑問に思う:
プログラムを実行すると、そのプログラムに割り当てられるメモリの種類は次のようになります。
ここでは、データ セグメントが重要な役割を果たします。すべての初期化されたデータと初期化されていないデータは、データ セグメントに存在します。しかし、データ セグメントにデータを格納する順序については知りませんでした。Ex の場合、初期化されたデータ、初期化されていないデータ、読み取り専用、読み取り書き込みデータ。データセグメントには上記の4種類が存在すると思います。
したがって、データはどの順序でデータセグメントに配置されますか。すべてより小さいアドレスを持つ最初の初期化データのように。そして次は、初期化されたデータよりも上位のアドレスを持つ、初期化されていないデータのようなものです。
前もって感謝します。
c - C での文字配列の出力
文字配列の最後に「/o」を配置することになっていることはわかっていますが、「printf ("%s\n", kk);」と出力したい場合は 、それは「abcdepqrst」を与えます。なぜこうなった?これは私が実行しているプログラムです。
出力:
pqrst
abcdepqrst
ここで配列 'kk' の前に配列 's' を宣言することにより、配列を宣言する順序を逆にしようとしましたが、ideone linkですが、それでも同じ出力が得られます。ideone がメモリを変数に割り当てる方法に関係があると思います。
出力:
pqrst
abcdepqrst
c - 定数をrodataに設定する
環境変数を使用してロードすると問題が発生するため、rodata セグメントに文字列の値を設定する方法を理解しようとしています。rodataセクションに定数文字列を外部から設定したい。この関数は、実行されるコードから独立している必要があります。だから、私がするとき
"objdump -c foo"
ファイル foo.c を使用せずに、rodata セクションでこの文字列を登録する必要があります。.rodata セクションに定数を設定するにはどうすればよいですか?
編集: Linux OS と GCC の使用
Cコードが変更されていることを意味するため、環境変数を使用することはできません。Cコードを変更せずに、「Goo」などの定数をrodataセグメントに追加します。
c - QEMU には DATA セクションからのコマンドの実行に制限がありますか?
QEMU を使用して ARM11 CPU をシミュレートしています。
私のプログラムは複雑すぎてここで説明できないので、問題をより単純なプログラムに投影します。したがって、私のプログラムには2つのcファイルが含まれています:
- main.c
- some_code.c
some_code.c を (some_code.o に) コンパイルしてから、some_code.c のコードを表す HEX 配列変数に変換します。
現在、両方のオブジェクト ファイル (main.o と some_code.o) をリンクしています。この変数 (HEX 配列変数) は、DATA セグメントにあります。
今、main.c のコードから HEX 配列変数を呼び出しています (私の意図は、この時点で some_code.c のコードが実行を開始することです)。プログラム カウンター (PC) が HEX 配列変数に到達すると、例外が発生します (例外の詳細はわかりません)。
この HEX 配列変数を DATA セクションから CODE セクションにコピーすると、PC がこの行に到達すると、例外なく正常にステップ実行できるようになります。
だから私の質問は:
- QEMU には DATA セクションからのコマンドの実行に制限がありますか?
- もしそうなら、どうすればこの制限を無効にできますか?
よろしくお願いします。
オムリ
c++ - c/c++ データ セグメントとスタック サイズとは何ですか?
コンパイラとオペレーティング システムのアーキテクチャに依存することを読みました。GCC をコンパイラとして使用している Linux システムで、データ セグメントとスタックの最大サイズを調べるにはどうすればよいですか?
stack - スタック上の実行可能な Ada コード
昨年の 32C3で、鉄道システムのセキュリティに関する考慮事項に関する講演を見たところです。25分で、スピーカーはエイダについて簡単に話します。具体的には次のように述べています。
典型的な Ada の実装には、「(tramp/trunk/?) 行」と呼ばれるメカニズムがあります。つまり、スタック上でコードを実行することになり、C プログラムにはあまり適していません。[...] Ada コードを C ライブラリにリンクする場合、セキュリティ メカニズムの 1 つが機能しません。
トークの各部分へのリンク (YouTube) を次に示します。これは背景のスライドです。ご覧のとおり、私は単語の 1 つについて確信が持てません。もしかしてトランポリン?
ここで私の率直な質問: この声明には真実がありますか? そうだとすれば、Ada 言語のこの不思議な機能と、それが明らかに影響を与えているセキュリティ メカニズムについて詳しく説明できる人はいますか?
これまで、コードはコード セグメント(別名「テキスト」) に存在し、データ (スタックを含む) は別のメモリ位置にあるデータ セグメントに配置されると常に想定していました (この図に示されているように)。そして、Ada のメモリ管理について読むと、そこではそれほど変わらないはずです。
このようなレイアウトを回避する方法はありますが (たとえば、この「C on stack」の質問とこの「C on heap 」の回答を参照してください)、スタックが明示的に実行可能にされない限り、最近の OS は通常、実行可能スペースの保護によってそのような試みを防ぐと思います。- ただし、組み込みシステムの場合、コードが ROM に保存されていない場合は、依然として問題になる可能性があります (誰か明確にできますか?)。