問題タブ [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.
c - 可能性のある命令 自己修正コードでのキャッシュ同期の問題?
関連する多くの質問 < x86 命令キャッシュはどのように同期されますか? > x86 は、自己変更コードで i-cache 同期を適切に処理する必要があることに言及してください。私は次のコードを書きました。これは、関数呼び出しのオンとオフを、その実行にインターリーブされたさまざまなスレッドから切り替えます。変更がアトミックになるように、比較とスワップ操作を追加のガードとして使用しています。しかし、断続的なクラッシュ (SIGSEGV、SIGILL) が発生し、コア ダンプを分析すると、プロセッサが部分的に更新された命令を実行しようとしているかどうかが疑われます。以下に示すコードと分析。ここで何かが足りないのかもしれません。その場合はお知らせください。
トグル.c
コアダンプ分析
ご覧のとおり、命令ポインタは CALL 命令内のアドレス内に配置されているように見え、プロセッサは明らかにその位置合わせされていない命令を実行しようとしており、不正な命令フォールトを引き起こしています。
c - gcc を使用してメモリ内の次の命令を変更する
フェッチする前に次の命令を変更したいのですが、この投稿のfoo関数のベストアンサーは*p
、メイン関数の次の命令を指しています。*p
whereポイントの内容を変更したい。たとえば、次の命令をジャンプ命令に変更したい。どうすればこれを行うことができますか?
Intel Core-i7 3632QM プロセッサ上の gcc コンパイラでこれを実行したいと考えています。
python - ハイスコアを追跡するための自己変更 Python コード
ゲームのハイスコアをこれまでのようにテキスト ファイルとして保存するのではなく、コード自体に変数として保存することを検討しました。これは、ゲームを実行するために必要な追加のファイルが少なくて済み、999999 ポイントを割り当てるのが難しくなるためです。
ただし、これには自己変更コードを実行して、スコアを表すグローバル変数を永続的に上書きする必要があります。私はそれを調べて、私がやりたいことは本当にグローバル変数を変更することだけであることを考えると、私が見つけたものはすべてあまりにも高度でした.
誰かがそれを行うための自己変更Pythonコードの書き方について説明してくれれば幸いです。理解を助けるため、できれば例も挙げてください。
assembly - ARM関数が親指で書かれているかどうかを判断する方法
ARM関数のプロローグにパッチを当ててそれを行うフッカーコードを書いています。ARM は 2 つのモードで実行できるため、フッカーはプロローグにパッチを適用するために適切なオペコード (サムかどうか) を選択する必要があります。
パッチ適用先がサムまたは 32 ビット ARM 命令を使用していることを確認するにはどうすればよいですか?
android - スナップドラゴンの命令キャッシュをフラッシュする
私は現在、snapdragon マシン (Nexus 5) でカーネル内フッカー コードを書いています。私の現在のフッカーの実装はこちらです。
https://github.com/perillamint/hideroot/blob/8c66dd8d515e0c8506ec6d229f296a8a1d24f293/gphook.c
このコードを Galaxy Note 2 (exynos 4412) でテストしたところ、動作しました (sys_open が呼び出されたときに Print Awesome! コード: https://github.com/perillamint/hideroot/blob/8c66dd8d515e0c8506ec6d229f296a8a1d24f293/main.c )。しかし、Nexus 5 (MSM8974) でこのコードを実行すると、命令キャッシュがまったくフラッシュされないようです。
snapdragon の命令キャッシュをフラッシュするにはどうすればよいですか?
assembly - 自己変更コードは 0xCC バイトを認識しますが、デバッガーはそれを表示しませんか?
自己変更 asm コードを作成しようとしています。
ある時点で、次のことを試します:(NASMコンパイラ)
gdb は start で次の値を示しますx/8xb $rax
。
最初の 2 つの反復は問題0x12
ありません。期待どおりに比較され、ジャンプは発生しません。0x11
ただし、の代わりにフラグをcmp
設定し、 実行されますOF
CF
jae
現時点で 2 つの推測があります。gdb が最初に正しいメモリ位置を報告していないか、実際には 0x9b が比較対象のアドレスであるか、または別の場所であるかのいずれかです。追加が期待どおりに機能するように見えるため、これはありそうにありません。
または、これは位置合わせの問題である可能性があります。cmp の前に NOP 命令を追加すると、結果に何らかの影響があるようです。私は本当に理由がわかりません
編集:試してみると
bl
取得0xcc
これは私には意味がありません。0xcc
gdb は近くの値を報告しません[rax]
mips - 自己修正型 MIPS コード
合計が 0 になるまで 2 つの整数を継続的に要求し、合計を出力するプログラムを MIPS で作成しようとしています。トリックは、合計が 13 の場合、アセンブルされた MIPS コードを変更するメソッドを呼び出す必要があることです。
になる
ループの後続のすべての実行では、and 命令が使用されます。
合計ループが機能しているため、合計が 13 の場合、命令を変更するメソッド instMod が呼び出されます。残念ながら、どこから始めればよいかわかりませんし、オンラインでこの例を見つけることもできません。アセンブルされたコードからアドの 16 進コードを何らかの方法で取得し、それを and の 16 進コードに置き換える必要があると思いますが、それを行う方法や、それが正しい行動方針であるかどうかはわかりません。