首页 > 编程知识 正文

在输出中的含义,sock在linux中的含义

时间:2023-05-06 14:56:01 阅读:186178 作者:3118

我在Linux上写了main.c :

int main () )

{

while(1) }

() ) ) ) )。

编译并启动后,可以进行pmap。

# pmap 28578

28578:/a.out

0000000000400004 kr-x---/root/a.out

000000000int main ()

{

while(1) }

() ) ) ) )。

00 4K r---- /root/a.out

00000000006010004 krw---/root/a.out

00007 f87c 16 c 20001524 kr-x---/lib/libc-2.11.1.so

00007 f87c 183 f 0002044 k--/lib/libc-2.11.1.so

00007 f 87 C1 a3e 00016 kr--/lib/libc-2.11.1.so

00007 f 87 C1 a 420004 krw--/lib/libc-2.11.1.so

00007 f 87 c1a 4300020 krw---- [ anon ]

00007 f 87 C1 a 48000128 kr-x---/lib/LD-2.11.1.so

00007 f 87 c1c 5500012 krw---- [ anon ]

00007f87c1c65000 8K rw--- [ anon ]

00007 f 87 C1 c 670004 kr--/lib/LD-2.11.1.so

00007 f 87 C1 c 680004 krw--/lib/LD-2.11.1.so

00007f87c1c69000 4K rw--- [ anon ]

00007 fff 19b 8200084 krw---- [ stack ]

00007 fff 19b Fe 0008 kr-x---- [ anon ]

fffffffff 60000004 kr-x---- [ anon ]

总计3876 k

解决方法:

文本段是0x400000的映射。 标记为“r-x”表示它是只读的且可运行。0x600000的映射是只读的,因此几乎可以确定它是可执行文件的".rodata "部分。 GCC可能很有名,因为将c字符串文本放在只读部分.0x601000中的映射是“rw-”

您可以通过查找进程的PID并执行以下操作来获取更多信息: cat/proc/$ PID/maps我的Arch笔记本电脑提供了一些附加信息。 3.12因为核心正在运行,所以还有/proc/$PID/numa_maps,可以对其进行捕获

在可执行文件中执行的其他内容: nm和objdump -x。 前者可以了解内存映射的各种内容,因此可以看到0x4000000的部分和其他部分的内容。 在objdump -x中,ELF文件的标头在许多其他方面都是可见的,包括名称的一部分和是否在运行时映射。

要找到“什么在哪里”的书面说明,就必须进行类似谷歌的“elf文件内存布局”。 请注意,ELF文件格式可以支持比典型的内存布局更多的内存布局。 GCC、Gnu ld和glibc对如何布局可执行文件并在运行时将其映射到内存做了简单的假设。 有很多用于记录这个内容的网页。 但是,它仅适用于旧版本的Linux、旧版本的GCC或glibc或x86可执行文件。 否则,请获取readelf命令。 如果可以编写C程序,请创建自己的objdump -x或readelf版本,以了解可执行文件的工作方式及其内容。

标签: linux、memory、process、virtual-memory

资料来源: https://codeday.me/bug/2019 08 09/1628118.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。