問題タブ [loader]
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.
windows - Windowsで実行中のプロセスのレイアウト(セグメント)を知るためのツールはありますか?
私はいつも興味がありました
- プロセスはメモリ内でどの程度正確に見えますか?
- その中の異なるセグメント(パーツ)は何ですか?
- プログラム(ディスク上)とプロセス(メモリ内)はどの程度正確に関連していますか?
私の前の質問:実行可能プログラム(プロセス)のメモリレイアウトに関する詳細
私の探求において、私はついに答えを見つけました。私のクエリのほとんどをクリアしたこの優れた記事を見つけました:http ://www.linuxforums.org/articles/understanding-elf-using-readelf-and-objdump_125.html
上記の記事では、作成者はプロセスのさまざまなセグメント(LINUX)を取得する方法を示し、対応するELFファイルと比較します。私はここでこのセクションを引用しています:
プロセスセグメントの実際のレイアウトを知りたいですか?/ proc//mapsファイルを使用してそれを明らかにすることができます。観察したいプロセスのPIDです。先に進む前に、ここで小さな問題があります。テストプログラムは非常に高速に実行されるため、関連する/procエントリをダンプする前に終了します。これを解決するためにgdbを使用します。return()を呼び出す前にsleep()を挿入するなど、別のトリックを使用できます。
コンソール(またはxtermなどのターミナルエミュレーター)では、次のようにします。
ここを押したまま、別のコンソールを開いて、プログラム「test」のPIDを見つけます。簡単な方法が必要な場合は、次のように入力します。
以下のような出力が表示されます(異なる出力が得られる場合があります)。
注:参照として各行に番号を追加します。
gdbに戻り、次のように入力します。
(gdb)q
したがって、合計で12のセグメント(仮想メモリ領域--VMAとも呼ばれます)が表示されます。
しかし、私はWindowsプロセスとPEファイル形式について知りたいです。
- Windowsで実行中のプロセスのレイアウト(セグメント)を取得するためのツールはありますか?
- このテーマについてさらに学ぶための他の良いリソースはありますか?
編集:
PEファイルsections
とVAの間のマッピングを示す良い記事はありますsegments
か?
windows - OSのLoaderを差し替えることはできますか?ローダーを制御する方法はありますか?
オペレーティングシステムのローダー(ブートローダーではなく実行可能プログラムローダー)を置き換えることができるかどうか疑問に思っていました(Windowsが私の選択です)。デフォルトのローダーにパッチを適用できるサードパーティのローダーはありますか。
OS ローダーを制御する方法はありますか? つまり、それが行っていることを私に見えるようにしたいのです(すべてのステップ)。
なんでやりたいのかと聞かれたら、For learning purposes.
assembly - VA(仮想アドレス)およびRVA(相対仮想アドレス)
リンカへの入力として与えられるファイルは、オブジェクトファイルと呼ばれます。リンカは画像ファイルを生成し、それがローダーによる入力として使用されます。
「MicrosoftPortableExecutableand Common ObjectFileFormatSpecification 」の宣伝文
RVA(相対仮想アドレス)。画像ファイルにおいて、メモリにロードされた後のアイテムのアドレス。画像ファイルのベースアドレスが差し引かれます。アイテムのRVAは、ほとんどの場合、ディスク上のファイル内の位置(ファイルポインター)とは異なります。
オブジェクトファイルでは、メモリ位置が割り当てられていないため、RVAはあまり意味がありません。この場合、RVAはセクション(この表の後半で説明)内のアドレスであり、後でリンク中に再配置が適用されます。簡単にするために、コンパイラは各セクションの最初のRVAをゼロに設定する必要があります。
VA(仮想アドレス)。イメージファイルのベースアドレスが減算されないことを除いて、RVAと同じです。Windowsは、物理メモリとは関係なく、プロセスごとに個別のVAスペースを作成するため、このアドレスは「VA」と呼ばれます。ほとんどすべての目的で、VAは単なるアドレスと見なす必要があります。ローダーがイメージを優先位置にロードしない可能性があるため、VAはRVAほど予測可能ではありません。
これを読んだ後でも、私はまだそれを理解していません。たくさん質問があります。誰でも実際的な方法でそれを説明できますか?Object File
記載されているように&の用語に固執してくださいImage File
。
私が住所について知っているのはそれだけです
- オブジェクトファイルでも画像ファイルでも、正確なメモリ位置がわからないので、
- オブジェクトファイルの生成中のアセンブラは、セクション
.data
&.text
(関数名の場合)に関連するアドレスを計算します。 - 複数のオブジェクトファイルを入力として受け取るリンカーは、1つの画像ファイルを生成します。生成中に、最初に各オブジェクトファイルのすべてのセクションをマージし、マージ中に、各セクションに関連するアドレスオフセットを再計算します。そして、グローバルオフセットのようなものはありません。
私が知っていることに何か問題がある場合は、私を訂正してください。
編集:
フランソワ1世の答えを読んだ後、私は物理アドレス、VA、RVAとは何か、そしてそれらの間の関係は何かについて明確になりました。
すべての変数とメソッドのRVAは、再配置中にリンカーによって計算される必要があります。したがって、(メソッド/変数のRVAの値)==(ファイルの先頭からのオフセット)?真実でなければなりません。しかし、驚くべきことに、そうではありません。なぜそうなのか?
PEView を使用してこれを確認したc:\WINDOWS\system32\kernel32.dll
ところ、次のことがわかりました。
- RVAとFileOffsetは、セクションの先頭まで同じです(
.text
このdllの最初のセクションです)。 - の先頭から
.text
最後のセクションまで(.data
)RVAとFileOffsetが異なります。また、最初のセクションの最初のバイトのRVAは、「常に」次のように表示されます。.rsrc
.reloc
0x1000
- 興味深いのは、各セクションのバイトがFileOffsetで連続していることです。つまり、別のセクションは、セクションの最後のバイトの次のバイトから始まります。しかし、RVAで同じことを見ると、これらはセクションの最後のバイトと次のセクションの最初のバイトのRVAの間の大きなギャップです。
私の推測:
すべて、最初の(
.text
ここの)セクションの前にあったデータのバイトは、実際にはプロセスのVAスペースにロードされません。これらのデータのバイトは、これらのセクションを見つけて説明するために使用されます。それらは「メタセクションデータ」と呼ぶことができます。プロセスのVAスペースにロードされていないため。
RVA == FileOffset
RVAという用語の使用も無意味です。これがこれらのバイトの理由です。以来、
- RVA用語は、VAスペースに実際にロードされるバイトに対してのみ有効です。
.text
、、、.data
のバイト.rsrc
は.reloc
そのようなバイトです。- RVAから開始する代わりに、
0x00000
PEViewソフトウェアはから開始し0x1000
ます。
なぜ3回目の観測なのか理解できません。私は説明できません。
apache-flex - ローダーの配列?
ローダーの配列を作成するにはどうすればよいですか?
全体像:
Flex でマッピング プログラムを作成しました。マッピング プログラムを変更して、flex ファイルに必要な正確な数のアイテム ローダーを追加するのではなく、新しい xml ファイルにドロップするだけでよいようにしたいと考えています。そのため、XML ファイル内にある画像ファイルをロードできる一連のローダーを探していると思います。
xml ファイルの例:
この xml には 2000 の場所が含まれる場合があります。
ajax - google.loader.ClientLocation: 米国のユーザーの「地域」には何が返されますか?
この情報がどこにも見つからないようです: Google AJAX API を介して米国にいるユーザーに関する地理情報を取得する場合、google.loader.ClientLocation.address.region は完全な州名 (「カリフォルニア」など) を返しますか?略語(「CA」)?
米国にいる場合: http://www.thewhyandthehow.com/javascript-geolocation-using-google-ajax-apis/の「Region」に対してどのような結果が得られますか(「I」で始まる行)ここに 1 つ追加しました")?
前もって感謝します。
actionscript-3 - AS3 外部 SWF 停止
こんにちは、外部 SWF を MovieClip にロードしています。再生を選択するまで停止させたいと思っています。現在、ロードするとすぐに再生されます。
そこで、ムービークリップに Event.ENTER_FRAME を追加してそこで停止しようとしましたが、停止しますが、最初のフレームが再生されます。再生を選択するまでロード時に停止したままにする方法はありますか?
linker - バイナリ形式の「アライメント」フィールドとは何ですか? なぜそれが必要なのですか?
ELFファイル形式では、別名にAlignmentフィールドがあります。Segment Header Table
Program Header Table
Windows PE ファイル形式の場合、次のレベルに進みます。セクションには 2 つのアラインメント値があり、1 つはディスク ファイル内にあり、もう 1 つはメモリ内にあります。PE ファイルのヘッダーは、これらの値の両方を指定します。
私はこの配置について何も理解していませんでした。何のために必要ですか?どのように、どこで使用されますか? 繰り返しますが、バイナリ ファイル形式のコンテキストでアライメントとは何かわかりませんが、なぜそれが必要なのですか?
jquery - 書体JSのDivがポップ可能なコンテンツで表示されないdiv
コンテンツdiv用にjQueryローダーを作成しました。しかし、それはもう私のものを表示しませdiv class="typeface"
ん。これは、別のフォントを使用できないことを意味します。コンテンツdivの残りの部分は正しく機能します。誰か助けてもらえますか?
Javascriptコード:(要素用)
HTMLコード:
assembly - 各プロセスのカーネル仮想メモリには何が含まれていますか?
たとえば、3つのプログラム(実行可能ファイル)がメモリにロードされると、レイアウトは次のようになります。
代替テキストhttp://img97.imageshack.us/img97/3460/processesm.jpg
私は次の質問をしました:
仮想メモリの概念はユーザープロセスに限定されていますか?なぜなら、オペレーティングシステムカーネル、ドライバーはどこにあるのだろうか?そのメモリレイアウトはどうですか?カーネル側のメモリについてもっと知りたいです。私はそのオペレーティングシステム固有があなたの選択をすることを知っています(windows / linux)。
仮想メモリの概念はプロセスごとですか?つまり、4GBのプロセス1+4GBのプロセス2+4GBのプロセス3=12GBの仮想メモリ(すべてのプロセス)と言うのは正しいことです。これは正しく聞こえません。または、合計4GBのスペースから1GBがカーネルによって使用され、残りの3GBはすべてのプロセスで共有されます。
彼らは、4GBのアドレス空間にある32ビットマシンで言う。その半分(または最近では1GB)がカーネルによって占められています。この図では、「カーネル仮想メモリ」が0xc0000000-0xffffffff(= 1 GB)を占有していることがわかります。彼らはこれについて話しているのですか?それとも何か他のものですか?確認したいだけです。
これらの各プロセスには正確に何が含まれていますか?
Kernel Virtual Memory
そのレイアウトは何ですか?IPCを行うときは、共有メモリについて話します。これらのプロセス間で共有されているメモリはありません。どこに住んでいますか?
リソース(ファイル、Windowsのレジストリ)は、すべてのプロセスに対してグローバルです。したがって、リソース/ファイルハンドルテーブルはグローバルスペースに存在する必要があります。それはどのエリアにありますか?
このカーネル側のものについてどこでもっと知ることができますか?
actionscript-3 - AS3: 読み込んだswfのサイズ設定
Loader を使用して外部 SWF を SWF にロードし、ロードした SWF を event.target.content を使用してステージに追加しています。
ロードされた SWF の幅と高さを設定すると、ロードされた SWF 内のムービークリップのサイズが実際に変更されます。私がしたいのは、ロードされたswfのステージサイズを変更することです。
それを行う方法はありますか?