2023-2024 20233809《Linux内核原理与分析》第八周作业

20233809黄雅琦 20233809黄雅琦 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

一、通过chatgpt学习相关知识
https://chat.openai.com/c/59e97352-da20-4ba0-8ebf-275589ecc453
二、实验楼实验七
1、理解编译链接的过程和 ELF 可执行文件格式
1)首先编写hello.c,并生成编译链接
#include<stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
编译链接命令
gcc -E hello.c -o hello.i//预处理
gcc -S hello.i -o hello.s//编译
gcc -c hello.s -o hello.o//汇编
gcc hello.o -o hello//链接
“gcc -o hello.static hello.o -static”静态编译出来的hello.static把C库里需要的东西也放到可执行文件里了。使用命令ls –l后,可以看到hello只有8511,hello.static有大概有877147。
编译过程图展示:

img


2)、输入命令readelf -h hello查看hello文件的头

img


2、编程使用 exec库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接。
1)可执行程序装载时动态链接
#ifndef SH_LIB_EXAMPLE_H
#define SH_LIB_EXAMPLE_H
#define success 0
#define failure(-1)
#ifdef __cplusplus
extern "C"{
#endif
int SharedLibApi();
#ifdef __cplusplus
}
#endif
#endif /
SH_LIB_EXAMPLE_H */
2)生成shlibexample.c文件
#include<stdio.h>
#include"shlibexample.h"

int SharedLibApi()
{
printf("This is a shared libary!\n");
return success;
}
3)输入gcc -shared shlibexample.c -o libshlibexample.so -m32”(在64位环境下执行时加上-32)生成.so文件生成文件

img


4)编写dllibexample.h文件
#ifndef DL_LIB_EXAMPLE_H
#define DL_LIB_EXAMPLE_H

#ifdef __cplusplus
extern "C" {
#endif

int DynamicalLoadingLibApi();

#ifndef __cplusplus
}
#endif
#endif /* DL_LIB_EXAMPLE_H */
5)编写dllibexample.c文件
#include<stdio.h>
#include"dllibexample.h"
#define success0
#define failure (-1)

int DynamicalLoadingLibApi()
{
printf("This is a Dynamical Loading libary!\n");
return success;
}
6)使用命令gcc -shared dllibexample.c -o libdllibexample.so生成动态库

img

7)接着建立动态链接,首先编写主函数test5.c
#include <stdio.h>
#include "shlibexample.h"
#include <dlfcn.h>

int main()
{
printf("This is a Main program!\n");
printf("Calling SharedLibApi() function of libshlibexample.so!\n");
SharedLibApi();
void * handle = dlopen("libdllibexample.so",RTLD_NOW);
if(handle == NULL)
{
printf("Open Lib libdllibexample.so Error:%s\n",dlerror());
return failure;
}
int (*func)(void);
char * error;
func = dlsym(handle,"DynamicalLoadingLibApi");
if((error = dlerror()) != NULL)
{
printf("DynamicalLoadingLibApi not found:%s\n",error);
return failure;
}
printf("Calling DynamicalLoadingLibApi() function of libdllibexample.so!\n");
func();
dlclose(handle);
return success;
}
8)
输入gcc main.c -o main -L/home/shiyanlou -lshlibexample -ldl -m32和export LD_LIBRARY_PATH=$(pwd)以及./test5.c

img


3、使用 gdb 跟踪分析一个 execve 系统调用内核处理函数 sys_execve
1)Linux提供了exec、execlp、execle、execv、execvp、execve等六个用以执行一个可执行文件的函数,统称为exec函数,差异在于对命令行参数和环境变量参数的传递方式不同。以上函数的本质都是调用系统调用sys_execve()来执行一个可执行文件。
整体的调用关系从前到后为:
sys_execve、do_execve、do_execve_common、exec_binprm、search_binary_handler、load_elf_binary、start_thread
可执行程序执行到execve的时候陷入到内核态,当系统调用从内核态返回到用户态时,eip直接跳转到ELF程序的入口地址,CPU也得到新的用户态堆栈(包含新程序的命令行参数和shell上下文环境)。这样,新程序就开始执行了。
当执行execve时,用execve的加载的可执行文件把当前进程的可执行程序给覆盖掉,execve的系统调用会返回新的可执行程序的起点——main函数。

img


2)接着使用gdb进行跟踪分析

img


img


4、实验总结
本次实验围绕着编译链接的过程和 ELF 可执行文件格式、动态链接以及系统调用,学习了相关知识以及简单的代码编译。

...全文

相关推荐

国央企创新负责人如何构建面向核心技术攻关的多维创新资源协同机制?.docx

国央企创新负责人如何构建面向核心技术攻关的多维创新资源协同机制?

BIZKEEN

科技中介服务机构如何提升技术对接服务的专业性与效率?.docx

科技中介服务机构如何提升技术对接服务的专业性与效率?

BIZKEEN

政府科技管理者在推动区域科技成果转化时,如何提升科技成果与产业需求的对接精准度?.docx

政府科技管理者在推动区域科技成果转化时,如何提升科技成果与产业需求的对接精准度?

BIZKEEN

科技中介服务机构在为企业提供技术对接服务时,如何提升全流程服务的智能化水平?.docx

科技中介服务机构在为企业提供技术对接服务时,如何提升全流程服务的智能化水平?

BIZKEEN

无功优化基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)

内容概要:本文研究了基于多目标差分进化算法的含分布式电源(DG)配电网无功优化模型,以IEEE33节点系统为仿真平台,旨在应对DG接入后引发的电压波动加剧与网络损耗上升等关键问题。通过构建综合考虑有功网损最小化、电压偏差最小化等多重目标的优化模型,并融入节点电压、支路电流及无功补偿容量等多种运行约束,采用多目标差分进化算法(MODE)进行高效求解,实现了对无功补偿设备出力与DG无功调节能力的协同优化。文中系统阐述了算法的数学原理、模型的构建逻辑及详细的仿真设置,并通过与其他优化方法的对比分析,充分验证了所提方案在提升电压质量、降低网络损耗及增强系统运行经济性与稳定性方面的优越性。; 适合人群:具备电力系统分析、优化理论及Matlab编程基础,从事配电网运行控制、分布式能源并网技术、智能电网优化调度等相关领域的科研人员、工程技术人员及高年级研究生。; 使用场景及目标:①应用于高比例DG渗透的现代配电网无功电压优化调度,有效提升系统运行的安全性与经济性;②为相关领域研究人员提供一套完整的、基于多目标进化算法解决复杂电力系统多目标优化问题的Matlab代码实现范例,便于直接复现、验证与二次开发;③作为高校相关课程的教学案例,用于演示先进优化算法在电力系统中的具体应用。; 阅读建议:建议读者结合文中详尽的理论推导与提供的Matlab代码,仔细复现仿真结果,深入理解多目标优化问题的建模思路、Pareto最优解集的概念以及差分进化算法在处理复杂约束条件下的具体实现技巧,并可尝试将该模型拓展至其他标准测试系统或引入更多的优化目标与约束条件以进行深入研究。

荔枝科研社
评论
收藏 已收藏
分享
返回顶部