Co to jest “ addend ”?

Od Nauka analizy plików binarnych systemu Linux , autor: Ryan „elfmaster” O „Neill . Na stronie 32 autor stwierdza,

Rekordy relokacji dla 32-bitowych plików ELF są takie same jak dla 64-bitowych, ale używaj 32-bitowych liczb całkowitych. Poniższy przykład dla kodu pliku obiektowego zostanie skompilowany jako 32-bitowy, abyśmy mogli zademonstrować niejawne dodatki, które nie są tak często używane w 64-bitowych. An niejawne dodanie występuje, gdy rekordy relokacji są przechowywane w strukturach typu ElfN_Rel, które nie zawierają r_addend i dlatego dodatek jest przechowywany w samym celu relokacji. 64-bitowe pliki wykonywalne zazwyczaj używają struktur ElfN_Rela, które zawierają jawne dodanie . Myślę, że warto zrozumieć oba scenariusze, ale ukryte dodatki są trochę bardziej zagmatwane, więc warto rzucić światło na ten obszar.

Co to jest rzeczywista definicja „addend” ?

Comments

Odpowiedź

Myślę, że oznacza to po prostu „liczbę, która została„ dodana ”, aw tym przypadku„ liczbę, która ”została dodana do adresu podstawowego ładowania ( lub segment ładowania adresu), aby obliczyć ostateczny wskaźnik dla tej relokacji ”.

Wyobraźmy sobie, że kiedy ładujemy nasz plik binarny do pamięci pod adresem 0x400000, mamy wskaźnik 0x401234, który wskazuje na 0x405678. (Jeśli zamiast tego załadowaliśmy plik binarny pod adresem 0x800000, to powinno wskazywać na 0x805678, dlatego wymaga zmiany lokalizacji.) Nie znam ELF, ale czytam to tak, że

  • in t Przypadek niejawny tablica relokacji przechowuje tylko przesunięcia w twoim pliku binarnym, w tym przypadku 0x1234, aw naszym pliku binarnym pod offsetem 0x1234 przechowujemy docelowy offset 0x5678. Dlatego relokacja staje się

    dla każdego adresu A w tabeli relokacji *(base + A) += base

    (To tak działają tablice relokacji w plikach PE.)

  • W jawnym przypadku tablica relokacji przechowuje przesunięcie w pliku binarnym i przesunięcie docelowe, tj. 0x1234 0x5678. Zatem relokacja jest tutaj

    dla każdej pary adresów A, B w tabeli relokacji *(base + A) = base + B

    Nie wiem, co dzieje się w tym przypadku w pliku binarnym pod przesunięciem 0x1234.

Odpowiedź

  • Augend to termin oznaczający liczbę, która podlega dodaniu
  • Dodaj to liczba, którą będziesz dodawać.

From Dictionary.com ,

Czy zdarzyło Ci się kiedyś patrzeć na kartkę z napisem„ 3 + 4 ”I zastanawiałeś się„ jaki jest właściwy termin dla każdej z tych dwóch odpowiednich wielkości? ”Nie? Pierwsza liczba to augend i numer, który zostanie do niego dodany, jest dodatkiem.

Możesz zobaczyć wykres innych terminów matematycznych tutaj na Wikipedia „s ” Wyniki obliczeń „ ,

Wyniki obliczeń

Po co tutaj specjalne terminy?

  • Cóż, jest to prawdopodobne, ponieważ w zestawie add rbi, rax faktycznie zapisze wynik w rbi. Tak więc znajomość pierwszego argumentu nie jest tylko argumentem dla add, ale celem; add rax, rbi zapisze wynik w rax. Gdyby zamiast tego wyświetlany był zespół z operatorami, mamy „d rbi += rax i rax += rbi.
  • Ponieważ addend nie jest zawsze przesunięciem, a augend nie zawsze jest podstawą. Chociaż w tym konkretnym przykładzie „offset” jest o wiele bardziej odpowiednie.
  • W tym konkretnym przypadku termin „niejawne przesunięcie” można znaleźć w Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 ,

    … tylko wpisy Elf32_Rela zawierają wyraźny dodatek. Wpisy typu Elf32_Rel zapisz niejawny dodatek w miejscu do modyfikacji. W zależności od architektury procesora, jedna lub druga forma może być konieczna lub wygodniejsza.W konsekwencji implementacja dla określonej maszyny może używać wyłącznie jednego formularza lub dowolnej formy w zależności od kontekstu.

Odpowiedź

Dodaj to po prostu „numer do dodania to another „, zgodnie z Merian Webster .

Komentarze

  • To było już podane w istniejącej odpowiedzi. Możesz dodać trochę więcej do swojej odpowiedzi, aby była bardziej pouczająca.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *