問題タブ [memory-segmentation]
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 - リアルモードで far アドレスにジャンプする
リアル モードで far アドレスにジャンプする必要がある状況があります。レジスタにセグメント値があり、fs
レジスタにオフセットがgs
あり、ジャンプ中に正確なレジスタの内容を維持する必要があります。次のような 1 つのアイデアを思いつきました。続く、
と仮定しbp
、呼び出された宛先で読み取られない場合、NASM far jump / far call in real mode と ASM コード規則で見つけた別の方法を使用できます。fs
gs
どの方法を使用すべきか、またはこれを達成する他の方法があるかどうか疑問に思っていますか? 私は x86 アセンブリのスキルがあまりないので、私の無知を許してください。
よろしく、
アルカ
c++ - 2D 配列代入での C++ セグメンテーション エラー
次のコードでセグメンテーション エラーが発生します。私はこのエラーに精通していません。
誰でも私が犯している間違いを指摘できますか?
c - libc オブジェクト ファイルの特定の関数アドレスはどこにありますか?
libc で関数のアドレスを見つけようとしています。
Cで次のようなことができることを知っています:
しかし、それで libc のシステム関数のベース アドレスが得られるかどうかはわかりません。プログラム内から何らかの間接ポインタを与えると思いますか?
私はgdbを実行していて、次のことを行いました:
プログラムの実行中に、多くのセグメントが得られましたが、libc.so が含まれているセグメント以外はどこを見ればよいかわかりません。
編集:
これは私が gdb で取得したものであり、「system」、「printf」、「exit」などをどこで見つけることができるのか疑問に思っています。rodata を確認したところ、そこにシステムを見つけることができましたが、それが関数自体であるかどうかはわかりません:
intel - 8086 のメモリセグメンテーション!! . 8086 と christsake のあまり人気のないメモリ セグメントについて、このタイトルのことは本当に難しいです。
8086 の 1MB メモリが 16 の論理セクションに分割されていることは知っていますが、そのような場所は 4 つしか知りません。残りについて誰か教えてください。
c - unix で仮想メモリ内の bss セグメント、データ セグメント、およびスタック全体をトラバースするにはどうすればよいですか
Mark & Sweep 戦略を使用して C 用のガベージ コレクターを作成しようとしていますが、bss セグメント、データ セグメントをトラバースする方法がわかりません。これらのセグメントの開始アドレスと終了アドレスを取得するにはどうすればよいですか? また、スタックの一番下を見つけるにはどうすればよいですか?
memory-management - セグメントが再配置された場合、プロセスのセグメント テーブルはどうなりますか?
システムがセグメンテーションのみを使用し、ページングを使用しないとします。セグメントがスワップアウトされて再配置された場合、セグメント テーブルはどうなりますか? 新しいセグメント番号を持つ予定はありますか? テーブルの古いエントリはどうなりますか?
c++ - セグメンテーション エラー (コア ダンプ) - エラーを修正できません
次のコードで問題が発生しています。Boost を使用して行列乗算を行っています。コードのテストに Gtesting を使用しています。次のコードをテストすると、次のエラーが発生します。
使用しているポインターに関係していることはわかっていますが、エラーが見つかりません。私はいくつかのことを試しましたが、うまくいきませんでした。私のコードは次のとおりです。Ubuntu 14.04 を実行しています。
助けてくれてありがとう。このエラーは私を夢中にさせています。
debugging - GDB 検索コマンド エラー「警告: y にあるターゲット メモリの x バイトにアクセスできません。検索を停止しています」
gdb を使用して、KMines で現在のフラグ数を見つけようとしています。存在しないメモリ位置を避けるために、最初にメモリ マッピングを探す必要があることはわかっています。そこでinfo proc mappings
、コマンドを実行してメモリ セグメントを確認しました。結果からランダムなメモリ ギャップ ( 0xd27000-0x168b000
) を取得し、次のように find コマンドを実行しました。find 0x00d27000, 0x0168b000, 10
しかし、warning: Unable to access 1458 bytes of target memory at 0x168aa4f, halting search.
エラーが発生しました。アドレス 0x168aa4f は 0xd27000 から 0x168b000 の間にありますが、gdb はアクセスできないと言っています。なぜこれが起こるのですか?この状況を回避するにはどうすればよいですか? または、マップされていない/アクセスできないメモリの場所を無視する方法はありますか?
編集: アドレス 0x168aa4f の値を 1 に設定しようとしましたが、機能するため、gdb は実際にそのアドレスにアクセスできますが、find コマンドで使用するとエラーが発生します。しかし、なぜ?
assembly - x86 でのセグメントへの書き込み
テスト目的でセグメント (たとえば、 DS 以外のデータ セグメント GS など) に書き込もうとしている場合にハードウェアがどのように動作するかをテストしたいと思います... セグメントを指定できるアセンブリ命令はありますか? with.h にオフセットを付けて直接書き込みますか?
windows - Windows のメモリ管理は Linux とどう違うのですか? Windows OS はページングまたはセグメンテーションをサポートしていますか?
Windows と Linux のメモリ管理の違いについて知りたいのですが、Windows OS はページングまたはセグメンテーションをサポートしていますか?
私が理解しようとしているのは、すべてのプロセスが Windows マシンのすべての RAM を累積的に使用している場合、すべてのユーザーはシステムにログインすることさえできませんが、Linux システムの場合はそうではありません。
では、Linux システムではどのように達成されるのでしょうか?