私は心に問題があります。ジャンプ命令はEIPレジスタに符号付きオフセットを追加して変更するためです(IA-32アーキテクチャでは間違いがない限り) 0x7FFFFFFF(符号付き論理で最大の正数)から0x80000000(符号付き論理では負の数が最小)まで可能ですか?あるいは、サインされたロジックの性質上、そのようなジャンプがあってはならないでしょうか?ジャンプする場合がありますか?
0
A
答えて
5
符号付きと符号なしは、同じビットパターンを解釈する2つの方法です。この解釈は、加算の実行方法を変更しません。 7FFFFFFF + 1は常に80000000ですが、これは符号付き(負の数)または符号なし(正の数)として解釈できます。
命令ポインタは常に符号なし(明らかに否定的なアドレスは意味を持たない)と解釈されるので、あなたの質問に答えます。
2
実際には相対ジャンプは署名されていません。ジャンプ命令からの番号は単にEIPに追加されます。したがって、32ビットのアドレス空間のどこにでもジャンプすることができます。
例:EIPが20で、4にジャンプする場合は、jmp 0FFFFFFF0hを使用します。この大きな数はEIPに追加され、実際には16を引くと同じです。
7FFFFFFFhから80000000hにジャンプするには、ジャンプ1を使用します。:-)しかし、あなたのアドレスは重複するので、プラクティスでは役に立たない。
また、加算と減算のロジックはすべて符号に関係なく機能します。相対ジャンプを含む操作は常に同じです。
1
「フラット」アドレッシングモードのため、アドレスはx86では署名がありません。 intelデベロッパーマニュアルのアドレッシングモードセクションでこれを扱い、すべての非/条件付き相対ジャンプのセクションにも言及するかもしれませんが、整数オーバーフローのために動作するでしょう。
関連する問題
- 1. "onselectstart"がある場合、 "onselectend"はありますか?
- 2. Androidバッテリーウィジェットのアップデートがある場合があります
- 3. オーディオリンクはメタデータリンクと異なる場合がありますか?
- 4. WPFルーテッドコマンドのみが起動する場合があります
- 5. NHibernateがプロキシオブジェクトを返さない場合がありますか?
- 6. ++ varを使用する必要がある場合はありますか?
- 7. LinkButtonが2回クリックする必要がある場合があります
- 8. Node.jsダウンロードファイルが空であるか存在しない場合があります
- 9. "グローバル" Ctrl +がありますか? Eclipseのショートカット(エラーにジャンプ)ショートカット?
- 10. ウィンドウウィルスにメッセージがある場合はビープ音が鳴ります
- 11. PHPエラーが表示される場合があります
- 12. リンクをダブルクリックする必要がある場合があります
- 13. Eclipseがある場合はJava SDKをインストールする必要があります
- 14. return文がある場合とない場合の違いはありますか?
- 15. Java Generics。私の場合、どんなメリットがありますか?
- 16. [自己保持]が有効な場合はありますか?
- 17. フラグメント内のgetViewがnullを返す場合があります
- 18. NSFileWrapperがnilを返す場合があります。
- 19. ステートレスクラスには何バイトありますか?私はこのクラスがある場合
- 20. Python3 division:余りがない場合はintを返し、余りがある場合はfloatを返します。
- 21. QPlainTextEditまたはQTextEdit領域が変更された場合、スクロールバーをボトム/トップにジャンプするようにプログラムする方法はありますか?
- 22. VS10デバッガが特定のlibをジャンプする問題はありますか?
- 23. 'if'文が後方にジャンプするLuaバイトコードはありますか?
- 24. の場合、next-> prio <= idxの場合は続行する必要がありますか?
- 25. Toolkit NavigationTransitionsが動作しない場合があります
- 26. WebViewでリンクが動作しない場合があります
- 27. アップルのAPNS配信が遅い場合があります
- 28. 意図が投稿されない場合があります
- 29. コードギターのルートが動作しない場合があります
- 30. @propertyが使用されない場合があります
0x7FFFFFFFを符号付き(+2147483647)として扱っていても、0x7FFFFFFF + 1は常に0x80000000であることを繰り返すだけで、この加算を行うとオーバーフローして-2147483648(0x80000000) – user470379