問題タブ [inline-assembly]

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

c# - C#のx86 / x64 CPUID

他の質問に関連して、 「不明なモジュールでタイプ「System.AccessViolationException」の未処理の例外が発生しました。追加情報:保護されたメモリの読み取りまたは書き込みを試みました。これは、他のメモリが破損していることを示していることがよくあります。」のデバッグにご協力ください。コードをステップスルーすると、del()が実際に呼び出されるまですべてが機能し、その行で失敗します。

このコードは、この記事のサンプルとPythonで動作するこのPythonコードに基づいています。コード例をそのまま使用することもできませんが(同じ例外)、少し古くなっているか何かであると期待しています。

編集:私たちがここにたどり着いた方法に関心がある場合は、編集履歴を参照してください。これは興味深いことではありません。

完成した作業バージョン:

CPUID0は正しい順序で読み取る必要があることに注意してください。

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

c++ - アセンブリと C++ で関数を 2 回呼び出す

呼び出される関数を新しい関数に変更するコードがありますが、新しい関数だけを呼び出すのではなく、古い関数も呼び出したいです。これは例なので、私の言っていることが理解できます。

.exe を逆アセンブルすると、次の部分が表示されます。

(0x123はその行のアドレスです)したがって、次のコードを使用しました:

今、SUB_L00999999 を呼び出す代わりに、MyNewFunction を呼び出します...

だから...どうすれば古い関数を呼び出すことができるかについてのアイデアはありますか?

私はこのようなことを(多くの方法で)試しましたが、アプリケーションがクラッシュします:

注: 私は Visual Studio C++ 2010 を使用しており、これらのコードは .exe にロードされた .dll にあります。

ありがとう。

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

c - Linux での C インライン アセンブリ、スタックから stdout への文字列の書き込み

スタックから stdout に文字列 (例: "Hello") を書き込むにはどうすればよいですか? つまり、データセグメントなしです。

前もって感謝します

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

c++ - C++ でのアセンブリ

次のコードがあります。

私はアセンブリをよく知っていますが、プログラムが画面に 2 を出力しないのはなぜですか?

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

c++ - 組み込みアセンブラでのコンパイルエラー

このコードがなぜかわかりません

は次のエラーを示しています。

1> c:\ users \ david \ document \ visual studio 2010 \ projects \ assembler_instructions \ assembler_instructions.cpp(11):エラーC2414:オペランドの数が不正です

すべてが正常に見えますが、なぜこのコンパイラエラーが発生するのですか?

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

gcc - インラインガスに関するドキュメント

Linux 0.01カーネルを読むとき、私が渡すインラインガスを投げますが、これはデコードするのが難しいです。

また

':'の間にあるものを解釈する方法がわかりません。

誰かがそれについてのドキュメントを手に入れましたか?

ありがとう

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

c - 'asm'、'__asm'、'__asm__'の違いは何ですか?

__asm { ... };私が知る限り、との唯一の違い__asm__("...");は、最初の使用mov eax, varと2番目の使用movl %0, %%eax:"=r" (var)最後にあることです。他にどのような違いがありますか?そして、どうasmですか?

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

c++ - インライン アセンブラを .asm ファイルに変換する方法

インライン アセンブラ関数を .asm ファイルに変換する際に問題が発生しています。x64 アーキテクチャではインライン アセンブリがサポートされていないため、別のインライン アセンブラ コードが必要です。ここにコードがあります、

私のcppファイルに変換してリンクする方法はありますか? 今からありがとう。

THK

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

c++ - ヒープ ベースのデータを使用してスタック オブジェクトを引数として受け取る関数を呼び出す

立ち往生していて、これを解決する方法がまったく見つからないため、解決すべき複雑な問題があります。これがコードです

ここでfooは、 がスタック上のオブジェクトを操作しており、呼び出されたときにスタック オブジェクトがマップされることを期待していることがわかりますfoo。しかし、残念ながら、MyStructコンパイル時にタイプがわからないため、メモリのブロックを作成する必要があり、実行時にそのブロック内にデータが入力され、foo上記のように asm で呼び出されたときに渡されます。

ヒープ void ポインターをスタック型オブジェクトに変換するにはどうすればよいですか。どういうわけか のa_myStruct引数のアドレスを取得すると、その場所fooを指すことができますが、型のオブジェクトに変換されるようにvoid*逆参照することはできません。void*MyStruct

問題を解決する他の方法はありますか?C++ と同様に、実行時に型を決定することもできます。


C++ で実行時に関数を呼び出す際に問題があり、コンパイル時に不明なユーザー定義型が完全に署名されている可能性があります。またはDIA SDKから)。しかし、主な問題は、実行時にこれらの関数を呼び出したいということです。コンパイル時に、関数のアドレスと、その関数シグネチャの引数として参加しているオブジェクトまたはポインターのユーザー定義型の詳細を取得します。実行時にその関数を呼び出したい場合は、最初にヒープに一時ブロックを作成し、そのブロックにデータを入力して、実行時にその型を設定する必要があります。その型のすべての詳細があります。

ここでの問題は、関数が引数をその型のポインターとして使用できるかどうか、またはその引数が正確にその型のスタックオブジェクトであるかどうかがわからないことです。その型へのポインタがあれば問題ありませんが、そこにオブジェクトがある場合、実行時にその関数を呼び出すのに大きな問題があります。

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

c++ - GCCインラインアセンブリ:dwordptrを呼び出す

Windows VC ++に次のコードがある場合:

AT&T構文を使用して、GCCインラインアセンブリで同じことを行うにはどうすればよいですか?

このようなことを試しましたが、「ジャンク」エラーが発生します...

そして、いくつかのレジスタに渡して、それを、などに変換しようとしましたが、somevar動作させることができませんでした。dwordptr

更新:その場合、角かっこではなく括弧を使用する必要があるように見えるなど、便利なものを見つけました。また、lcallと呼ぶものを見つけましたfar。でも、どうやって再現できるのか、まだわかりませんdword ptr