CSAPP bomblab 一个需要注意的地方是除了主函数以外的函数都不支持单步调试,需要加断点。否则即使用 step 也会直接运行到函数返回(通常会导致炸弹爆炸)。 phase 1 0x402400 中存放的就是目标字符串。 phase 2 记 %rsp 存放的地址为 0x0。 phase_2+14:检查 0x0 处存的值是否为 1。 phase_2+52:将 %rbx 指向 0x4 的位置,将 %rbp 指向 0x1 2024-02-17 system #CSAPP #汇编
CSAPP cachelab Part A 由于不关心具体的块内偏移,所以 cache 可以这样设计:作为一个二维数组,第一维代表组号,第二维代表组内的行号,存放标记位和上一次访问的时间。每次操作时,读取和存放是等价的,直接在对应组号内遍历所有标记位,看是否有对应上的。否则看有无空缺,或是替换掉某一行。修改和上面类似,只需要添加一次命中记数就可以了。 读入命令行参数是一个比较陌生的话题: 1234567891011121314 2024-02-17 system #CSAPP #cache #分块
CSAPP datalab bitXor 利用 x⊕y=(x&∼y)∣(∼x&y)x\oplus y=(x\&\sim y)|(\sim x\& y)x⊕y=(x&∼y)∣(∼x&y) 和 x∣y=∼(∼x&∼y)x|y=\sim(\sim x\&\sim y)x∣y=∼(∼x&∼y) 容易实现。 tmin TMIN=0x8000 0000。 isTma 2024-02-17 system #CSAPP #位运算
CSAPP e10.9 仔细考虑这条命令:linux> fstatcheck 3 < foo.txt 如果经过一点思考,可能会产生这样错误的结论:shell 打开 foo.txt 并分配了文件描述符 3。使用 fork 和 execve 创建了子进程 fstatcheck,它具有与 shell 相同的文件描述符表,即 3 同样引用 foo.txt。因此 fstatcheck 使用 Fstat 获取 foo.t 2024-02-17 system #CSAPP #shell
CSAPP e3.4 练习题3.4 题目中提到“当执行强制类型转换既涉及大小变化又涉及C语言中符号变化时,操作应该先改变大小”,我们通过一个例子来说明。 考虑下面这段代码 1234567#include <stdio.h>int main(){ char a=0xff; printf("%u",(unsigned)a); return 0;} 这里 2024-02-17 system #CSAPP #汇编
Codeforces Round 911 (Div. 2) https://codeforces.com/contest/1900 D. Small GCD 题意 定义 f(x,y,z)f(x,y,z)f(x,y,z) 为 x,y,zx,y,zx,y,z 中较小两数的 gcd\gcdgcd。给定数组 aaa ,求所有三元组的 fff 之和。 数据范围:3≤n≤8×104,1≤ai≤1053\leq n\leq 8\times10^4,1\leq a_i\ 2023-11-30 ACM #容斥
CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!) https://codeforces.com/contest/1896 D. Ones and Twos 题意 给定一个数组 aaa,只含有 1,21,21,2。每次询问有两种类型: “1 s” 查询是否有一个子数组的和为 sss。 “2 i v” 将 aia_iai 改为 vvv。 数据范围:1≤n,q≤1051\leq n,q\leq 10^51≤n,q≤105。 题解 注意到对于原数组 2023-11-29 ACM
Educational Codeforces Round 158 (Rated for Div. 2) https://codeforces.com/contest/1901 C. Add, Divide and Floor 题意 给定一个长度为 nnn 的数组 aaa,每次操作可以选择一个数 xxx,然后对所有的 aia_iai,令 ai←⌊ai+x2⌋a_i\leftarrow \lfloor\dfrac{a_i+x}{2}\rfloorai←⌊2ai+x⌋。求最小操作次数使得 aaa 2023-11-28 ACM #贪心
Codeforces Round 910 (Div. 2) https://codeforces.com/contest/1898 B. Milena and Admirer 题意 给定一个长度为 nnn 的数组 aaa。每次操作可以选择一个 aia_iai,并选择一个 xxx 满足 1≤x<ai1\leq x<a_i1≤x<ai。用 x,ai−xx,a_i-xx,ai−x 替换 aia_iai。求最小操作次数,使得 aaa 单调 2023-11-26 ACM #贪心
AtCoder Beginner Contest 219 https://atcoder.jp/contests/abc219 F - Cleaning Robot 题意 在一张网格图中,给定一个指令序列。问重复 kkk 次一共能访问到多少个不同的点。 数据范围:1≤∣s∣≤2×105,1≤k≤10121\leq |s|\leq 2\times10^5,1\leq k\leq 10^{12}1≤∣s∣≤2×105,1≤k≤1012。 题解 先模拟一遍序列 2023-11-23 ACM #根号分治