問題タブ [x86-64]

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 投票する
7 に答える
7360 参照

winapi - 64 ビット Windows アセンブリで "GS:" を使用する方法 (TLS コードの移植など)

ユーザー空間プログラムは、64 ビット Windows (現在 XP-64) で "GS:" をどのように構成できますか?
(設定により、GS:0 を任意の 64 ビット リニア アドレスに設定します)。

「JIT」環境を、もともと Win32 用に開発された X86-64 に移植しようとしています。

残念な設計上の側面の 1 つは、同一のコードを複数のユーザー空間スレッド (「ファイバー」など) で実行する必要があることです。コードの Win32 バージョンは、これに GS セレクターを使用し、ローカル データにアクセスするための適切なプレフィックスを生成します。「mov eax,GS:[offset]」は、現在のタスクの正しいデータを指します。Win32 バージョンのコードは、機能する値を持っていれば、その値を GS にロードします。

これまでのところ、64 ビット Windows は LDT をサポートしていないことがわかっているため、Win32 で使用される方法は機能しません。ただし、X86-64 命令セットには「SWAPGS」と、従来のセグメンテーションを使用せずに GS をロードする方法が含まれていますが、これはカーネル空間でのみ機能します。

X64 のマニュアルによると、たとえ Win64 が記述子へのアクセスを許可していたとしても (そうではありません)、セグメント ベースの上位 32 ビットを設定する方法はありません。これらを設定する唯一の方法は、GS_BASE_MSR を使用することです (および対応する FS_BASE_MSR - 64 ビット モードでは他のセグメント ベースは無視されます)。WRMSR命令はRing0なので直接使えません。

ユーザー空間の "GS:" を変更できる Zw* 関数、または Windows API のその他のダーク コーナーを期待しています。Windows はまだ FS: を独自の TLS に使用していると思いますが、何らかのメカニズムが利用可能でなければなりませんか?


このサンプル コードは、問題を示しています。バイト コードを使用していることをあらかじめお詫び申し上げます。VS は 64 ビット コンパイルのインライン アセンブリを行いません。説明のために、これを 1 つのファイルとして保持しようとしていました。

XP-32 では「PASS」と表示されますが、XP-x64 では表示されません。


0 投票する
2 に答える
5047 参照

c - x86_64 Linux のインライン asm からの syscall?

プログラムを正常に終了する代わりに、これがガベージを出力するのはなぜですか? 私はこのように BSD でシステム コールを使用していますが、Linux で動作させるには何が必要なのだろうかと思います。

ありがとう。

0 投票する
2 に答える
7418 参照

64-bit - Visual Studio(vcvarsall.bat)でコンパイルするときに選択する64ビットターゲットは何ですか?

vcvarsall.batビルド環境のセットアップを行うので、から選択できますx86 | ia64 | amd64 | x86_amd64 | x86_ia64

最初のオプションは32ビットでは明らかですが、問題は、64ビット用にビルドし、すべての64ビットマシンで実行する場合、他の4つのオプションの間で最適なオプションは何であるかということです。

64に対して4つのビルドを作成するための時間/リソースがなく、そのうちの1つだけを選択する必要があるとしましょう。

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

macos - Assembly と Mac に関する基本的な質問

わかった。Mac (Early 2009 MBP、Intel Core 2 Duo) でプログラムを組み立てる方法を知りたいです。これまでのところ、アセンブリ言語が CPU 命令の直接的な 1 対 1 ニーモニックで構成されていることだけを理解しています。グーグルで検索した後、多くの用語を見てきましたが、ほとんどが「x86」と「x86_64」です。また、MASM、NASM、GAS なども見てきました。

私が間違っている場合は修正してください:

  1. x86 および x86_64 は命令セットです。これらの命令セットを (生のマシン コードとして) 使用して何かを記述したとしても、プログラムが設計されたプロセッサ上にある限り問題ありません。
  2. NASM、MASM、および GAS はすべて異なるアセンブラーです。
  3. さまざまなアセンブリ言語があります。たとえば、AT&T 構文と Intel 構文があります。これらの構文のサポートは、アセンブラによって異なります。

さて、質問:

  1. Mac ユーザーとして、どの命令セットを気にする必要がありますか?
  2. Xcode は GCC を使用します。これはGASも使っているということですか?
  3. GAS を使用する場合、AT&T の構文を学習する必要がありますか?
  4. これについて理解できる本はありますか。チュートリアルではなく、Web 上のリファレンス マニュアルでもありません。それらのことは私について多くを想定しています。たとえば、私の知る限り、レジスタは CPU 上のほんの少しのメモリです。それは私が本当に知っていることです。

