linux配置指南
Linux 配置教程
一 输入法
首先你得打得出汉字是吧
推荐搜狗拼音,直接上官网下载deb包
12sudo apt purge ibus # 清除ibus框架sudo apt install fcitx # 安装fcitx
roboot之后可以直接在fcitx中进行设置输入法为搜狗
在gnome中可能对ibus的支持更完善一些,在ibus下可以选择ibis-pinyin
二 换源
使用默认国外的软件源会很慢,可以去各大高校的镜像站寻找镜像配置
12sudo apt updatesudo apt upgrade
换源后安装必要的工具
123sudo apt install git sudo apt install curlsudo apt install openssl
三 clash配置
link
其中提供了clash的安装和免费机场
不过建议大家有能力自己搭建
1. 终端走clash代理
修改你的shell的配置文件,bash为.bash_profile,zsh为.zshrc
⚠️ 其中的端口号根据你代理的情况设定
1234567891011function proxy ...
组合数
组合数
1.What’s this
CmnC_m^nCmn 表示从m个数字里面选出n个数有多少种方式
2. Some solutions
2.1 递推求解
Cmn=Cm−1n+Cm−1n−1C_m^n = C_{m-1}^n + C_{m-1}^{n-1}Cmn=Cm−1n+Cm−1n−1
需要注意的是在 n=1n=1n=1 时, Cm1=Cm−11+Cm−10C_m^1 = C_{m-1}^1 + C_{m-1}^0Cm1=Cm−11+Cm−10 ,对于选0个的我们要初始化为1
123456C[0][0] = 1;for (int i = 1;i <= 10;i++) { C[i][0] = 1; for (int j = 1; j <= i; j++) C[i][j] = C[i - 1][j - 1] + C[i - 1][j];}
⚠️ 上面的数据范围限制在 N<1e3N < 1e3N<1e3
2.2 费马小定理
往往存在一些毒瘤题目, 让你求解 1e61e61e6 级别的组 ...
折半查找
Meet In middle
220=10485762^{20} = 1048576220=1048576
240=10995116277762^{40}=1099511627776240=1099511627776
思路
在搜索中, 如果我们的数据规模是<=20的, 那么此时是可以暴搜的, 暴力yyds, 但是经常会遇上数据规模为40这种
此时我们可以将问题分开, 对1~20, 21 ~ 40 进行分别搜索, 将一边的结果进行排序,和另外一边的结果用二分进行匹配,得到可行的数目
example
折半查找模版
给出 Bobek 的预算和每场比赛的票价,试求:如果总票价不超过预算,他有多少种观赛方案。如果存在以其中一种方案观看某场比赛而另一种方案不观看,则认为这两种方案不同。
输入格式
第一行,两个正整数 NN 和 M(1 ≤ N ≤ 40,1 ≤ M ≤ 101810^{18}1018),表示比赛的个数和 Bobek 那家徒四壁的财产。
第二行,NN 个以空格分隔的正整数,均不超过 101610^{16}1016,代表每场比赛门票的价格。
输出格式
输出一行,表示方案 ...
k点最短路
K点最短路
在OI中,有一类经典的问题叫做经过K点的最短路径, 解题的思路大致是利用flyod和之前我们学习过的广义矩阵乘法, 矩阵快速幂
1. 分析
对于K点的最短路, 我们可以当作是一个传递闭包进行处理,k一定是可以被分解为是2的 kik_iki 次方的相加, 如果一个传递闭包的级数为k,另外一个的级数为p,那么将这两个相称得到的就是进行k+p次的闭包
我们可以将最短路同理为闭包, K级就意味着在k个点上的最短路径, k+p则是他们和的点数的最短路径, 对于这个闭包运算的实现, 我们可以使用广义矩阵乘法
2 代码
123456789101112131415161718192021222324252627282930313233343536#include <iostream>#define N 520using namespace std;int dp[N][N], vis[1001000];int n,t,s,e,cnt;struct matrix { int dis[N][N]; matrix operator*(const matri ...
objdump
liunx下反汇编
在linux下的反汇编我们主要是使用objdump,其实也可以在我们的gdb下面对我们需要的section进行反汇编
-f 显示文件头信息
-D 反汇编所有section (-d反汇编特定section)
-h 显示目标文件各个section的头部摘要信息
-x 显示所有可用的头信息,包括符号表、重定位入口。-x 等价于 -a -f -h -r -t 同时指定。
-i 显示对于 -b 或者 -m 选项可用的架构和目标格式列表。
-r 显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。
-R 显示文件的动态重定位入口,仅仅对于动态目标文件有意义,比如某些共享库。
-S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。
-t 显示文件的符号表入口。类似于nm -s提供的信息
查看机器的大小端
1objdump -i
进行反汇编
1objdump -d main.o
gdb.md
GDB 调试
0. pre work
在一些文章中看到需要在编译的时候加入-g的参数才能进行调试
加入gdb参数的编译指令如下
1gcc -g -o hello hello.c
0.1 check file
我们可以使用readelf对elf文件进行查看,使用grep我们可以抓取到我们想要的信息
123456>linux readelf -S hello|grep plt [11] .rela.plt RELA 0000000000000608 00000608 [13] .plt PROGBITS 0000000000001020 00001020 [14] .plt.got PROGBITS 0000000000001050 00001050 [15] .plt.sec PROGBITS 0000000000001060 00001060
编译产生可执行文件后对其进行调试
按道理说到这里我们已经可以看 ...
csapp
Data lab
鸽
Bomb lab
0. pre
the link
You can go to this website to download the self-study handout
In the folder, you can see three file, bomb, bomb.c README.md , the extra files are my works.
12345678── ans.txt├── bomb├── bomb.c├── bomb.md├── out.txt└── README0 directories, 6 files
在本次的实验中,你还需要一些前置知识,比如
gdb debug
objump
1. 概述
在该lab中,你需要去拆解六个“炸弹”,你将通过反汇编去找寻这六个炸弹的线索
A tip: 在原来的程序中一定存在着比较的语句
2. Start defuse
2.1 bomb one
首先我们使用gdb对程序进行调试,在phase_1的地方设置断点, 进入断点之后我们开始反汇编,在gdb窗口中使用disas对我们的sec ...