
系统
文章平均质量分 69
系统
小气球归来
https://leonechen.github.io
展开
-
Kernel Double-Fetch Bug检测论文
《Precise and Scalable Detection of Double-Fetch Bugs in OS Kernels (SP’18)》(YouTube,GitHub)(它给自己取了个名叫“Deadline”)总结了前人对Double Fetch的刻画,形式化地描述了Double-Fetch Bug。作者列表中有内核安全大佬Kangjie Lu和SGX大佬Taesoo Kim。前人在Double Fetch方面的工作包括:《Bochspwn: Identifying 0-days via原创 2021-08-25 21:46:19 · 363 阅读 · 0 评论 -
Intel CET endbr64
哪些CPU支持Intel CET?Intel CET技术在最近的Tiger Lake架构CPU上受到了支持(here)。比如至强中的Intel® Xeon® W-11955M Processor、酷睿中的英特尔® 酷睿™ i7-1185G7E 处理器。Intel CET的作用及endbr64指令Intel CET提供了影子栈及间接跳转指令追踪功能,保护控制流完整性(wiki: here)。Intel CET相关的指令如endbr64是后向(backward)兼容的。在Intel CET中,间接跳原创 2021-06-01 16:55:21 · 4861 阅读 · 4 评论 -
Linux调度器笔记
CPU核上进程调度的标识时期和真正调度时期硬件定时器触发时间中断(如针对使用时间片的SCHED_RR场景)、进程唤醒、进程创建、进程迁移时会设置进程调度标志位(TIF_NEED_RESCHED),此时相当于检查哪些进程需要被调度,但并没有实际进行调度操作。,检查是否需要调度和调度具体时机分离,因为中断中不能直接进行调度。在中断上下文返回时或系统调用返回等时候(会调用schedule函数的地方等,schedule函数包含了切出A进程及切回A进程)被动调度 系统调用返回到用户空间 中原创 2021-04-24 16:19:57 · 726 阅读 · 0 评论 -
Grub 2.04启动内核卡在“loading initial ramdisk”
Ubuntu 20.04所使用grub 2.04在启动自己编译的内核时会卡在“loading initial ramdisk”https://bugs.launchpad.net/ubuntu/+source/intel-microcode/+bug/185336955楼的回答简单的解决办法就是再装个ubuntu18.04,用它的grub 2.02来启动。...原创 2021-01-06 19:44:15 · 6399 阅读 · 1 评论 -
Ubuntu自制触控板开关快捷键
我的戴尔笔记本不支持快捷键开关触控板,那么……写脚本if [ `xinput list-props 15|grep "Device Enabled" |cut -f3` -eq 0 ];then xinput --enable 15;else xinput --disable 15;fi将上述命令写到一个Shell脚本文件中,比如TouchPad.sh。【注意脚本中15是我的TouchPad的ID】记得添加执行权限chmod +x TouchPad.sh然后把这脚本加到【设置】->【键原创 2020-12-26 19:06:53 · 247 阅读 · 0 评论 -
Page Flag和mprotect,DEP和NX(EDB)
Page Flag Bit#define _PAGE_BIT_PRESENT 0 /* is present */#define _PAGE_BIT_RW 1 /* writeable */#define _PAGE_BIT_USER 2 /* userspace addressable */#define _PAGE_BIT_PWT 3 /* page write through */#define _PAGE_BIT_PCD 4 /* page cache disabled */原创 2020-11-19 13:49:44 · 745 阅读 · 0 评论 -
CPUID、SGX中使用CPUID
返回值汇总表位于《Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes 2A Vol》的Table 3-8. Information Returned by CPUID Instruction。这个表占了足足19页,吓人。不过很丰富,很有用。官网下载地址如下,注意是在2A卷中。https://software.intel.com/content/www/us/en/develop/downlo原创 2020-08-10 23:43:10 · 640 阅读 · 0 评论 -
解决Windows/Ubuntu双系统时间不一致
sudo apt install ntpdate -y && sudo ntpdate time.windows.com && sudo hwclock --localtime --systohc原创 2020-09-04 15:12:28 · 202 阅读 · 0 评论 -
移除所有dpkg列表中rc标记的packages
dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge移除所有dpkg列表中rc标记的packages转载 2020-11-18 12:16:02 · 747 阅读 · 0 评论 -
OOPS以及【no_context】内核模式处理异常
no_context#一些异常处理的尝试,不ok就会oops-show_fault_oopsNov 11 21:18:47 leone-Inspiron-7590 kernel: [ 917.305110] BUG: unable to handle page fault for address: ffff9e949b92d359Nov 11 21:18:47 leone-Inspiron-7590 kernel: [ 917.305114] #PF: supervisor read a原创 2020-11-12 00:08:53 · 3699 阅读 · 0 评论 -
x86内核页错误处理流程
Page Fault的IDT项idtentry page_fault do_page_fault has_error_code=1 read_cr2=1idtentry是一个汇编宏。/** * idtentry - Generate an IDT entry stub * @sym: Name of the generated entry point * @do_sym: C function to be called * @has_error_code: True if t原创 2020-11-11 17:44:38 · 1817 阅读 · 0 评论 -
GCC内嵌汇编
https://dirtysalt.github.io/html/gcc-asm.html转载 2020-10-28 15:40:17 · 147 阅读 · 0 评论 -
ELF文件与Enclave.so
ELF文件格式左图是链接试图、右图是执行视图。链接视图强调链接器对目标文件及其Section的拼接过程,比如ELF文件、ELF文件映射都是链接视图。执行视图强调在实际执行中的ELF组织形式。《SGX初始化中ELF文件解析》注意这两者是有变化的,这是两套类似的副本,但前者是ELF文件,后者是实际执行的ELF副本,后者由前者提取组成。简单描述一下ELF程序加载的例子,我们首先将各种目标文件(包括可重定位文件、可执行文件、共享目标文件)拼接成ELF文件,由链接器完成。之后我们试图将ELF文件给跑起来(原创 2020-09-06 22:29:28 · 573 阅读 · 0 评论 -
Linux内存机制浅见——从内存布局到线程局部存储TLS
先记最近在重新分析SGX的源码,一路发现,我还需要重新思考ELF文件格式(我在《SGX初始化中ElfParser::run_parser()做了什么》里面有讲解)、Linux内存机制。因此这里就对Linux内存机制进行笔记。(令人头大……)内核内存是一个很复杂的东西(令人头大……),这里已目前浅学进行一个系统归纳。如有错误,劳烦指出。内存布局0xC0000000到0xFFFFFFFF 内核直接映射空间(可能还有内核动态映射空间) (0xBFFFFFFF-该区域长度,简单地记为arg原创 2020-08-10 15:26:10 · 912 阅读 · 0 评论 -
OPENSSH【源码分析】
【有空画图】SSH客户端核服务端DaemonSSH客户端:先参数的配置,然后ssh_login进入登录过程。ssh_login中会通过ssh_kex2来完成key exchange。ssh_kex2包括kex_setup来初步设置(包括向服务端发送SSH2_MSG_KEXINIT标志,已经接收服务端传来的相关消息),此外还会注册诸如kexgex_client(这个函数是配套openssl使用的)的函数用于之后进行具体密钥交换的过程(用于采用前期注册,后面传参指定某个注册函数的方式,控制流和数据流不好原创 2020-08-04 18:46:03 · 3457 阅读 · 0 评论 -
线程ID杂记
获取线程IDpthread_self、std::this_thread::get_id:实际上是线程库维护的TID信息,pthread_self返回值是线程结构体pthread_t的地址。syscall(SYS_gettid):获取是线程的在内核看来的pid_t进程ID值。亲和性是一种属性(核心的可选择性。目前只查到是数据结构的维护。调度的时候用到。它与linux cgroup之间极有可能存在联系,彼此之间一致性的维护需要时间)sched_setaffinity:进程的CPU亲和性p原创 2020-08-04 18:18:21 · 378 阅读 · 0 评论 -
Arachne【源码分析】及AESA、PortSmashA
https://github.com/PlatformLab/arachne-allInit函数(主线程)首先分析命令行参数来设置全局变量等(parseOptions)。配置好CoreArbiterClient(其中Socket位置:/tmp/CoreArbiter/socket)。根据命令行参数中的核数量分配做一个默认的CorePolicy。发送核数量请求(CoreArbiterClient::setRequestedCores),具体会通过CoreArbiterClient来向CoreA..原创 2020-10-01 18:20:58 · 701 阅读 · 0 评论 -
驱动杂记
struct file_operations中unlocked_ioctl和ioctlhttp://blog.chinaunix.net/uid-20543672-id-3015637.htmlioctl受到大内核锁保护,unlocked_ioctl是无锁直接执行的。unlocked_ioctl优先级高于ioctl,如果存在unlocked_ioctl,则执行unlocked_ioctl,否则才执行ioctl。这个优先级的产生明显是为了过渡。内核空间和用户空间交换数据https://blog原创 2020-08-04 16:23:06 · 579 阅读 · 0 评论 -
内核核调度相关杂记
关于CPUSET内核最终是怎么和CPU联动的,依然没有找到资料。但是找到了关于多核CPU的可能原理。https://zhidao.baidu.com/question/1888325288657912308.html就是说多核各自有自己的寄存器组,尤其关注EIP寄存器。猜想是内核将指定CPU的EIP放到目标代码来实现这个核的运转,所以应该说OS之所以能够核调度,是因为OS有Ring0权限对CPU的目标寄存器进行操作。这也意味着Ring3是没有办法对核进行有效的管控的。这就和SGX的假设起了冲突。原创 2020-07-22 21:21:40 · 185 阅读 · 0 评论