2020湖湘杯复盘(大概)
2020湖湘杯复盘(大概)还是乐哥🐂🍺啊,差一点ak,甚至拿到一血,👴就只能做做签到异或,看看神仙打架🏄♂️🤸♂️🤺
easyre这题啊,确实简单,但是👴汇编忘了不说,比赛中知道思路,但还是傻傻的不知道怎么做。赛后乐哥讲的OD中可以用ctrl+G跳到指定地址查看数据,👴才明白,下面来看题
拿到一个easyre.exe
用exeinfope分析发现没🐚
先来运行看看
12Input your flag: 12344221331Wrong length
很经典呐,对比字符串的题
这种题只要找到对比字符和算法就可以解出flag(👴还是太🥗了)
这题用OD调试
🔍一下关键字断点调试,发现了运算方法,同时知道字符串长度为24
1shl eax,0x3 ;逻辑左移指令 相当于<< 这里左移了3位
1sar edx,0x5 ;逻辑右移指令 相当于>> 这里右移了5位
1or eax,edx ;将这两个字符进行或运算
1xor eax,dword ptr ss:[ebp-0xC] ;将刚刚的结果异或当前的字符数组下 ...
python学习python的基础语法
基本语法元素12345678910#TemConvert.pyTempStr = input("请输入带有符号的温度值:")if TempStr[-1] in ['F','f']: C = (eval(TempStr[0:-1]) - 32)/1.8 print("转换后的温度是{:.2f}C".format(C))elif TempStr[-1] in ['C','c']: F = 1.8*eval(TempStr[0:-1])+32 print("转换后的温度是{:.2f}F".format(F))else: print("输入格式错误")
程序的格式框架缩进一行代码开始前的空白区域,表达程序的格式框架
单程缩进 多层缩进
严格明确缩进是语法的一部分,缩进不正确程序运行错误
所属关系表达代码间包含和层次关系的唯一 手段
长度一致程 ...
hello world
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
汇编学习笔记第一次
汇编学习笔记第一次感谢乐哥能花费时间和精力来带带弟弟,弟弟一定努力
借着这次机会,刚好复习复习汇编的知识,将其熟练。
12345678910hint:1. 编译命令:gcc -z execstack -z norelro -no-pie -fno-stack-protector -o program program.c2. 反编译命令:objdump -d -m i386:x86-64:intel programgcc -z execstack -z norelro -no-pie -fno-stack-protector -o test test.cobjdump -d -m i386:x86-64:intel test或者是gcc -g -c test.cobjdump -d -M intel -S test.o
先巩固下基础知识16位寄存器
指令
描述
AH累加器(Accumulator) AL
可用于乘、除、输入/输出等操作(在乘除指令中指定用来存放操作数)
BH基地址寄存器(Base Register) BL
在计算存储器地址时,可作为基址寄 ...
汇编第六章
包含多个段的程序6.1在代码段中使用数据
assume cs.codesgcodesg segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hmov bx,0mov ax,0mov cx,8s: add ax,cs:[bx]add bx,2loop smov ax,4c00hint 21hcodesg endsend
dw的含义是定义字型数据 define word(数据之间用逗号分隔)db的含义是定义单字节数据define byte上述8个字型数据存放在CS代码段里因为用dw定义的数据处于代码段的最开始,所以偏移地址为0,这8个数据就在代码段的偏移0、2、4、6、8、A、C、E处。如果需要让程序在编译后可以存系统中直接运行,我们需要在源程序中指明程序的入口
assume cs.codesgcodesg segmentdw 0123h,0456h,0789h,0abch,Odefh,0fedh,0cbah,0987hstart: mov bx,0mov ax,Omov cx,8s: add ax,cs:[bx]add bx ...
汇编第五章
[BX]和loop指令5.1 [bx][bx]
assume cs:kk
kk segment
nn: mov ax,2000H mov ds,ax mov al,[0]//等于mov al,0 mov bl,[1]//等于mov bl,1 mov cl,[3] mov dl,[4]
mov ax,4c00Hint 21H
kk endsend nn用编辑器和debug写的命令不同[bx]表示一个内存单元,它的偏移地址在bx中,比如不能mov ax,[0]只能mov bx,0mov ax,[bx]mov al,[bx]
loop 循环描述性符号”()”(ax)=0010H2000:1000处的内容为0010H(21000H)=0010H对于mov ax,[2]的功能(ax)=((ds)*16+2)对于mov [3],ax的功能((ds)*16+2)=(ax)对于add ax,2的功能(ax)=(ax)+2对于add ax,bx的功能(ax)=(ax)+(bx)对于push ax的功能(sp)=(sp)-2((ss)*16+(s ...
汇编第四章
4.1一个汇编语言程序(源程序)从写出到执行的过程编写->编译连接->执行(2)使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件;再用连接程序(LINK.EXE)对目标文件进行连接,生成可在操作系统中直接运行的课执行文件。可执行文件中包含两部分程序和数据相关信息(程序大小)(3)执行可执行文件中的程序操作系统依照可执行文件中的描述信息,将可执行文件中的机器码和数据叫载入内存,并进行相关的初始化(比如:设置CS:IP指向第一条要执行的指令),然后由CPU执行程序。
4.2 源程序INT 21H是DOS的中断调用https://blog.csdn.net/chinazeze/article/details/1735621
assume cs:codesg
codesg segment start: mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00h int 21h
codesg endsend s ...
汇编第三章
数据都不能和段地址发生直接替换,要借用寄存器Debug的T命令在执行修改寄存器SS的指令时,下一条指令也要紧接着被执行3.1 内存中字的存储存放方式在0地址处开始存放20000(4E20H)0 | 20H1 | 4EH2 | 12H3 | 00H4 |5 |上低下高(字型要考虑两个字节)(字节型数要考虑1个字节)0地址单元中存放的字节型数据为 20H0地址字单元中存放的字型数据为 20000(4E20H)2地址字单元中存放的字节型数据为12H2地址字单元中存放的字型数据为0012H1地址字单元中存放的字型数据为 124EH
3.2 DS和[address]8086CPU中有一个DS寄存器,通常用来存放要访问的数据的段地址将数据直接送入寄存器 mov ax,2将一个寄存器中的内容送入另一个寄存器中 mov bx,ax还可以将一个内存单元中的内容送入一个寄存器。mov a1,[0]mov 寄存器名,内存单元地址[…]表示一个内存单元,[…]中的0表示内存单元的偏移地址执行指令时,8086CPU自动取DS中的数据为内存单元的段地址不能mov ds,1000H只能 ...
debug命令
Debug命令
参数
功能
A
[地址]
输入汇编指令
C
[范围] 起始地址
对由“范围”指定的区域与“起始地址”指定的同大小区域进行比较,显示不相同的单元
D
[范围]
显示指定范围内的内存单元内容
E
地址 字节值表
用值表中的值替换从“地址”开始的内存单元内容
F
范围 字节值表
用指定的字节值表来填充内存区域
G
[=起始地址][断点地址]
从起点(或当前地点)开始执行,到终点结束
H
数值1 数值2
显示二个十六进制数值之和、差
I
端口地址
从端口输入
L
[地址 [驱动器号 扇区 扇区数]]
从磁盘读
M
范围 地址
把“范围”内的字节值传送到从“地址”开始的单元
N
文件标识符 [文件标识符…]
指定文件名,为读/写文件做准备
O
端口地址 字节值
向端口输出
P
[=地址] [指令数]
按执行过程,但不进入子程序调用或软中断
Q
退出DEBUG,不保存正在调试的文件
R
[寄存器名]
显示和修改寄存器内容
S
范围 字节值表
在内存区域内搜索指定的字节值表。如果找到,显示起始地址 ...
汇编第二章2
2.8段的概念内存并没有分段,短的划分来自于CPU,由于8086CPU用“段地址16+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。看需要我们可以将若干地址连续的内存单元看作一个段(1)段地址16必然是16的倍数,所以一个段的起始地址也一定是16的倍数(2)偏移地址为16位,16位地址的寻址能力为64k,所以一个段的长度最大为64k寻址范围:偏移地址16位,变化范围为0FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H1FFFFH数据在21F60H内存单元中,对于8086PC机的两种描述:1.数据存在内存2000:1F60单元中2.数据存在内存的2000段中的1F60H单元中
2.9段寄存器段寄存器就是提供段地址的8086CPU有4个段寄存器:CS,DS,SS,ESCS 代码段地址寄存器DS 数据段SS 堆栈段ES 附加段
当8086CPU要访问内存时,由这4个寄存器提供内存单元的段地址IP为指令指针寄存器(与上网的不同)CS和IP时8086CPU中最关键的寄存器,它们指 ...