ELF アナライザーを作成していますが、エンディアンを適切に変換するのに問題があります。アナライザーのエンディアンとオブジェクト ファイルのエンディアンを判断する関数があります。
基本的に、考えられるシナリオは次の 4 つです。
- ビッグ エンディアン オブジェクト ファイルで実行されるビッグ エンディアン コンパイル済みアナライザー
- 何も変換する必要はありません
- リトル エンディアン オブジェクト ファイルで実行されるビッグ エンディアン コンパイル済みアナライザー
- バイト オーダーを交換する必要がありますが、ビッグ エンディアン マシンでは ntohs/l() と htons/l() は両方ともヌル マクロであるため、バイト オーダーを交換しません。これが問題です
- ビッグ エンディアン オブジェクト ファイルで実行されるリトル エンディアン コンパイル済みアナライザー
- バイト オーダーを入れ替える必要があるため、htons() を使用してバイト オーダーを入れ替えます。
- リトル エンディアン オブジェクト ファイルで実行されるリトル エンディアン コンパイル済みアナライザー。
- 何も変換する必要はありません
ntohs/l() と htons/l() はホストのエンディアンを考慮し、変換しない場合があるため、バイト オーダーを明示的にスワップ/エンディアンを変更するために使用できる関数はありますか? または、独自のスワップ バイト オーダー関数を検索/作成する必要がありますか?