python,汇编语言,算法
@TOC
计算机语言
python
字典 (内部由‘键’和‘值’组成,可包含列表)
字典.keys(),.values()函数来遍历字典
集合与字典都用花括号{ }定义,但集合没有‘值’
while循环—> while 某一条件:
了解了一些爬虫知识
汇编语言
这周主要学了汇编的前五章
计算机中用二进制来表示指令和数据,指令和数据本质上无任何区别
CPU要进行数据读写需要3种信息(地址信息,控制信息,数据信息)
由于8086操作系统有20根地址总线(寻址能力最大为2^20^,5位十六进制数最大为FFFFFH)
而只有16根数据总线,表示数字最多为2^16^,4位十六进制数
所以用两个数据表示物理地址,规定有一个段寄存器存段地址,一个寄存器存偏移地址指向的物理地址 = 段地址X16(十六进制左移一位)+偏移地址(基础地址)
cs,ds,es,ss为段寄存器,存储段地址
ip,sp为寄存器,存储偏移地址cs:ip—>当前将要执行的指令(机器码作指令用)
ds:[某寄存器或偏移地址]—>内存中数据(机器码作数据用)
ss:sp—>栈顶(sp=栈中最高空位地址+1)(pop后的位置当空位置)栈的操作
push———sp-2
pop ———sp+2
- 由于当栈空时sp位于栈外,所以c++<stack>函数.top()不能在栈空时使用
- 由于偏移地址最大为FFFFH,所以栈最大为64KB,并且此时sp为0000H,并且栈满时也为0000H
- 程序加载到内存中时
PSP区(数据区):SA :0
程序区(指令区):SA+10H :0 - loop循环指令 只要cx不为0,jmp到s所在地址
1
2
3mov cx,10H
s: mov ax,bx
loop s //s总共执行16次其中loop循环了15次debug的基础指令
-a 用来写入汇编文本
-r 用来查看寄存器内容或改变寄存器内容
-t 单步跟踪
-u 查看cs:ip指向的汇编命令及机器码
-e 改写内存中的数据
-g 地址 在exe运行时直接运行到指定地址
-p 自动执行循环直到结束
-d 查看内存中的数据
- eg:
- d ds:[0] [10] ———————————查看从ds:0到ds:10的数据
- d 段地址:偏移地址a 偏移地址b———查看从ds:[a]到ds:[b]的数据
不输入b的话会自动显示后面的内存数据汇编程序exe的形成
- 编译—->形成.obj文件
masm 1.asm; - 连接—->形成.exe文件
link 1.asm;
- 注意masm的使用需要挂载
mount c: d:/masm(ASM)
CTF
这周主要学了汇编,重新装了系统,虚拟机,学会了科学上网,做题较少
还有一个脱壳原理
- 前缀和(画图理解)—————————–s[]为前缀和数组
一维:a[i]=s[i]-s[i-1]
二维:s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j] - 差分 (可以看作前缀和的逆过程)——d[]为差分数组
一维:d[i]=a[i]-a[i-1]
二维:d[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1] - 二分 不好描述。。。
- dfs近似等价于递归
加上回溯后可以遍历所有可能情况(有时不进行回溯实质上是剪枝操作,将回溯的情况直接剪掉,节约时间)
-------------本文结束感谢您的阅读-------------