gpt4 book ai didi

linux - 了解 ELF64 文本/数据段布局/填充

转载 作者:行者123 更新时间:2023-12-04 07:14:37 26 4
gpt4 key购买 nike

我正在尝试复习 UNIX 病毒,我正在阅读的一篇文章提到可以在文本和数据段之间的填充中插入寄生代码,据说在 x86-64 系统上最大可达 2MB。但是当我用 gcc -no-pie 编译一个简单的 hello world 程序时...

#include <stdio.h>

int main()
{
printf("hello world\n");
}
...并使用 readelf -W -l 检查其段 header 我得到:
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000040 0x0000000000400040 0x0000000000400040 0x0002d8 0x0002d8 R 0x8
INTERP 0x000318 0x0000000000400318 0x0000000000400318 0x00001c 0x00001c R 0x1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x000588 0x000588 R 0x1000
LOAD 0x001000 0x0000000000401000 0x0000000000401000 0x0001c5 0x0001c5 R E 0x1000
LOAD 0x002000 0x0000000000402000 0x0000000000402000 0x000138 0x000138 R 0x1000
LOAD 0x002e00 0x0000000000403e00 0x0000000000403e00 0x000230 0x000238 RW 0x1000
DYNAMIC 0x002e10 0x0000000000403e10 0x0000000000403e10 0x0001d0 0x0001d0 RW 0x8
...
我假设从虚拟地址 0x401000 开始的段是文本段,从 0x430e00 开始的一段是数据段。但是另外两个只读 LOAD 段是什么?填充在这里的工作精度如何?没有看到填充到 2MB 边界,甚至假设填充到 4KB 边界,为什么数据段不从地址 0x403000 开始?

最佳答案

But what are the other two read-only LOAD segment?


this answer .

There's no padding to 2MB boundaries


BFD 链接器用于在 2MiB 边界上对齐段,因为这是 x86_64 的最大页面大小系统可以配置。
它不再这样做(不确定何时进行更改)。
您正在阅读的文本可能已过时。

关于linux - 了解 ELF64 文本/数据段布局/填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68849430/

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