特定の位置またはそれより上にコードを配置するように lld に指示するにはどうすればよいですか?
かなり疑わしいロジックに依存する従来のコードがあります。特定の関数は、関数ポインターの配列へのインデックスを表す値、または実際には関数ポインターである値を受け取ることができます。この関数は、値が より小さいかどうかをチェックして、値の型を決定します0x10000
。もしそうなら、それはインデックスです。そうでない場合は、関数ポインターです。
どうしてもやりたいのですが、このコードを変更することはできません。
残念ながら、このテストは機能しません。OSX では (他の場所ではまだ問題として現れていません)、プログラム内の関数ポインターは、そのしきい値よりもはるかに低いアドレスを持つことができます。つまり、問題の関数がそれらを検出することを意味します。ポインターではなくインデックスとして、すべてがうまくいかない。
0x10000
誰かがばかげたテストを修正できるまでこの問題がなくなるように、生成されたすべてのコードを上または上に配置するようにリンカーに強制する指示がありますか (この場合は lld) 。
オプションを試しました-sectalign
が、次のエラーが発生します。
ld: -sectalign の引数は 0x8000 以下である必要があります
0x8000
十分ではありません。コードはまだそれとの間のスペースに配置されて0x10000
おり、ロジックはまだ失敗しています。
これを行うために使用できる別のオプションはありますか?