gpt4 book ai didi

linux - 是否可以将 elf header 中的默认虚拟地址更改为 0?

转载 作者:太空狗 更新时间:2023-10-29 12:18:07 28 4
gpt4 key购买 nike

我可以将 elf 中的默认虚拟地址 (ph_vaddr) 更改为 0x0 吗?这会允许访问空指针吗??或者内核不允许在地址 0 加载?

我只是想知道,如果我将某些部分的 p_vaddr say .text 更改为 0x0,linux 是否允许这样做?虚拟地址只能在某个值之后才能开始有一些限制吗?每当我尝试使用 ld --section-start 将 .text vaddr 设置为 0 到 9999 之间的任何位置时,它就会被杀死。我想知道这是怎么回事??

最佳答案

Can I change the default virtual address(ph_vaddr) in the elf to 0x0.

是的,这实际上就是 PIE(位置无关)可执行文件通常的链接方式。

echo "int main() { return 0; }" | gcc -xc - -fPIE -pie -o a.out
readelf -l a.out | grep LOAD | head -1

LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000

注意:上面生成了一个类型为 ET_DYN 的可执行文件。

will this allow access to null pointer?

没有。当内核发现可执行文件的 .e_type == ET_DYN 时,它会将其所有段重新定位到别处。

您还可以使用 .p_vaddr == 0 创建类型为 ET_EXEC 的可执行文件,如下所示:

echo "int main() { return 0; }" | gcc -xc - -o a.out -Wl,-Ttext=0
readelf -l a.out | grep LOAD | head -1
LOAD 0x0000000000200000 0x0000000000000000 0x0000000000000000

内核将拒绝运行它:

./a.out
Killed

关于linux - 是否可以将 elf header 中的默认虚拟地址更改为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19440733/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com