目录
bin文件和elf文件的区别
bin文件
Gcc 编译出来的是ELF文件。通常gcc –o test test.c,生成的test文件就是ELF格式的,在linux shell下输入 ./test就可以执行。
Bin 文件是经过压缩的可执行文件,去掉ELF格式的东西。是直接的内存映像的表示。在系统没有加载操作系统的时候可以执行。
elf文件
elf(executable and link format)文件里面包含了符号表,汇编等。
BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。
两者之间的联系
两种文件都可以运行,机器最终只认BIN,之所以有ELF格式是在有操作系统时,操作系统会根据ELF解析出代码、数据等等,最终仍是以BIN运行。由于elf文件的信息比较全,所以可以用来以单步跟踪的方式运行。关键是看loader。
.
.
.
.
两台linux操作系统之间用什么命令进行文件传输
当两台LINUX主机之间要互传文件时可使用SCP命令来实现
scp传输速度较慢,但使用ssh通道保证了传输的安全性
.
.
.
.
.
.
i++ 和 ++i 的区别
结论:i++:先赋值再++,效率低;++i:先++,再赋值,效率比++i高
原因:i++,加一操作会在下一步才会生效,所以申请了临时变量,暂存了当前值,i++,则没有这一步骤,故效率更高
具体过程:i++:int temp=i; i=i+1; return temp;(i++需要开辟临时变量,效率低)
++i:i=i+1; return i; (++i不需要开辟临时变量,效率高)
.
.
.
.
数组越界访问会有什么后果
数组在初始化的过程中,就已经确定申请一块多大的连续内存。这块内存是合法的,系统知道这块内存有人在用。我们通过地址来访问空间,理论上我们可以通过数组下标加1的方式访问,后面那些未申请的空间。但是如果这段空间存放这重要的资源,数组越界访问,导致资源被覆盖。轻则内存泄露,重则系统崩溃
.
.
.
.
.
.
设备驱动程序中如何注册一个字符设备?分别解释一下它的几个参数的含义。
用户空间使用open()系统调用函数打开一个字符设备时( int fd = open(“dev/demo”, O_RDWR) )大致有以下过程:
1、在虚拟文件系统VFS中的查找对应与字符设备对应 struct inode节点
2、遍历字符设备列表(chardevs数组),根据inod节点中的 cdev_t设备号找到cdev对象
3、创建struct file对象(系统采用一个数组来管理一个进程中的多个被打开的设备,每个文件秒速符作为数组下标标识了一个设备对象)
4、初始化struct file对象,将 struct file对象中的 file_operations成员指向 struct cdev对象中的 file_operations成员(file->fops = cdev->fops)
5、回调file->fops->open函数
注册一个字符设备有种方法:
方法一:
void cdev_init(struct cdev*cdev ,struct file_operation* fops)
cdev是一个指向结构体cdev的指针,而fops是指向一个类似于file_operations结构(可以是file_operations结构,但不限于该结构)的指针.
struct cdev* cdev 是内核用来描述一个字符设备
方法二:
int register_chrdev(unsigned int major , const char * name , struct file operations * fopen)
**该注册函数是早期的注册函数,major是设备的主设备号,name是驱动程序的名称,而fops是默认的file_operations结构(这是只限于file_operations结构)对于register_chrdev的调用将为给定的主设备号注册0-255作为次设备号,并为每个设备建立一个对应的默认cdev结构
**
.
.
.
.
.
.