- 博客(33)
- 收藏
- 关注
原创 使用 exec*库函数、编程练习动态链接库的两种使用方式
当程序在运行时需要动态链接共享库时,它会查找 LD_LIBRARY_PATH 中指定的路径,其中包含了动态链接库(.so 文件)的位置。其中,myecho.c打印出传递给它的命令行参数列表,myexecve.c 使用 execve 函数调用来加载一个新的程序,即myecho,它的名字(myecho)作为 myexecve 的第一个参数传入,接着便是list1[]中的其他数据被打印。每个函数都有特定的用途和参数列表。execve 函数被用于装载并执行新的程序,它允许传递参数列表给新程序,并可以指定环境变量。
2023-12-27 11:04:36
2071
原创 外设驱动程序设计(1和2)
该实验是编写最简单的字符驱动程序,这里的设备也就是一段内存,实现简单的读写功能,并列出常用格式的Makefile 以及驱动的加载和卸载脚本。在我的Ubuntu系统下无法完成,大概是系统版本过高,于是选择了曾经低版本的Linux进行实验,且版本为Centos版本,最终实验成功。该实验要求实现对虚拟设备(一段内存的打开、关闭、读写的操作,并要通过编写测试程序来测试虚拟设备及其驱动运行是否正常。学习资源中全课中的“hqyj.嵌入式Linux应用程序开发标准教程.pdf”中的第十一章。
2023-12-26 23:59:15
421
1
原创 批处理实验
在某文件夹(11月29)中放入文本1.txt和文本2.txt,并编写一个bat脚本实现Windows下批处理过程。运行过程中,还发现没有.sh文件的权限,因此使用chmod +x 20232831.sh为其添加执行权限。3 给出各种情况的测试结果截图(正常文件,巨大文件,一个空文件,两个空文件)输出如下:(融合输出后全部输出1.txt的剩余内容)2 代码要高效,代码尽量简洁。1 尽量不生成临时文件。
2023-12-26 22:53:10
852
原创 visual studio下静态链接库的制作、动态链接库的制作
3、 将lib文件放入与main.c和head.h文件同级目录下。3、 将dll文件放入与main.c和head.h文件同级目录下。5、 直接运行main.c函数,即可调用静态库lib。5、 直接运行main.c函数,即可调用动态库dll。由上述可知,已经得到了动态链接库,直接调用即可。1、 head,h和上文中的代码一致。1、 head,h和上文中的代码一致。输入静态库的名字,保存即可。
2023-12-26 22:33:58
2128
4
原创 算法测试、模块与系统调用、读者写者
模块加载入系统时,系统修改内核中的符号表,将新加载的模块提供的资源和符号添加到内核符号表中,以便模块间的通信。如果您的程序使用多线程技术,例如在使用 pthread_create 创建线程时,需要链接 pthread 库,以便在编译后可以正确运行多线程程序。进行运行后,输入的两个数字分别代表读者和写者的数量(N 和 M),此后程序将创建多个读者和写者线程,并模拟它们的并发操作。函数原型是MODULE_LICENSE(),告诉内核该程序使用的许可证,不然在加载时它会提示该模块污染内核。
2023-12-26 22:14:58
807
1
原创 内核编译与系统调用
在/usr/src/linux-6.5.8/arch/x86/entry/syscalls下的syscall_64.tbl内添加系统调用号。修改文件sudo gedit /usr/src/linux-6.5.8/include/linux/syscalls.h添加函数声明。修改文件sudo gedit /etc/default/grub,将GRUB_TIMEOUT=0注释掉。出错,发现是makefile函数有问题,于是进行修改:sudo gedit .config。先存进/usr/src。
2023-12-26 21:10:10
2227
1
原创 两种汇编的实验
因此需要删除多余的辅助代码,而这些辅助代码就是类似“.size”等“.”开头的文件。1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.c“编译成汇编代码 int。1 通过输入gcc -S -o main.s main.c 将下面c程序”week0402学号.c“编译成汇编代码。2. 删除汇编代码中 . 开关的代码,提交f 函数的汇编代码截图,图中用矩形标出函数栈帧的形成和销毁的代码。结果如下:(出错,发现没有用32位编译的包)
2023-12-26 20:59:02
973
1
原创 main参数传递、反汇编、汇编混合编程
参考 http://www.cnblogs.com/rocedu/p/6766748.html#SECCLA在Linux下完成“求命令行传入整数参数的和”注意C中main: int main(int argc, char *argv[]), 字符串“12” 转为12,可以调用atoi()求和函数 int sum(int N)放入sum.c中, main中调用sum(),main放入main.c中测试代码传入自己的8位学号提交代码附件提交运行测试截图创建两个文件一起编译,然后运行。
2023-12-26 18:23:53
483
1
原创 Vim or VSCode、gcc测试、gdb测试、静态库的测试、共享库的测试
用gcc 进行预处理,编译,汇编,链接hello world程序,要求加一行打印自己学号姓名。生成main.o并与静态库进行链接,并生成link这个可执行文件进行调用静态库。提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息。gcc -g 生成main文件进行gdb测试(一定要生成,否则将出错)如果使用以下代码,则直接一步到位,同时完成四个步骤直接生成可执行文件。汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码。n(一直按n,即表示next下一执行,直至代码运行结束)
2023-12-26 17:24:55
1191
1
原创 Ubuntu下Openssl安装及简单测试
l(小写的L):-lssl 即是寻找/usr/local/openssl/lib目录下的 libssl.a 这个库,编译器会自动寻找 libssl.a或者libssl.so。1.openssl库的版本问题,请直接链到你需要的openssl库路径,比如直接/usr/local/ssl/lib,2.注意-lssl -lcrypto要写在-ldl -lpthread前面,这段必须要有。-I(大写的i):指定头文件的文件夹地址。-L :此选项是指定链接库的文件夹地址。
2023-12-20 14:26:03
802
原创 2023-2024-1 20232831《Linux内核原理与分析》第十二周作业
本文主要介绍了使用 python 脚本监控 cpu,系统负载,内存信息,网络接口。对代码还不熟悉的同学可以多敲几遍代码,加深对代码的理解。如果对 Python 还不是太熟悉的同学,可以点击Python3 简明教程进行学习。在Linux系统监控的实战中,我深入了解了系统监控的基本原理和工具。通过学习,我掌握了一些关键的命令和工具,如CPU 监控 top、虚拟、内存监控 vmstat等等,还学习了使用vmstat和iostat等工具来监测系统的虚拟内存和磁盘I/O性能等等。
2023-12-08 21:56:32
81
原创 2023-2024-1 20232831《Linux内核原理与分析》第十一周作业
对操作系统安全的关注,实际上是对操作系统中信息安全的关注。信息安全的基本原则是CIA三元组(也成为安全原则三剑客)——机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。一个完整的信息安全保障体系,应该充分考虑到CIA三元组的基本原则。机密性(不可见):又称隐私性,是指数据不能被未授权的主体窃取,即避免恶意读操作。完整性(不可改):确保数据只被授权的主体进行授权的修改。即避免恶意写操作。可用性(可读):是指数据能够被授权主体正常访问。
2023-11-28 17:22:39
144
原创 2023-2024-1 20232831《Linux内核原理与分析》第十周作业
主流虚拟化技术有VMware的ESXi、开源项目Xen和KVM等,主要差别在于CPU的虚拟化、内存的虚拟化和I/O的虚拟化,以及调度管理实现有所不同。ESXi中,所有虚拟化功能都在内核中实现;Xen中,内核只实现CPU和内存虚拟化,I/O虚拟化与调度管理由主机上启动的第一个负责管理的虚拟机实现;KVM中,Linux内核实现CPU与内存虚拟化,I/O虚拟化由QEMU实现,调度管理通过Linux进程调度器实现,如下图所示。
2023-11-26 12:59:26
85
1
原创 2023-2024-1 20232831《Linux内核原理与分析》第九周作业
在本次实验中,我深入理解了进程调度时机,且跟踪分析了进程调度与进程切换的过程,加深了我对 Linux 内核调度机制的理解。
2023-11-16 21:18:58
93
1
原创 2023-2024-1 20232831《Linux内核原理与分析》第八周作业
本次实验内容为“Linux 内核如何装载和启动一个可执行程序”,其包含了编译链接、动态链接、exec*库函数及其系统调用等等内容。通过练习、调试和分析,我深入理解了可执行程序装载、运行时动态链接的过程,使用GDB跟踪sys_execve系统调用函数,也加深了我对Linux系统加载程序的理解。
2023-11-11 11:01:43
78
1
原创 2023-2024-1 20232831《Linux内核原理与分析》第七周作业
通过本次实验,进一步了解了Linux 内核创建一个新进程的过程,即fork系统调用函数的运行过程,懂得了为什么会出现”一次调用,两次运行“的情况,从而对Linux内核有了新的理解。
2023-11-03 22:08:40
86
原创 2023-2024-1 20232831《Linux内核原理与分析》第六周作业
首先,重新进入实验楼,与上周操作相同,重新编译内核后,进入menu界面下,进行test.c的编辑。// 获取当前进程的PID(使用getpid)asm volatile("mov $0x14, %%eax\n\t" // getpid 的ID为20// 获取当前进程的父进程的PID(使用getppid)asm volatile("mov $0x40, %%eax\n\t" // getppid 的ID为64return 0;
2023-10-28 17:38:46
83
1
原创 2023-2024-1 20232831《Linux内核原理与分析》第五周作业
本次实验通过两种方法——使用库函数 API 和内嵌汇编代码两种方法获取了进程的PID和父进程的PID(ppid)。库函数 API方法使用标准C库函数来调用系统调用,因为它封装了底层系统调用的细节,所以调用更加简单和高级。内嵌汇编方法通过内嵌汇编代码来手动执行系统调用,它通过程序员自行编写汇编代码,提供了对CPU指令的细粒度控制,更加复杂、困难一些。但两种方法都实现了相同的目标。
2023-10-18 23:06:04
101
1
原创 2023-2024-1 20232831《Linux内核原理与分析》第四周作业
1.阅读学习教材「庖丁解牛Linux 分析 」第4章2.教材深入学习关注豆列「Linux内核及安全」。3.学习蓝墨云班课中第四周视频「构造一个简单的Linux系统MenuOS?」,并完成实验楼上配套实验三。
2023-10-12 21:55:22
149
原创 2023-2024-1 20232831《Linux内核原理与分析》第三周作业
本次实验偏向于操作系统的相关内容,实现了一个自定义的Linux内核,并实现了时间片轮转下的多道程序运行。实验让我深层次的理解了Linux内核的多进程运行的相关原理,能够为以后的学习打下坚实的基础。该实验的时间片轮转可以避免死锁,提高操作系统资源的利用率等等,具有很多好处。以下便是具体的分析:时间片轮转(Time Sharing)是一种多道程序运行的调度策略,其主要作用如下:提高系统资源利用率:时间片轮转允许多个进程并发执行,使得系统资源(如CPU时间、内存等)得到更有效的利用。
2023-10-04 21:39:59
114
1
原创 2023-2024-1 20232831《Linux内核原理与分析》第二周作业
通过反编译成汇编语言的整个过程学习,能够知道更多关于计算机底层的运行逻辑。同时,X86和ARM两种不同的汇编语言的底层逻辑也稍有不同,通过对比学习了解了更多。总的来说,汇编还是相对复杂的部分,对了解计算机原理有非常大的帮助。
2023-09-23 23:30:51
245
原创 2023-2024-1 20232831《Linux内核原理与分析》第一周作业
linux 为何物linux 历史简介linux 重要人物linux 与 windows 的不同如何学习 linux。
2023-09-17 11:42:52
729
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人