“加数”とは何ですか?

From Learning Linux Binary Analysis by Ryan “elfmaster” O “Neill 。32ページで、作成者は次のように述べています。

32ビットELFファイルの再配置レコードは64ビットの場合と同じですが、ただし、32ビット整数を使用します。次の例は、オブジェクトファイルコードが32ビットとしてコンパイルされるため、64ビットでは一般的に使用されない暗黙の加数を示すことができます。暗黙の加数は、再配置レコードがiv id = =を含まないElfN_Relタイプの構造に格納されている場合に発生します。 “e1460a5786″>

フィールドであるため、加数は再配置ターゲット自体に格納されます。 64ビットの実行可能ファイルは、明示的な加数ElfN_Rela構造体を使用する傾向があります。 >。両方のシナリオを理解する価値があると思いますが、暗黙の加数はもう少し混乱するので、この領域に光を当てることは理にかなっています。

とは「加数」の実際の定義?

コメント

回答

これは単に「追加された番号」、この場合は「ベースロードアドレスに追加された番号」を意味すると思います(またはセグメントロードアドレス)を使用して、この再配置の最終ポインタを計算します。

バイナリを0x400000でメモリにロードすると、0x401234に0x405678を指すポインタがあると想像してみてください。バイナリを0x800000でロードした場合、これは0x805678を指すはずなので、再配置する必要があります。)ELFはわかりませんが、これを読んだところ、

  • in t暗黙の場合、再配置テーブルはオフセットのみをバイナリ(この場合は0x1234)に格納し、バイナリのオフセット0x1234には、ターゲットオフセット0x5678を格納します。したがって、再配置は、再配置テーブル*(base + A) += base

    の各アドレスAに対して

    になります(これこれは、PEファイルでの再配置テーブルの動作方法です。)

  • 明示的な場合、再配置テーブルは、オフセットをバイナリとターゲットオフセットの両方に格納します(0x1234 0x5678)。したがって、ここでの再配置は、再配置テーブル*(base + A) = base + B

    の各アドレスペアA, Bに対して

    です。この場合、オフセット0x1234でバイナリに何が入るのかわかりません。

回答

  • Augend は、加算の対象となる数値を意味する用語です
  • 加数は追加する番号です。

Dictionary.com 、

「3 + 4」の紙を見つめていることに気付いたことがありますか」と書かれていて、「これら2つのそれぞれの量のそれぞれに適切な用語は何ですか?」いいえ?最初の数字はaugend に追加される番号は加数です。

他の数学用語のグラフは、ウィキペディアの「計算結果」

計算結果

なぜここに特別な用語があるのですか?

  • まあ、それはおそらく、アセンブリでadd rbi, raxが実際に結果をrbiに保存するためです。したがって、最初の引数を知ることは、addに対する単なる引数ではなく、宛先です。 add rax, rbiは結果をraxに保存します。代わりにアセンブリが演算子で表示された場合は、rbi += raxrax += rbiがあります。
  • 加数常にオフセットではなく、被加数は常にベースであるとは限りません。ただし、この特定の例では、「オフセット」の方がはるかに適切です。
  • この特定のケースでは、「暗黙のオフセット」という用語は、 Tool Interface Standard(TIS)Executable and Linking Format(ELF)Specification Version 1.2 にあります。

    Elf32_Relaエントリのみに明示的な加数が含まれます。タイプは、変更する場所に暗黙の加数を格納します。プロセッサアーキテクチャに応じて、いずれかの形式が必要になるか、より便利になる場合があります。したがって、特定のマシンの実装では、コンテキストに応じて1つのフォームのみを使用することも、いずれかのフォームを使用することもできます。

回答

補遺は単に「追加する番号」です 別の人へ」、メリアンウェブスターによる

コメント

  • 既存の回答ですでに述べられています。 回答にもう少し追加して、より有益なものにすることができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です