I don’t understand R_X86_64_64 relocation

This is what the System V ABI specifies:

R_X86_64_64 | S + A (ie Symbol value + Addend)

I assembled this shared object and PIE executable:

; PIE executable

        global _start
        extern msg

        section .text

_start:
        mov rdi, 1      ; stdout fd
        mov rsi, msg
        mov rdx, 9      ; 8 chars + newline
        mov rax, 1      ; write syscall
        syscall

        xor rdi, rdi    ; return code 0
        mov rax, 60     ; exit syscall
        syscall
; shared object
        global msg:data msg.end-msg
        section .data

msg: db "hi there", 10
 .end:

When performing readelf on the PIE executable, in the .rela.dyn I get these relocation entries:

000000001007  000100000001 R_X86_64_64       0000000000003000 msg + 0
000000003000  000100000005 R_X86_64_COPY     0000000000003000 msg + 00

As I understand it:

  1. R_X86_64_64 performs the relocation inside the .text section – it changes the operand (which is located at offset 0x1007 in mem) to the value of the specified symbol (in this case, 0x3000)
  2. R_X86_64_COPY tells the dynamic linker to look for the dynamic symbol in the shared object, and then copy the value of the dynamic symbol to address specified by the symbol (in this case 0x3000) + the base address the object was loaded at

Now if I apply the R_X86_64_64 relocation the way the ABI specified, I will just get 0x3000 as msg‘s address which is obviously incorrect! Shouldn’t I add load base address here too?

Is there something I’m missing?

Thanks in advance

I did not really understand what you mean by adding the base address to the symbol value. You want to somehow reconstruct what things may look like on memory ? The Symbol value (S) is defined by the dynamic linker when relocating your module; so 0x3000 is the offset added to the image’s base address to make the new symbol’s value when relocating.

Anyway, whenever the dynamic linker finds a R_X86_64_COPY, it copies the object’s data into an uninitialized address, belonging to an uninitialized section like .BSS in the main module. Your R_X86_64_64 reference is then relocated by setting it to the uninitialized address within your main module, which has been already initialized by the linker; therefore, your R_X86_64_64 is NOT going to be directly set to the object’s address in the other module, but to copied version; it will be set to the absolute address of the copied object.

6

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật