diff --git a/elf.cc b/elf.cc
index 109c4df4945509567af89f366459b43b489d2319..f4339acf72807c92e387274834f1df3c50747fec 100644
--- a/elf.cc
+++ b/elf.cc
@@ -86,7 +86,7 @@ namespace elf {
                                   [](Elf64_Phdr a, Elf64_Phdr b)
                                       { return a.p_type == PT_LOAD
                                             && a.p_vaddr < b.p_vaddr; });
-        _base = align(base, p->p_align, p->p_vaddr & (p->p_align - 1));
+        _base = align(base, p->p_align, p->p_vaddr & (p->p_align - 1)) - p->p_vaddr;
         auto q = std::min_element(_phdrs.begin(), _phdrs.end(),
                                   [](Elf64_Phdr a, Elf64_Phdr b)
                                       { return a.p_type == PT_LOAD