首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

含大量图文解析及例程 | Linux下的ELF文件、链接、加载与库(中)

该虚拟文件有6列,分别为: vdso的全称是虚拟动态共享库(virtual dynamic shared library),而vsyscall的全称是虚拟系统调用(virtual system call...总体来说,在程序加载过程中,磁盘上的可执行文件,进程的虚拟地址空间,还有机器的物理内存的映射关系如下: Linux下的装载过程 接下来我们进一步探究一下Linux是怎么识别和装载ELF文件的,我们需要深入...Linux内核去寻找答案 (内核实际处理过程涉及更多的过程,我们这里主要关注和ELF文件处理相关的代码)。...而我们用cat /proc/[PID]/maps 来查看这个程序中内存的内容,看到我们之前提到的代码、数据、堆区、堆栈、vvar、vdso、vsyscall都已经被映射进了内存中。.../a.out & cat /proc/12002/maps 输出: 我们看到,除了像静态链接时,进程地址空间中的堆、栈、vvar、vdso、vsyscall等之外,还有了许多动态链接库.so。

2.1K20

Nginx的时间管理

gettimeofday()的开销 在Linux中,Nginx通过gettimeofday()获取系统当前时间; gettimeofday是C库提供的函数(不是系统调用),它封装了内核里的sys_gettimeofday...Linux的系统调用通过int 80h实现,用系统调用号来区分入口函数,步骤大致如下: 1 API将系统调用号存入EAX,然后通过中断调用使系统进入内核态; 2 内核中的中断处理函数根据系统调用号,调用对应的内核函数...3 系统调用完成相应功能,将返回值存入EAX,返回到中断处理函数; 4 中断处理函数返回到API中; 5 API将EAX返回给应用程序 然而除了基本的系统调用外,x86_64还提供了sysenter/vsyscall...方式获取内核态数据,vsyscall在内存中创建内核态的共享页面,用户态也有权访问,可不经过系统中断和陷入内核获取内核信息; gettimeofday()便是通过vsyscall实现了系统调用。

44510

Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )

文章目录 一、查看 .config 编译配置文件 二、正式编译内核 一、查看 .config 编译配置文件 ---- 在上一篇博客 【Linux 内核】编译 Linux 内核 ④ ( 打开 Linux...内核编译 菜单配置 |菜单配置中的光标移动与选中状态 | 保存配置 | 配置项帮助文档 ) 中 , 已经将编译配置保存到了 .config 文件中 ; 查看 .config 编译配置文件 , 在 linux...等号右侧的 y 表示同意该操作 ; .config 文件内容示例 : 配置文件很多 , 这里只贴出一部分 ; # # Automatically generated file; DO NOT EDIT. # Linux...CONFIG_ARCH_CLOCKSOURCE_DATA=y CONFIG_ARCH_CLOCKSOURCE_INIT=y CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y CONFIG_GENERIC_TIME_VSYSCALL...内核源码根目录 , 执行 sudo make j4 开始编译 Linux 内核 ;

11.8K40

程序员的自我修养 - 系统调用及原理

这些接口往往通过终端的形式实现,比如Linux使用0x80号中断作为系统调用的入口,Windows采用0x2E号中断作为系统调用的入口。...Linux系统调用 在x86下,Linux的系统调用由0x80完成,各个通用寄存器用于传递参数,EAX寄存器用于表示系统调用的接口号,比如EAX=2表示创建进程(fork),每个系统调用都对应于内核源码中的一个函数...比如Linux的int 0x80,系统调用号是放在eax,然后使用int 0x80调用中断,从eax取得系统调用号。 ?...Linux新型系统调用机制 由于基于int指令的系统调用在奔腾4处理器上性能不佳,Linux2.5版本开始支持一种新的系统调用机制。...分析过程: ldd获取共享库,找到linux-gate.so.1,也就是地址0xffffe0000被映射到vdso,可以把文件的这个段单独导出到一个文件里分析,vdso导出一系列函数,其中 _kernel_vsyscall

44220
领券