ご協力いただきありがとうございます。

0 投票する
2 に答える
4770 参照

visual-c++ - MSVC が AMD64 および Itanium ターゲットのインライン アセンブリをサポートしないのはなぜですか?

昨日、AMD64 および Itanium ターゲット用にコンパイルする場合、Microsoft Visual C++ ではインライン アセンブリ (__asm キーワードを使用) がサポートされないことを知りました。

あれは正しいですか?もしそうなら、それらのターゲットのインラインアセンブリをサポートしない理由を誰かが知っていますか? ただドロップするのはかなり大きな機能のようです...

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

gcc - インライン アセンブリ エラー、gcc コンパイル試行の妨害

こんにちは。

gcc を使用してコンパイルを試みたコードがいくつかありますが、試みは阻止されました。誰かがこの件について私を助けてくれますか?おそらく私が見逃しているものがあります.

Linux Kitchen 2.6.28-15-generic #49-Ubuntu SMP Tue Aug 18 19:25:34 UTC 2009 x86_64 GNU/Linux でこのコードをコンパイルしています。

返されるエラーは次のとおりです。

みんな、ありがとう。

0 投票する
2 に答える
13559 参照

linux - gcc で 64 ビット Linux カーネルをコンパイルする

gcc を使用して 64 ビット Linux カーネルをコンパイルしようとすると、次のエラーが表示されます。

kernel/bounds.c:1: エラー: コード モデル 'kernel' は 32 ビット モードでサポートされていません
kernel/bounds.c:1: 申し訳ありませんが、実装されていません: 64 ビット モードはコンパイルされていません

これはgcc -vが報告するものです:
組み込み仕様の使用。
ターゲット: i586-redhat-linux
以下で構成: ../configure --prefix=/usr --mandir=/usr/share/man -- infodir=/usr/share/info --with-bugurl= http:// bugzilla.redhat.com/ bugzilla --enable-bootstrap --enable-shared --enable-threads=posix -- enable-checking=release --with-system-zlib --enable-__cxa_atexit -- disable-libunwind-exceptions --enable-languages= c,c++,objc,obj-c+ +,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/ java-1.5.0-gcj-1.5.0.0/jre -- enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar - -disable-libjava-multilib --with-ppl -- with-cloog --with-tune=generic --with-arch=i586 --build=i586-redhat-linux
スレッド モデル: posix
gcc バージョン 4.4.1 20090725 (レッドハット 4.4.1-2) (GCC)

カーネルの make コマンド ラインに何か足りないものがありますか? それとも、システムに存在する gcc が 64 ビットのコンパイルをサポートしていないのでしょうか?

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

ffmpeg - ffmpeg: 異なるマシン間で異なる動作をする同じコンパイル

2 つの Ubuntu hardy ボックスで ffmpeg を使用しています。両方とも、Medibuntu からの FFMPEG のコンパイル済みバイナリの同じバージョンを持っています。3GP を FLV に変換すると、一方のマシンでは ffmpeg が音を歪ませ、もう一方のマシンでは問題なく動作します。

バージョンとフォーマットのオプションを確認しましたが、それらはすべてマシン間で同一です。

唯一の違いは、1 台のマシンが 64 ビットで、もう 1 台が 32 ビットであることです。これが問題の原因でしょうか? その場合、どうすれば解決できますか?

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

qt4 - PyQt4 on Snow Leopard in 64 bit

I just compiled the latest preview of Qt4.6 on Snow Leopard in 64 bit without any major issues.

http://qt.nokia.com/developer/qt-4.6-technology-preview#download-the-qt-4-1

Now, I am trying to do the same for PyQt4.6 with the latest snapshot from the River Bank website. However, the compiler exits with the following issue:

Is this an error with PyQt4 trying to access a private member of a Qt4 class? Has anybody compiled PyQt4 on Snow Leopard successfully?

0 投票する
19 に答える
17753 参照

c++ - 32ビットのC++コードを64ビットに移植する-それだけの価値はありますか?なんで?

x64アーキテクチャの明らかな利点(アドレス指定可能なRAMアドレスが高いなど)を認識しています...しかし:

  • プログラムをネイティブ64ビットモードで実行する必要がない場合はどうなりますか。とにかく移植する必要がありますか?
  • 32ビットサポートを終了するための予測可能な期限はありますか?
  • 私のアプリケーションは、ネイティブx64コードとしてより速く/より良く/より安全に実行されますか?