词法分析

概念

词法分析

词法分析是编译的第一阶段.词法分析主要任务是读入输入字符,产生记号(token)序列,提交给语法分析使用.
由于这种交互模式,词法分析器可以作为语法分析器的子程序或协作程序.语法分析器每次调用词法分析器持续读入字符,直到识别出下一个记号.

词法分析除了产生记号,也收集记号相关的信息作为记号的属性(比如数字的值,标识符对应的字符串).记号影响语法分析,记号的属性影响记号的翻译.属性一般存储在符号表中.

阅读更多...

Linux内核设计的艺术 阅读笔记

Linux0.11内核.正文部分记录过程,引用部分记录知识点和理解.

main函数之前的功能

加载操作系统

经典流程:
计算机加电设置cs:ip为0xffff0,运行ROM中的BIOS,BIOS初始化中断向量表和一些硬件设备,加载0盘0道1扇区的引导程序bootsect到0x7c00处.bootsect是与操作系统配套的,规划物理内存,加载操作系统,设置根设备为软盘.

Linux0.11要求系统必须存在一个根文件系统,其他文件系统挂接其上.因此Linux的启动需要两部分数据,即系统内核镜像和根文件系统.(kernel pwn中的bzimage和文件系统(比如busybox提供的))

阅读更多...

MIT6.828 Lab3

Lec 7

一些虚拟内存实现的技巧,如延迟分配,写时复制等
https://pdos.csail.mit.edu/6.828/2018/lec/l-usingvm.pdf

Lab3 User Environments

PartA: User Environments and Exception Handling

Creating and Running Environments

创建并初始化envs,env_setup_vm函数为环境e建立一个专属的页目录表,由于在UTOP上的内核空间映射对每个环境都是相同的,所以可以直接拷贝kern_pgdir过来.

阅读更多...

羊城杯2023 复现

heap没出没进线下…

login

qemu-riscv64 -g 2333 ./pwn
gdbinit这样设置方便调试,然后gdb-multiarch -x gdbinit就能调了

1
2
3
4
5
6
7
8
9
10
set arch riscv:rv64
target remote 127.0.0.1:2333
define hook-stop
info reg
echo "\n\n\n\n\n"
x/10i $pc
end

b *0x123457EA
c
阅读更多...

MIT6.828 Lab1-Lab2

LEC 1

操作系统概述

管道本质上是一个内核的缓冲区,大多数情况下半开工,描述符可跨fork继承.

Lab 1: Booting a PC

PC Bootstrap

BIOS: 设置中断描述符表,初始化设备.加载bootloader

When the BIOS runs, it sets up an interrupt descriptor table and initializes various devices such as the VGA display. This is where the “Starting SeaBIOS” message you see in the QEMU window comes from.

阅读更多...

SGI STL学习笔记

所有内容均基于SGI STL.该项目仅作为本人学习C++STL库,数据结构与算法使用.

内存置配器

容器使用内存置配器来进行内存空间的分配和释放.
为了适配STL标准,在实际使用的分配器实现一个上层接口类simple_alloc.该类默认使用第二级分配器

第一级分配器 malloc_alloc_template

该分配器在内部直接使用operator new/delete进行内存管理

第二级分配器 default_alloc_template

该分配器以小型内存池进行内存管理,减轻分配内存时的cookie占用的内存.

阅读更多...

CSAPP--Notes

CSAPP阅读笔记
文章仅作为笔者复习参考,其中内容仅为笔者当前阶段学习CSAPP的理解.

第三章 程序的机器级表示

3.6.1条件码:

CF:进位标志.最近的操作使最高位产生了进位.
ZF:零标志.最近操作的结果为0.
SF:符号标志.最近的操作得到负数.
OF:溢出标志.最近的操作导致一个补码溢出
PF:奇偶标志位.最近操作的结果所有bit中1为偶数
AF:辅助进位标志位 运算过程中看最后四位,不论长度为多少 最后四位向前有进位或者借位,AF=1,否则AF=0
TF:调试标志位 当TF=1时,处理器每次只执行一条指令,即单步执行
IF:中断允许标志位 它用来控制8086是否允许接收外部中断请求 若IF=1,8086能响应外部中断,反之则屏蔽外部中断
DF:方向标志位 在串处理指令中,每次操作后,如果DF=0,si di递增,如果DF=1,si di递减;注意此处DF的值是由程序员进行设定的 cld命令是将DF设置为0,std命令是将DF设置为1
进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;
溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。
leaq指令不改变任何条件码.对于逻辑操作,进位标志和溢出标志会设置成0.对于移作,进位标志将设置为最后一个被移出的位,溢出标志设置为0.INC和DEC指令仅设出和零标志.

阅读更多...

Pwnhub 2023 3月公开赛 WP

Pwnhub 2023 3月公开赛 WP

sh_v1_1

glibc2.31堆题
一堆莫名其妙的全局变量运算,白看了半天最后发现一点用都没有.
恢复一下结构体

1
2
3
4
5
struct file{
long flag;
char filename[32];
char* content_ptr;
}

程序逻辑就是模拟的一个linux终端,输入命令进行相应处理.
漏洞在ln的时候可以备份指针造成uaf

阅读更多...
  • Copyrights © 2022-2024 翰青HanQi

请我喝杯咖啡吧~

支付宝
微信