問題タブ [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.
com - x64でのCOM呼び出し規約
私は、COMがx64マシンでどのように動作するかに関して決定的な答えを得ようとしています。Windowsは、x64マシン上のCOMインターフェイスに呼び出しをディスパッチするときに通常のx64呼び出し規約を使用しますか(COM実装が64ビットであると想定)?具体的には、実行時に動的にロードされるアセンブリのチャンクを指すように、vtblエントリを動的に生成します。このアセンブリは、呼び出し元のユーザーからパラメータを正しく取得する方法を知っている必要があります。したがって、COMが標準のx64呼び出し規約(ほとんど高速呼び出し)を使用してアセンブリへの呼び出しを設定するかどうかを知りたいです。
c++ - 主要な C/C++ コンパイラによって生成されたコードに割り当て規則を登録する
昔 (32 ビット以前の Intel プロセッサ)、C/C++ コンパイラ (私の場合は当時の Borland/Turbo) によって生成されたアセンブリ出力を分析する必要が (少なくとも私にとっては) 非常に頻繁にあったときのいくつかのルールを覚えています。パフォーマンスのボトルネックを見つけ、アセンブリ ルーチンと C/C++ コードを安全に混在させることができます。thisポインターに SI レジスターを使用する、戻り値に AX を使用する、アセンブリー・ルーチンが戻るときに保持する必要があるレジスターなど。
今私は、より一般的な C/C++ コンパイラ (Visual C++、GCC、Intel...) とプロセッサ (Intel、ARM、...) のリファレンスがあるかどうか疑問に思っていました。 1。アイデア?
macos - NOPに置き換えることでCALLLにパッチを適用することは、ユーザースペースでは機能しますが、カーネルスペースでは機能しません。
パッチを適用したいデバイスドライバがあります。このデバイスドライバーはIOLogを呼び出し、ログを削除したいと思います。
CALLL to IOLogをデバイスドライバー(kext)内の(対応する数の)NOPに置き換えると、カーネルがクラッシュし、スタックが破壊されたように見えます(「バックトレースが終了しました-無効なフレームポインター0」)。
ただし、同じ手法がユーザースペースで正常に機能します(たとえば、OS Xバイナリ内のNSLogをNOPpingします)。
ここで何が欠けていますか?
c - ARM C 呼び出し規約で保存するレジスタは?
最後にアームアセンブラをコーディングしてからしばらく経ちましたが、詳細については少しさびています。arm から C 関数を呼び出すと、r0-r3 と lr を保存することだけを気にする必要がありますよね?
C関数が他のレジスタを使用する場合、それらをスタックに保存して復元する責任がありますか? つまり、コンパイラは、C 関数に対してこれを行うコードを生成します。
たとえば、アセンブラ関数で r10 を使用する場合、その値をスタックまたはメモリにプッシュし、C 呼び出しの後にポップ/復元する必要はありませんか?
これは arm-eabi-gcc 4.3.0 用です。
assembly - アセンブリの「下」にプログラミング言語はありますか?
アセンブリの「下」にプログラミング言語はありますか?
documentation - Doxygen とアセンブリ言語
Doxygen を使用して、C と x86 アセンブリ言語が混在するレガシー コードを文書化したいと考えています。アセンブリ言語はインラインではなく、個別のアセンブリ専用ファイルにあります。アセンブリ言語部分を文書化するにはどうすればよいですか?
c - 16 ビット マイクロコントローラーでの C トレーニング
私の会社は、アセンブリ コードのマイクロコントローラーから C に移行しています。マイクロチップ、アトメル、レナサスなどを検討しています。アル。Cコードを使用する将来のプロジェクトのために。エンジニアが C に慣れるための適切なトレーニング リソースはありますか? セミナー、インストラクター、クラスなど。エンジニアの経験レベルは、トレーニングを受けていないものからある程度の知識があるものまでさまざまです。
debugging - Windows .exe を「逆コンパイル」することはできますか? または、少なくともアセンブリを表示しますか?
私の友人が Facebook からマルウェアをダウンロードしました。.exe を実際に逆コンパイルできないことはわかっていますが、少なくともアセンブリで表示したり、デバッガをアタッチしたりできますか?
編集して、.NET 実行可能ファイルではなく、CLI ヘッダーもありません。
python - Python ctypes と関数呼び出し
私の友人は、x86 で動作する小さな概念実証アセンブラーを作成しました。x86_64 にも移植することにしましたが、すぐに問題が発生しました。
私は C で小さなプログラムを書き、そのコードをコンパイルして objdump しました。その後、それを Python スクリプトに挿入したため、x86_64 コードは正しいです。
では、このスクリプトを実行するたびにセグメンテーション違反が発生し続けるのはなぜですか?
mprotect と実行フラグがないことについてまだ質問があります。バッファ オーバーランなどのほとんどの基本的なセキュリティ エクスプロイトから保護すると言われています。しかし、それが使用されている本当の理由は何ですか? .text に到達するまで書き続けてから、素敵な PROT_EXEC エリアに命令を挿入することができます。もちろん、.text で書き込み保護を使用しない限り
しかし、なぜその PROT_EXEC がいたるところにあるのでしょうか。.text セクションが書き込み保護されていると、非常に役立ちませんか?
gcc - GCC でのレジスタの値のダンプ
GCC でレジスタの値を取得する必要があります。
これに似たもの:
32 ビット レジスタを取得するのは簡単ですが、フラグを取得する最も簡単な方法が何であるかはわかりません。
この本の例: http://kipirvine.com/asm/
彼らは、EFLAGS レジスタ全体を取得し、問題のビットをシフトすることによってそれを行います。また、Jcc と CMOVcc を使用して実行することも考えました。
それを行う方法に関する他の提案はありますか?検証するいくつかのテストケースも役立ちます。