問題タブ [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.
c++ - sys/uio.h の write() が -1 を返す
Ubuntu Server 9.10 AMD Phenom 2 cpu g++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 を使用しています。
アプリケーション pftp-shit v 1.11 を実行しようとすると、リモート ファイル リストが (.pftp//pftpfxp-- に) 保存されるまで正常に実行されます。
tcp.cc の次のコードは正常に実行されます。
ファイル記述子int(私の場合は6)を返します-nameは、作成に成功したファイルへの有効なパスを含むchar配列です。そして正常に実行されています:
と
この問題は、関数の実行中に発生します (sys/uio.h から)。
これは -1 を返します。何も書き込まれていない場合は -1 が返され、それ以外の場合は、書き込まれたバイト数に等しい負でない整数が返されます。
書き込み機能を機能させる方法を知っている人はいますか?
assembly - バイナリ実行可能ファイル/C 配列から x86 アセンブリ コードを生成する
Linux マシンでアセンブリ コードに変換する必要がある、バイナリ x86_64 マシン コードを含む C 配列があります。C配列をバイナリ実行可能ファイルに変換するのに問題はありませんが、それをasmコードに変換するユーティリティが見つかりません.
何か案は?
ありがとう!
batch-file - 変数を設定するための簡単なバッチ ファイルを作成しますか?
マシンのアーキテクチャに基づいて環境変数を設定する簡単なバッチ ファイルを作成したいと考えています。以下の通りです。
アーキテクチャが「AMD64」である 64 ビット マシンでは、JAVA_ROOT は echo ステートメントで「C:\Progra~2\Java\j2re1.4.2_13」として表示されます。しかし、このファイルを使用するアプリケーションを実行すると、JAVA_ROOT の最初の値が「C:\Progra~1\Java\j2re1.4.2_13」として取得されます。これを64ビットのWindows7で実行しているにもかかわらず、なぜ「if」の部分に入るのかわかりません。私が反響したとき
asp.net - 32 ビット環境で開発された ASP.NET アプリケーションが 64 ビット環境で動作しない
Visual Studio 2008 を使用して Windows 7 - 32 ビット プラットフォームで ASP.NET Web サイトを開発しました。
ホスティングを専用の Windows 2008 - 64 ビット サーバーに変更中です。
アプリケーションをデバッグするために、この新しいサーバーに Visual Studio をインストールしました。
Visual Studio 2008 独自の Web サーバー (IIS 7 ではない) を使用して、この新しいサーバーでアプリケーションを起動しようとすると、次のエラーが発生します。
32 ビット モードと 64 ビット モードの両方でアプリケーションをコンパイルしようとしました。また、「任意の CPU」にコンパイルしようとしました。しかし、何も役に立ちません。また、Visual Studio を管理者として実行しようとしましたが、成功しませんでした。
次のエラーが表示されます。
このエラーが表示される理由と解決方法を知っている人はいますか?
vmware - 64 ビット CPU 上の VMware 4 ESXi は 64 ビット ゲストを実行しますか?
AMD FX CPU を搭載した PC を持っています (FX51 か FX60 かは覚えていません)。
64Bit ですが、64Bit ゲストを実行できるということですか? CPU に視覚化拡張機能がなくても?
objective-c - Skype Mac API - AppleScript または 5 年前の API を使用しますか?
オプションでSkypeステータスメッセージを読みたいx86_64アプリがあります。ただし、5 年前の skype mac フレームワークは 32 ビットであり、それを 64 ビット アプリ内でコンパイルする方法があれば、私は見つけられませんでした。
私の質問は、基本的に、これを行うにはどうすればよいですか? 本当に必要なのは、USERSTATUS AWAY/ONLINE 文字列を取得して設定することだけです。
AppleScript を使用すると、「Skype でこれを許可する必要がありますか」というダイアログが毎回表示されます。これは非常に非効率的で、まったくイライラします。
アドバイス?
32 ビットの CLI ラッパーを作成することを検討していますが、それはやり過ぎのようです。
assembly - Linux でのアセンブリ コードからの SDL/OpenGL の呼び出し
学習目的で、アセンブリで単純なグラフィックベースのプログラムを作成しています。このために、OpenGL または SDL のいずれかを使用するつもりでした。アセンブリから OpenGL/SDL の関数を呼び出そうとしています。
問題は、インターネットで見つけた多くのアセンブリや OpenGL/SDL チュートリアルとは異なり、私のマシンの OpenGL/SDL は明らかに C 呼び出し規則を使用していないことです。私は C で簡単なプログラムを書き、アセンブリにコンパイルしました (-S スイッチを使用)。GCC によって生成されたアセンブリ コードは、スタックにプッシュされるのではなく、レジスタにパラメータを渡すことによって OpenGL/SDL 関数を呼び出すようです。
さて、問題は、これらの OpenGL/SDL 関数に引数を渡す方法をどのように決定するかということです。つまり、どの引数がどのレジスタに対応するかをどのように把握するのでしょうか?
明らかに、GCC は C コードをコンパイルして OpenGL/SDL を呼び出すことができるため、関数の引数とレジスタ間の対応を把握する方法が必要です。C 呼び出し規則では、ルールは簡単です。パラメーターを後方にプッシュし、eax/rax で値を返します。C のドキュメントを読むだけで、パラメーターを渡す方法を簡単に理解できます。しかし、これらはどうですか?
C 呼び出し規約を使用して OpenGL/SDL を呼び出す方法はありますか?
ところで、Gentoo Linux amd64 のリンカとして gcc/ld を使用して、yasm を使用しています。
x86-64 - X86_64 _assembly_ の書き方は?
目標: X86_64 アセンブラを書きたい。注: コミュニティ wiki としてマークされています
背景: 私は C に精通しています。以前に MIPS アセンブリを作成したことがあります。私はいくつかのx86アセンブリを書きました。ただし、x86_64 アセンブラーを作成したいのですが、ジャンプして実行を開始できるマシン コードを出力する必要があります (JIT のように)。
質問は次のとおりです。これにアプローチする最良の方法は何ですか? 私は、この問題に取り組むのがかなり大きいように見えることを認識しています。基本的な最小セットから始めたいと思います:
- レジスタにロード
- レジスタの算術演算 (整数のみで問題ありません。まだ FPU をいじる必要はありません)
- 条件文
- ジャンプ
チューリング完全にするための基本セットです。誰かがこれをしましたか?提案/リソース?
objective-c - アプリはi386でクラッシュし、x86_64で動作します
今日、Xcodeプロジェクトでアーキテクチャを切り替えてみました。これは、64ビットにまだ移植されていない低レベルのQuickTimeのものを使用しようとしていたためです。以前にx86_64でコンパイルしたとき、私のアプリは問題なく動作しました。次に、アーチをi386とブームに切り替えましたが、起動時にアプリがクラッシュし続けます。
奇妙なことに、スタックトラックは私自身のコードとは何の関係もありません。
何か案は?
c - 並列スタックを作成してコルーチンを実行するにはどうすればよいですか?
私は楽しみと利益のためにコルーチンを実装しようと決心しました(私はそれを私がそれらと呼ぶべき方法だと思います)。アセンブラを使用する必要があると思います。これを実際に何かに役立てたい場合は、おそらくCを使用する必要があります。
これは教育目的であることに注意してください。すでに構築されているコルーチンライブラリを使用するのは簡単すぎます(そして実際には面白くありません)。
あなたたちは知っsetjmp
ていlongjmp
ますか?スタックを事前定義された場所まで巻き戻し、そこから実行を再開できます。ただし、スタックの「後で」に巻き戻すことはできません。早く戻ってくるだけです。
私が欲しいのは、スレッド化せずに、異なるスタックで2つの関数を実行する方法です。(明らかに、一度に実行されるのは1つだけです。スレッド化はありません。)これら2つの関数は、もう一方の実行を再開できる(そして自身の実行を停止できる)必要があります。彼らがlongjmp
他の人と一緒にいた場合のように。他の関数に戻ると、元の場所(つまり、他の関数に制御を与えた呼び出し中または呼び出し後)から再開する必要があります。これは、にlongjmp
戻る方法と少し似ていますsetjmp
。
これは私がそれを考えた方法です:
- 関数
A
は、並列スタックを作成してゼロにします(メモリなどを割り当てます)。 - 関数
A
は、すべてのレジスタを現在のスタックにプッシュします。 - 関数
A
は、スタックポインターとベースポインターをその新しい場所に設定し、ジャンプバックする場所と命令ポインターを戻す場所を示す不思議なデータ構造をプッシュします。 - 関数
A
はそのレジスタのほとんどをゼロにし、命令ポインタを関数の先頭に設定しますB
。
これは初期化用です。これで、次の状況が無期限にループします。
- 関数
B
はそのスタックで機能し、必要な作業をすべて実行します。 - 機能は、中断して再び制御
B
を与える必要があるポイントに到達します。A
- 関数
B
は、すべてのレジスタをスタックにプッシュし、最初に与えられた不思議なデータ構造 を取得し、スタックポインタと命令ポインタを指示された場所に設定します。その過程で、再開する場所を指示する新しい変更されたデータ構造が返されます。A
A
A
B
- 関数はウェイクアップし、スタックにプッシュしたすべてのレジスタをポップバックし、割り込みをかけて再び制御
A
を与える必要があるポイントに到達するまで機能します。B
これはすべて私にはいいですね。しかし、私が完全に安心していないことがいくつかあります。
- どうやら、古き良きx86には、
pusha
すべてのレジスタをスタックに送信するこの命令がありました。ただし、プロセッサアーキテクチャは進化しており、x86_64では、より多くの汎用レジスタと、おそらくいくつかのSSEレジスタがあります。pusha
私は彼らを後押しする証拠を見つけることができませんでした。mordernx86CPUには約40個のパブリックレジスタがあります。私はすべてのことをpush
自分でしなければなりませんか?さらに、push
SSEレジスターはありません(同等のものは必ずありますが、私はこの「x86アセンブラー」全体に慣れていません)。 命令ポインタの変更は、言うのと同じくらい簡単ですか?ただmov rip, rax
(Intel構文)のようにできますか?また、それから値を取得することは、それが絶えず変化するので、いくらか特別でなければなりません。私が好きならmov rax, rip
(Intel構文も)、命令rip
の上、mov
その後の命令、またはその間のどこかに配置されますか?jmp foo
です。ダミー。- 不思議なデータ構造については何度か触れました。これまでは、ベースポインター、スタックポインター、および命令ポインターの少なくとも3つが含まれている必要があると想定していました。他に何かありますか?
- 何か忘れましたか?
- 私は物事がどのように機能するかを本当に理解したいのですが、それを実行するライブラリがいくつかあると確信しています。何でも知ってますか?スレッドのように、POSIXまたはBSDで定義された標準的な方法はあり
pthread
ますか?
私の質問のテキストウォールを読んでくれてありがとう。