if
(dd.d_tag
=
=
0x6ffffef5
){
/
/
对导出表进行修正这个很重要导出失败则无法运行
size_t gnu_nbucket_
=
reinterpret_cast<uint32_t
*
>((char
*
)start
+
dd.d_un.d_ptr)[
0
];
/
/
skip symndx
uint32_t gnu_maskwords_
=
reinterpret_cast<uint32_t
*
>((char
*
)start
+
dd.d_un.d_ptr)[
2
];
uint32_t gnu_shift2_
=
reinterpret_cast<uint32_t
*
>((char
*
)start
+
dd.d_un.d_ptr)[
3
];
ElfW(Addr)
*
gnu_bloom_filter_
=
reinterpret_cast<ElfW(Addr)
*
>((char
*
)start
+
dd.d_un.d_ptr
+
16
);
uint32_t
*
gnu_bucket_
=
reinterpret_cast<uint32_t
*
>(gnu_bloom_filter_
+
gnu_maskwords_);
/
/
amend chain
for
symndx
=
header[
1
]
uint32_t
*
gnu_chain_
=
reinterpret_cast<uint32_t
*
>( gnu_bucket_
+
gnu_nbucket_
-
reinterpret_cast<uint32_t
*
>(
(char
*
) start
+
dd.d_un.d_ptr)[
1
]);
-
-
gnu_maskwords_;
uint32_t flags_
=
FLAG_GNU_HASH|flags_;
*
reinterpret_cast<size_t
*
>((char
*
) old_soinfo
+
344
)
=
gnu_nbucket_;
*
reinterpret_cast<uint32_t
*
>((char
*
) old_soinfo
+
368
)
=
gnu_maskwords_;
*
reinterpret_cast<uint32_t
*
>((char
*
) old_soinfo
+
372
)
=
gnu_shift2_;
*
reinterpret_cast< ElfW(Addr)
*
*
>((char
*
) old_soinfo
+
376
)
=
gnu_bloom_filter_;
*
reinterpret_cast<uint32_t
*
*
>((char
*
) old_soinfo
+
352
)
=
gnu_bucket_;
*
reinterpret_cast<uint32_t
*
*
>((char
*
) old_soinfo
+
360
)
=
gnu_chain_;
*
reinterpret_cast<uint32_t
*
>((char
*
) old_soinfo
+
48
)
=
*
reinterpret_cast<uint32_t
*
>((char
*
) old_soinfo
+
48
) |FLAG_GNU_HASH;
}
if
(dd.d_tag
=
=
2
){
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
48
)
=
dd.d_un.d_val
/
sizeof(ElfW(Rela));
}
if
(dd.d_tag
=
=
0x17
){
/
/
导入表修正
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
104
)
=
reinterpret_cast<uint64>(
(char
*
) start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
7
){
/
/
重定位修正
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
120
)
=
reinterpret_cast<uint64>(
(char
*
) start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
5
){
/
/
对字符串表进行修正
*
reinterpret_cast<char
*
*
>((char
*
) old_soinfo
+
56
)
=
reinterpret_cast< char
*
>((char
*
) start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
6
){
/
/
对符号表进行修正
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
64
)
=
reinterpret_cast<uint64>(
(char
*
) start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
10
){
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
336
)
=
reinterpret_cast<uint64>(
(char
*
) start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
8
){
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
336
)
=
dd.d_un.d_val
/
sizeof(ElfW(Rela));
}
if
(dd.d_tag
=
=
0x6ffffff0
){
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
440
)
=
reinterpret_cast<uint64 >((char
*
)start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
0x6fffffff
){
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
472
)
=
dd.d_un.d_val;
}
if
(dd.d_tag
=
=
0x6ffffffe
){
*
reinterpret_cast<uint64
*
>((char
*
) old_soinfo
+
464
)
=
reinterpret_cast<uint64>(
(char
*
) start
+
dd.d_un.d_ptr);
}
if
(dd.d_tag
=
=
1
){
mynedd[needed]
=
dd.d_un.d_val;
needed
+
+
;
}