-
你这个项目经验最好着重写一下你在里面负责什么,侧重点在什么上,你简历上描述好多都太笼统,就是这些技能放在工作几年的工程师身上我感觉也算不错的了。按理来说应该也会有回复,可能也跟你还在大三,还有你投的公司可能也有比较多的筛选也有关系
-
都没怎么注意,你这么一说现在这些点赞,赞赏三连这些图标是这次更新的,还是以前就改版过了,以前点赞加精图标比较单薄
-
iysheng 发表于 2024-4-19 09:55
你的 gcc 版本是书中指定的么?
没看到有指定的版本,只有看到建议4.9.2以上
-
1.请简述高速侧信道攻击的原理。
>> 侧信道攻击(side-channel attack)是密码学中常见的暴力攻击技术。它是针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信息泄露而对加密设备进行攻击的方法;而高速侧信道则是计算机高速缓存和物理内存不同的访问延时来做侧信道攻击。根据访问时间来判断对应的位是0还是1。
2.在CPU熔断漏洞攻击中,攻击者在用户态访问内核空间时会发生异常,攻击者进程会被终止,这样导致后续无法进行侧信道攻击,那么如何解决这个问题?
>> 我们可以在攻击者进程中设置异常处理信号。当发生异常时调用该信号的回调函数,从而抑制异常导致的攻击过程的失败。
3.请简述熔断漏洞攻击的原理和过程。
>>CPU熔断漏洞巧妙地利用了现代处理器中乱序执行的副作用进行侧信道攻击,破坏了基于地址空间隔离的安全机制,使得用户态程序可以读出内核空间的数据,包括个人私有数据和密码等。
过程:1、定义一个信号,用于在程序访问非法地址时,内核发送该信号并执行对应回调而不是发生段错误
2、定义一个可以安全访问的数组用于将对应高速缓存数据冲刷掉。3、访问需要攻击的访问地址触发异常进异常处理程序,但是由于乱序执行,cpu预加载了后续指令,导致CPU将攻击地址内容读出4、通过测了比对,按照高速缓存步长来遍历定义的可以安全访问的数组,测量访问时间反推相应位数的值。
-
短接自发自收看看
-
maskmoo 发表于 2024-4-15 22:34
没有遇到,默认环境也会有问题吗
不清楚,现在还是不行,也重新拉了一下单独看一下软件安装都正常版本也没有可更新版本了。通过这个拉的库git clone https://e.coding.net/benshushu/runninglinuxkernel_5.0/
runninglinuxkernel_5.0.git
-
./run_debian_arm64.sh build_kernel,有没有遇到过这个报错说是不支持-fpatchable-function-entry=2,查看aarch64-linux-gnu-gcc版本和target是这样。
-
首先短接你板子的rx,tx看自发自收有没有问题,如果正常,多半硬件没有问题,很可能就是时钟时序什么有问题;在正常连接,不停的切换上位机工具波特率,看看数值有变化,有变化的话,很可能就是配置的时钟这些有问题了,如果有逻辑分析仪或者示波器,能接一下信号看一下,板子外发的数据波形大概就能看出来来里串口的相关配置,然后在看一下你的输入波形,看看有没有异常。然后你这个测试轮询不太确定有没有问题,可以直接参考库里的轮询接口修改后者直接调用相关接口试试
-
1.假设函数调用关系为main()->func1()->func2(),请画出ARM64架构的函数栈的布局。
>>
2.在ARM64架构中,子函数的栈空间的FP指向哪里?
>>指向父函数(上一级)栈空间的FP;
3.在ARM64架构的calltrace日志里,如何推导出函数的名称?
>>通过寄存器现场反推函数名称,首先确定发生崩溃的栈空间FP,然后根据LR在其高8字节地址的,推算地址,后又由于LR存放子函数返回下一条指令,rd 出LR之后减去4字节,推算上一级函数调用该函数PC值,通过dis来推算函数名称 ,依此来恢复推算各级函数名称及调用
-
1.请简述Kdump的工作原理。
>>生产内核崩溃会快速启动Kexec,切换到捕获内核来对生产内核崩溃数据进行收集转储
2.在x84_64架构里函数参数是如何传递的?
>>当函数中数的数量小于或等于6的时候,使用通用寄存器来传递函数的参数。当函数中参数的数量大于 6 的时候,采用栈空间来传递函数的参数
3.假设函数调用关系为main()→func1()→func2(),请画出x84_64架构的函数栈的布局图。
-
hellokitty_bean 发表于 2024-4-1 09:57
想请教楼主:Linux内核(第2版)卷2,那么是不是应该有卷1?
只要看到内核,就有惧怕的感觉
点赞楼主 ...
有卷1的,讲基础架构,内存分配管理等等的
-
1.使用GCC的O0优化选项来编译内核有什么优势?
>> 用“O0”优化等级编译的内核进行单步调试不会出现变量优化和鼠标光标乱跳等问题;也会保留更多的调试信息;但是也会导致内核运行性能下降,所以我们一般在方便单步调试内核使用该优化选项;
2、什么是加载地址、运行地址和链接地址?
>> 加载地址:存储代码的物理地址。如ARM64处理器上电复位后是从0x0地址开始取第一条指令的,所以通常这个地方存放代码最开始的部分,如异常向量表的处理。
运行地址:指程序运行时的地址。
链接地址:在编译链接时指定的地址,编程人员设想将来程序要运行的地址。程序中所有标号的地址在链接后便确定了,不管程序在哪里运行都不会改变。使用aarch64-linux-gnu-objdump(objdump)工具进行反汇编查看的就是链接地址
3.什么是位置无关的汇编指令?什么是位置有关的汇编指令?
>> 位置无关代码:从字面意思看,该指令的执行是与内存地址无关的;无论运行地址和链接地址相等或者不相等,该指令都能正常运行。在汇编语言中,像BL、B、MOV指令属于位置无关指令,不
管程序装载在哪个位置,它们都能正确地运行,它们的地址域是基于PC值的相对偏移寻址,相当于[pc+offset]。
位置有关代码:从字面意思看,该指令的执行是与内存地址有关的,和当前PC值无关。ARM汇编里面通过绝对跳转修改PC值为当前链接地址的值。
-
1.发生硬件中断后,ARM64处理器做了哪些事情?
>>> 检测到中断源后,会将对应中断标记为pending;仲裁单元会确定目标CPU,CPU选择最高优先级中断送给对应接口,CPU接口判断是否可以发给CPU,给 CPU发送中断请求,CPU进入中断异常后进入对应中断服务程序,完成后发送结束中断,完成此次工作。中间还涉及中断现场的保存和返回等;
这个我看到更简洁的描述是中断屏蔽判断是否是有效中断,获取中断向量,保存现场;根据向量跳转中断服务程序,执行完后中断返回中断前现场。
2.硬件中断号和Linux内核的IRQ号是如何映射的?
>>> 简单来说,通过中断控制器来实现两者的映射,在以往的ARM7/ARM9的SoC中,通常只有一个全局中断状态寄存器,每位管理一个外设中断,直接映射硬件中断号到Linux内核的IRQ号。后续的发展过程中SoC通常有多个中断控制器所以在Linux3.1引入了irq_domain管理框架,该框架支持多个中断控制器,支持设备树机制;
3.一个硬件中断发生后,Linux内核如何响应并处理该中断?
>>> 在对应中断向量表前 ARM处理器会先自动完成一下操作:处理器的状态保存在对应的异常等级的SPSR_ELx中。返回地址保存在对应的异常等级的ELR_ELx中。PSTATE寄存器里的DAIF域都设置为1,相当于把调试异常、系统错误(SError)、IRQ以及FIQ都关闭了。PSTATE寄存器是ARM v8里新增的寄存器。
如果是同步异常,那么究竟什么原因导致的呢?具体要看ESR_ELx。设置栈指针,指向对应异常等级里的栈。迁移处理器等级到对应的异常等级,然后跳转到异常向量表里执行;根据向量表进行相应的跳转;根据IRQ发生在内核还是用户模式(EL0/EL1),在中断服务程序前后都会又相应的保存和恢复中断上下文;
感觉
-
Jacktang 发表于 2024-3-18 07:47
为什么自旋锁的临界区不能睡眠(不考虑RT-Linux的情况)?
看来还需要读读这本书
自旋锁的临界区中主动睡眠以让出CPU,这样可能导致其他持锁的阻塞,导致并发的一个死锁的bug.RT-Linux不考虑这个我专门查了一下,是因为RT-Linux有优先级继承,睡眠等待锁机制来避免死锁和优先级反转问题。其他也有一些也有类似的支持。
-
GD32没用过,按理说你这个波特率800字节没有压力,我看你这个代码单字节去放一次缓冲区,这个是否就是这个逻辑,可以测一下这一部分写的大概时间,看看是不是本身这部分耗时就超过预期,而且这写数据之后再去清理和初始化的中断是读相关的中断?建议出现卡死的时候,读取一下串口相关寄存器,看看是否有一些异常,实在不行可以找一下厂家FAE看看
-
1.在ARM64处理器中,如何实现独占访问内存?
Linux内核提供了多种并发访问的保护机制,如原子操作、自旋锁、信号量、互斥锁、读写锁、RCU等,另一方面是否也可以分为内存屏障、内存锁定、内存顺序约束等。
2.atomic_cmpxchg()和atomic_xchg()分别表示什么含义?
atomic_cmpxchg(ptr, old, new):原子地比较ptr的值是否与old的值相等,若相等,则把new的值设置到ptr地址中,返回old的值;有一个类似的函数atomic_try_cmpxchg(ptr, old, new),两者区别在于返回值,一个返回旧值,一个返回比较结果;
atomic_xchg(ptr, new):原子地把new的值设置到ptr地址中并返回ptr的原值。
在ARM64中,CAS指令包含了加载-获取和存储-释放指令,它们的作用是什么?
CAS即比较和交换,加载-获取指令用于读取内存位置的当前值,而存储-释放指令用于将新值写入内存位置。cas指令会有不同的屏障属性1、隐含了加载-获取内存屏障原语。2、隐含了存储-释放内存屏障原语。3、同时隐含了加载-获取和存储-释放内存屏障原语。4、不隐含内存屏障原语。加载-获取和存储-释放指令保证了并发的保护机制,避免竞争条件出现
-
人言信则日月明
-
个人信息无误,确认可以完成阅读计划和打卡任务
-
个人地址确认无误,感谢EE
-
上联:代码编译三两行
下联:bug输出万千条
横批:还写个屁