問題タブ [x86]

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.

0 投票する
9 に答える
19769 参照

c++ - マルチコア x86 CPU でキャッシュの一貫性を強制できますか?

先週、スレッド間の通信を可能にするための小さなスレッド クラスと一方向メッセージ パイプを作成しました (明らかに、双方向通信のためにスレッドごとに 2 つのパイプが必要です)。Athlon 64 X2 ではすべて問題なく動作しましたが、両方のスレッドが同じ変数を参照していて、各コアでこの変数のローカルにキャッシュされた値が同期していない場合、問題が発生するのではないかと考えていました。

volatileキーワードが変数をメモリから強制的に更新することは知っていますが、マルチコア x86 プロセッサですべてのコアのキャッシュを強制的に同期させる方法はありますか? これは私が心配する必要があることですか、それとも軽量ロックメカニズム (私は揮発性パイプ変数を設定するために _InterlockedExchange を使用していました) の揮発性および適切な使用は、マルチコア x86 CPU 用の「ロックフリー」コードを記述したいすべてのケースを処理しますか?

クリティカル セクション、ミューテックス、イベントなどについては既に認識しており、使用したことがあります。どの力を認識していないか、キャッシュの一貫性を強制するために使用できるx86組み込み関数があるかどうか、私は主に疑問に思っています。

0 投票する
3 に答える
1058 参照

.net - ビルド時に.NET依存関係チェーンの上位にx86を要求する方法

マネージDLLであるp4.netを使用するプロジェクトがいくつかあります。p4.netは、32ビットのアンマネージDLLであるp4dn.dllに依存しています。これはx64システムで問題があるため、p4.netを使用する各プロジェクトに移動し、そのプロセッサタイプをx86に設定する必要がありました。

問題を正しく理解していれば、.NETがexeをロードすると、マニフェストをチェックし、マニフェストがない場合は、プロセッサタイプに最適な処理を実行します。次に、32ビットdllに遭遇すると、barfsします。

p4.netを使用する各プロジェクトに移動し、32ビットとしてマークすることができます。しかし、これらはかなりの数あります。また、人々は新しいものを作り続け、32ビットを設定するのを忘れるでしょう。そして将来、誰かがx64でそれを使おうとすると、この問題が再び発生します。

私の質問はこれです:.NETにp4dn.dllを32ビットとして使用するアプリを自動的にロードさせる方法はありますか?それができない場合、IDEがこれを検出してビルドに失敗する方法はありますか?

または、p4apiまたはp4dn.dllの横に配置できる.manifestファイルを作成して、それらを使用するアプリが32ビットで自動実行されるようにすることは可能ですか?

0 投票する
10 に答える
21437 参照

debugging - あなたの好きなアンチデバッグトリックは何ですか?

以前の雇用主では、基本的にDLLとヘッダーファイルだけのサードパーティコンポーネントを使用していました。その特定のモジュールはWin32で印刷を処理しました。しかし、コンポーネントを作成した会社が破産したため、見つけたバグを報告できませんでした。

そこで、自分でバグを修正してデバッガーを起動することにしました。いつものように、ほとんどどこにでもデバッグ防止コードを見つけて驚いたIsDebuggerPresentが、私の注意を引いたのはこれだった。

一見したところ、2回呼び出されたルーチンを踏んだだけで、その後はバナナになりました。しばらくして、ビットをいじる結果は常に同じであることに気付きました。つまり、jmpeaxは常に命令に直接ジャンプしましたmov eax, 0x310fac09。バイトを分析すると、DLL内のいくつかの呼び出しの間に費やされた時間を測定するために使用され0f31た命令がありました。rdtsc

だから私のSOへの質問は:あなたの好きなデバッグ防止のトリックは何ですか?

0 投票する
1 に答える
1880 参照

c - Intel Core 2 Duo の命令パイプラインをドレインしますか?

C でいくつかの非常に短い操作のマイクロ ベンチマーク コードを書いています。たとえば、渡された引数の数に応じて、空の関数を呼び出すのに必要なサイクル数を測定しています。

現在、各操作の前後にRDTSC命令を使用してタイミングを計り、CPUのサイクル数を取得しています。ただし、最初の RDTSC の前に発行された命令が、測定している実際の命令の速度を低下させる可能性があることを懸念しています。また、2 番目の RDTSC が発行される前に完全な操作が完了しないのではないかと心配しています。

新しい命令が発行される前に、実行中のすべての命令を強制的にコミットする x86 命令を知っている人はいますか? CPUIDがこれを行う可能性があると言われましたが、そう言っているドキュメントを見つけることができませんでした.

0 投票する
5 に答える
57599 参照

performance - EBPフレームポインタレジスタの目的は何ですか?

私はアセンブリ言語の初心者であり、コンパイラーによって発行されたx86コードは、通常、EBPレジスターを他の目的に使用できる場合、リリース/最適化モードでもフレームポインターを保持していることに気付きました。

フレームポインタがコードのデバッグを容易にしalloca()、関数内でが呼び出された場合に必要になる理由を理解しています。ただし、x86にはレジスタがほとんどないため、1つで十分な場合に、スタックフレームの位置を保持するために2つのレジスタを使用することは、私には意味がありません。最適化/リリースビルドでもフレームポインタを省略することが悪い考えと見なされるのはなぜですか?

0 投票する
7 に答える
25028 参照

assembly - プログラムカウンターを直接読み取る

Intel CPUのプログラムカウンターは、カーネルモードまたはその他のモードで直接(つまり、「トリック」なしで)読み取ることができますか?

0 投票する
4 に答える
4386 参照

c++ - アドレスへの書き込みをトラップする可能性があります(x86-linux)

たとえば、割り込みにアタッチされたコールバックを設定することにより、メモリアドレスへの書き込みがいつ発生したかを検出できるようにしたい。誰かが方法を知っていますか?

実行時にこれを実行できるようにしたいと思います(おそらくgdbにこの機能がありますが、私の特定のアプリケーションではgdbがクラッシュします)。