問題タブ [att]
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++ - アセンブリでC++を使用して、実行時に新しい関数を割り当てて作成する
私は(C ++)プロジェクトに取り組んでいます。これには、完全に動的に割り当てられた関数が必要です。つまり、malloc / newとmprotectを使用してから、バッファーを手動でアセンブリコードに変更します。このため、他の_cdecl関数の複製であるために、この「バッファー」に何が必要かを正確に知りました。例えば:
この関数の複製を文字通り作成したいが、完全に動的に作成したい場合、何が必要になりますか(インラインアセンブリを備えたC ++であることを覚えておいてください)?手始めに、私はこのようなこと(または同様の解決策)をしなければならないと思います:
この後、のアセンブリコードを見つける必要がありますImAcDeclFunc(int a, int b);
。今でも私は組み立てがお粗末ですが、この関数はAT&T構文でどのようになりますか?これが私の大胆な試みです:
このコードが正しい場合(私は非常に疑わしいので、訂正してください)、このコードの値を16進数で見つけるだけでよく(たとえば、「jmp」は0xE9、「inc」は0xFE)、これらの値を直接使用します。 C ++?以前のC++コードを続行する場合:
コード/バッファー全体に対してこれを実行した後、完全に動的な_cdecl関数にはこれで十分でしょうか(つまり、関数ポインターにキャストして実行できint result = ((int (*)(int, int))ImAcDeclFunc)(firstArg, secondArg)
ますか?)。そして、私はboost :: functionやそれに類似したものを使用することに興味がありません。関数が完全に動的である必要があるため、私の興味は:)
注:この質問は私の前の質問の続きですが、はるかに詳細です。
assembly - gnu リンカの `--oformat binary' オプションが `.data' セグメントを 0x0200000 に配置するのはなぜですか?
私は i386 リアル モード用の「フリー スタンディング」コードを書いていて、PXE でコードをネットブートしているときに奇妙なエラーに遭遇しました。
バイナリをいじった後、バイナリの後にデータまたはコードがあるとして分離しました
セグメントマーカー。
16進ダンプの後、ldが命令0x0200000
をすべての場所に移動したことがわかりました。
現在、次の方法でフラットビンを生成しています:
質問:
なぜ
ld
これを行うのですか?oformat
これはオプションに固有のものですか?
c - AT&T アセンブリ構文について (%esp,1)
逆アセンブル コードを読んだとき、AT&T の構文に慣れていないため、(%esp,1) のようなコードが何を意味するのかわかりません。
誰かがそれが何を意味するのか教えてもらえますか? ありがとうございました!
macos - インライン アセンブリ - AT&T 構文 - LLVM コンパイル時のエラー (ただし GCC を使用しない)
だから私はObjective-Cの実行可能ファイルにこのアセンブリを含めようとしています:
GCCコンパイラを使用すると、正常にコンパイルされますが、上記を使用した関数の戻り時に、GCCが適切なud2a命令をスローするのに対して、コンパイル時にエラーをスローするだけでエラーがスローされます(gdbでキャッチされます)。
Apple LLVM コンパイラを使用すると、「push %[a4]\n\t」という行に対して、「サイズ サフィックスのない命令ニーモニックの不明な使用」というエラーが表示されます。
これが何を意味するのか誰にも分かりませんか?上記を適切に機能させるためにどのように適応させる必要があるかについて、私は完全に途方に暮れています。
注: これがやろうとしていることです: a5、a4 をスタックにプッシュします。FuncPtr を ebx に移動し、MyVal を eax に移動し、MyVal2 を edx に移動し、MyVal3 を ecx に移動して、ebx を呼び出します。
assembly - 標準入力からレジスタに数値を読み込みますか? scanf 結果のロード
現在、組み立てで忙しく、次の問題に遭遇しました。
eax レジスタに入力された数値を取得しようとしています。最初に入力を求める文字列を提示し、次に誰かが数字を入力する必要があります。
次のコードを使用しましたが、すべてを理解していません。コード内のコメントに注意してください。
番号が eax に移動されたことを除いて、今では何も起こらないことはわかっています。私が知りたいのは、なぜlealを使わなければならないのかということです: なぜ、それは何をするのですか? そして、なぜ eax をスタックに戻す必要があるのですか?
string - x86アセンブリに2つの文字列を追加する
私は現在AT&T Assemblyで割り当てに取り組んでおり、2つの文字列を追加する必要があります。
これをどうやってやるのか、どうやって始めるのか、私には本当にわかりません。すでにインターネットで検索しましたが、役立つ情報が見つかりませんでした。2番目の文字列の文字を最初の文字列の最後に手動でコピーする必要があると思いますが、それについてはよくわかりません。
誰かがこれを行う方法を私に説明してもらえますか?:)
assembly - ジャンプがうまくいかない
私は現在、アセンブリ (AT&T) で小さな (これまでのところ固定された質問がある) クイズを作成するのに忙しくしています。
1 2 または 3
のいずれかの特定の入力を要求する小さなメニューを設計しました。問題は、私の cmpl が機能しないことであり、その理由がわかりません。入力が何であれ、ただ終了します。
以下は私のコードの一部です:
assembly - アセンブリのStrcat
アセンブリで2つの文字列を連結しようとしていますが、機能していないようです。私は次のコードを持っています:
16文字を超える文字列を別の文字列に追加しようとすると、gdbによるstrcat呼び出しでセグメンテーション違反が発生します。ここで何かが足りませんか?strcatを16文字より長い文字列で動作させる方法はありますか?
ありがとうございました!
linux - 独立したライブラリをアセンブリに配置する (AT&T 構文)
特定の関数呼び出しを別の名前の関数 (通常は glibc) にリダイレクトする互換性ライブラリを実装しています。
これが私がすることです:
問題は、位置に依存しないコードではなく、リンカーがライブラリのリンクを拒否することです。私はGOTを関与させる必要があることを知っていますが、今ではその方法を考えています(AT&T asm構文で)。
ありがとう!
assembly - x86 アセンブリでの関数の作成と呼び出し (AT&T 構文)
関数を作成して x86 アセンブリ (AT&T 構文) で呼び出す非常に簡単な例を教えてください。実際、数値を計算する関数を作成しようとしていますfactorial
。これは私がやったことです:
何Segmentation Fault
度も何度もエラーが発生します。でGASを使用していUbuntu
ます。