問題タブ [self-modifying]

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

ios - 自己変更バイトコードによって記述された関数を実行するために使用できる VM はありますか?

コードが入っているメモリを実際に実行可能としてマークせずに、自己変更コードを実行できるようにしたいと考えています。これを行うための私の計画は、コードをバイトコードとして表現し、そのバイトコードをインタープリター/vm で実行することです。

私の質問は、従来のハードウェア (CPU/スタック/ヒープ) に密接に対応し、バイトコードが含まれているメモリを変更できるバイトコード命令セットがあるかどうかです (何らかの方法で VM にマップすると仮定します)。

あると便利: C/C++ コンパイラのバイトコード命令セットをターゲットにする機能、およびインタプリタ/VM を CPU とメモリのオーバーヘッドに関して「軽量」にする機能。

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

linux - 自己変更アセンブリ コードで mprotect を呼び出した後もセグメンテーション エラーが発生する

いくつかのスタック オーバーフロー テクニックを学び、シェルコードを使用しようとしています。いくつかの基本的なシェルコードを正常に使用できました。それから、私はアセンブリで使用する作業を開始し、それexeveを呼び出しls -lて、再び成功しました。現在、相対アドレス指定を使用して、コード内の null 値を取り除こうとしています。そのため、単純な自己変更コードを試しました。コードセグメントが読み取り専用であることはわかっているのでmprotect、書き込み可能にするために呼び出してみました。私のコードはまだ機能せず、 でセグメンテーション違反が発生しmovb %al, 0x7(%esi)ます。誰かが私のコードで間違っていることについて洞察を与えることができれば、本当に感謝しています.

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

c# - 遅延初期化後の null チェックを削除

遅延初期化を使用することに決めた場合、通常はその代償を払わなければなりません。

基本的に、バッキング フィールドに null/nil 値があるかどうかを毎回確認する必要があります。彼がこの習慣から逃れることができたらどうしますか?フィールドの初期化に成功すると、このチェックを取り除くことができますよね?

残念ながら、製品言語の大部分では、実行時に関数を変更することはできません。特に、関数本体から単一の命令を追加または削除することはできませんが、賢明に使用すると役立ちます。ただし、C#では、デリゲート(最初にそれらを発見し、その後、ネイティブ言語が関数ポインターを持つ理由に気づきました)とイベントメカニズムを使用して、そのような動作を模倣し、結果としてパフォーマンスが低下する可能性があります.nullチェックは下位レベルに移動するだけですが、完全には消えません。LISP や Prolog などの一部の言語では、コードを簡単に変更できますが、プロダクション言語として扱うことはほとんどできません。

Delphi や C/C++ などのネイティブ言語では、セーフとラピッドの 2 つの関数を記述し、それらをポインタで呼び出し、初期化後にこのポインタをラピッド バージョンに切り替える方がよいようです。追加の頭痛の種なしに、コンパイラまたは IDE がこれを行うためのコードを生成できるようにすることもできます。ただし、@hvd が述べたように、CPU はこれらの関数がほぼ同じであることを認識しないため、速度が低下する可能性があり、キャッシュにプリフェッチされません。

はい、私は好奇心を養うために、明示的な問題のないパフォーマンスを求めているパフォーマンスマニアです。そのような機能を開発するために、どのような一般的なアプローチが存在しますか?

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

python - 自分自身をexeとして変更するPythonファイル?

私は自己変更コードのアイデアをいじっています.py2exeを使用してファイルを.exeに変更したいと思います。コード自体を変更することはまだ可能ですか、それとも .py のままにしておく必要がありますか?

自己修正コード: