CTF-汇编语言归纳

内容更新是由低向高递增的

内容如下:
xor rax, rax #xor rax,rax是对rax的清零运算操作

条件跳转(一般配合cmp使用)

下表展示了基于零标志位、进位标志位、溢出标志位、奇偶标志位和符号标志位的跳转。
在这里插入图片描述
在这里插入图片描述
此表为1) 相等性的比较

  1. 无符号数比较
    基于无符号数比较的跳转如下表所示。操作数的名称反映了表达式里操作数的顺序(比如 leftOp < rightOp)。下表里的跳转仅在比较无符号数值时才有意义。有符号操作数使用不同的跳转指令。
    在这里插入图片描述
  2. 有符号数比较
    下表列岀了基于有符号数比较的跳转。下面的指令序列展示了两个有符号数值的比较:
    在这里插入图片描述

一、运算结果标志位

1、进位标志CF(Carry Flag)
进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

2、奇偶标志PF(Parity Flag)
奇偶标志PF用于反映运算结果里“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程里,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

3、辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。
对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。

4、零标志ZF(Zero Flag)
零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

5、符号标志SF(Sign Flag)
符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统里,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

6、溢出标志OF(Overflow Flag)
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

二、状态控制标志位

状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能令之发生改变。
1、追踪标志TF(Trap Flag)
当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步停断请求。这类方式主要用于程序的调试。
指令系统里没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。

2、停断允许标志IF(Interrupt-enable Flag)

3、方向标志DF(Direction Flag)
方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
在串处理指令李控制信息的方向
标志位操作指令
标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令。
1、进位CF操作指令
清进位指令CLC(Clear Carry Flag):CF←0
置进位指令STC(Set Carry Flag):CF←1
进位取反指令CMC(Complement Carry Flag):CF←not CF

2、方向位DF操作指令
清方向位指令CLD(Clear Direction Flag):DF←0
置方向位指令STD(Set Direction Flag):DF←1

3、停断允许位IF操作指令
清停断允许位指令CLI(Clear Interrupt Flag):IF←0
其功能是不允许可屏蔽的外部停断来停断其后程序段的执行。
置停断允许位指令STI(Set Interrupt Flag):IF←1
其功能是恢复可屏蔽的外部停断的停断响应功能,通常是与CLI成对使用的。

4、取标志位操作指令
LAHF(Load AH from Flags):AH←Flags的低8位
SAHF(Store AH in Flags):Flags的低8位←AH

5、标志位堆栈操作指令
PUSHF/PUSHFD(Push Flags onto Stack):把16位/32位标志寄存器进栈;
POPF/POPFD(Pop Flags off Stack):把16位/32位标志寄存器出栈;

######################################################################
######################################################################
pushad: 将所有的32位通用寄存器压入堆栈
pusha:将所有的16位通用寄存器压入堆栈
pushfd:然后将32位标志寄存器EFLAGS压入堆栈
pushf::将的16位标志寄存器EFLAGS压入堆栈
popad:将所有的32位通用寄存器取出堆栈
popa:将所有的16位通用寄存器取出堆栈
popfd:将32位标志寄存器EFLAGS取出堆栈
popf:将16位标志寄存器EFLAGS取出堆栈
######################################################################
######################################################################
cpuid:获取CPU信息
######################################################################
######################################################################
SBB(带借位减法)指令从目的操作数里减去源操作数和进位标志位的值。
下面的示例代码用 32 位操作数实现 64 位减法,EDX:EAX 的值为 0000 0007 0000 0001h,从该值里减去 2。低 32 位先执行减法,并设置进位标志位,然后高 32 位再进行包括进位标志位的减法:
在这里插入图片描述
SHL是逻辑左移指令,SHR是逻辑右移指令
SAL是算术左移指令(shift arithmetic right),SAR是算术右移指令(shift arithmetic right)
######################################################################
######################################################################
leave指令将EBP寄存器的内容复制到ESP寄存器里
以释放分配给该过程的所有堆栈空间。然后,它从堆栈恢复EBP寄存器的旧值。
在16位汇编下相当于:
mov sp,bp
pop bp

在32位汇编下相当于:
mov esp,ebp;//将ebp指向(ebp内部应当保存一个地址,所谓指向即这个地址对应的空间)的值赋给esp
pop ebp
#################################################################################################################
Lea eax,dword ptr ss:[esp+0x2c]
Cmp eax,dword ptr ss:[ebp-0x30]
ptr – pointer (既指针)得缩写。
汇编里面 ptr 是规定的字(既保留字),是用来临时指定类型的。
(可以理解为,ptr是临时的类型转换,相当于C语言里的强制类型转换)

汇编语言CS,DS,SS还有一个ES定义如下:
CS(Code Segment):代码段寄存器;
DS(Data Segment):数据段寄存器;
SS(Stack Segment):堆栈段寄存器;
ES(Extra Segment):附加段寄存器。
当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器 CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。
一、寄存器位置不同:
1、CS:代码段寄存器;
2、DS:数据段寄存器;
3、SS:堆栈段寄存器。
二、存放位置不同:
1、代码段寄存器CS:存放当前正在运行的程序代码所在段的段基值。
2、数据段寄存器DS:存放数据段的段基值。
3、堆栈段寄存器SS:存放堆栈段的段基值。
三、段地址不同:
1、cs代码段地址,联合ip作为cpu指向当前正在执行的那条指令所使用,不能随意修改它。
2、ss堆栈度段地址问联合sp定义一个答堆栈,一旦你确定了堆栈地址,ss也不能随便改变了。
3、ds数据段地址定义一个数据段。
#################################################################################################################
byte:8位无符号整数,b表字节
sbyte:8位有符号整数,s表有符号
word:16位无符号整数
sword:16位有符号整数
dword:32位无符号整数,d表双字
sdword:32位有符号整数,sd表有符号双字
qword:64位整数,q表四字
tbyte:80位(10字节)整数,t表10字节
伪指令
DB:8位整数
DW:16位整数
DD:32位整数或实数
DQ:64位整数或实数
DT:定义80位(10字节)整数
#################################################################################################################
入栈和出栈的汇编指令 push、pop 地址从高到低
PUSH(Push onto the stack)进栈
POP(Pop from the stack)出栈 有push就就要有pop
PUSH 指令首先减少 ESP 的值,再将源操作数复制到堆栈。操作数是 16 位的,则 ESP 减 2;操作数是 32 位的,则 ESP 减 4;操作数是 64 位的,则 ESP 减 8。
POP 指令首先把 ESP 指向的堆栈元素内容复制到一个 16 位或 32 位目的操作数里,再增加 ESP 的值。如果操作数是 16 位的,ESP 加 2,如果操作数是 32 位的,ESP 加 4,如果操作数是 64 位的,ESP 加 8。

标志寄存器传送指令
PUSHF(push the flags) 标志进栈
POPF(pop the flags) 标志出栈

call:过程调用,调用一个过程(即函数或者子程序)
ret:过程返回,返回指令,RET(从过程返回)指令将处理器转到该过程被调用的程序点上。call指令将其返回地址压入堆栈,再把被调用过程的地址复制到指令寄存器。当过程准备返回时,它的ret指令从堆栈把返回地址弹回到指令寄存器。
#################################################################################################################
算术指令:
mul(multiply) 乘法指令,两个数值相乘
div 除法指令
divr 除法指令
imul eax,ebx,5 imul指令有3个操作数,第1个为目的操作数,第2个和第3个为进行乘法的源操作数
add:两个数值相加 add ax,8 将寄存器AX里的数值加上8
sub(subtraction):从一个数值减去另一个数值 sub ax,18将寄存器AX里的数值减去18
subr:减法指令
xor:异或
OR :在两个操作数的对应位之间进行(按位)逻辑或(OR)操作,并将结果存放在目标操作数里:OR destination, source
and是按位“与”操作,在两个操作数的对应位之间进行(按位)逻辑与(and)操作,并将结果存放在目标操作数里:AND destination,source。当且仅当两操作数对应位都为“1”时结果的相应位为“1”,否则结果相应位为“0”。例:1101B AND 0100B = 0100B
inc(increase)指令表示寄存器或者内存操作数加1
dec(decrease)指令表示寄存器或者内存操作数减1
neg(negate反面,对立面,非)指令通过把操作数转换为其二进制补码,将操作数的符号取反

cmp(compare):比较指令,进行比较两个操作数的大小,cmp执行从目的操作数里减去源操作数的隐含减法操作,并且不修改任何操作数:CMP destination,source
标志位
当实际的减法发生时,CMP 指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。
如果比较的是两个无符号数,则零标志位和进位标志位表示的两个操作数之间的关系如右表所示:
在这里插入图片描述
如果比较的是两个有符号数,则符号标志位、零标志位和溢出标志位表示的两个操作数之间的关系如右表所示:
在这里插入图片描述
mov(move):传送(分配)数值 mov ax,18 将18送入寄存器AX
mov ax ,bx 将寄存器BX数据送入寄存器AX
当指令有多个操作数,第一个操作数为目的操作数,第2个操作数为源操作数
movzx指令(进行全零并传送)将源操作数复制到目的操作数,并把目的操作数0扩展到16位或者32位。这条指令只用于无符号正数
movsx指令(进行符号扩展并传送)将源操作数内容复制到目的操作数,并把目的操作数符号0扩展到16位或者32位。这条指令只用于有符号正数

loop:循环指令,正式成为按照ECX计数器循环,将程序块重复特定次数。ECX自动成为计数器,每循环一次计数值减1

xchg(交换数据,exchange)指令交换两个操作数内容

lea(Load effective address)取有效地址,也就是取偏移地址。

nop 空指令
############################################################################################################################################
需要注意的是32位是由栈来传参的,64位前六个参数由寄存器RDI、RSI、RDX、RCX、R8、R9依次传参,超过第六个的参数由栈来传参
8位通用寄存器:AH,AL,BH,BL,CH,CL,DH,DL
16位通用寄存器:AX,BX,CX,DX,SI,DI,SP,BP
32位通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP

32位 16位 8位(高) 8位(低)
EAX AX AH AL
EBX BX BH BL
ECX CX CH CL
EDX DX DH DL

其他通用寄存器只能利用32或者16位名称为访问:
32位 16位
ESI SI
EDI DI
EBP BP
ESP SP

寄存器
EAX:累加(Accumulator)寄存器,常用于函数返回值
EBX:基址(Base)寄存器,以它为基址访问内存
ECX:计数器(Counter)寄存器,常用作字符串和循环操作里的计数器
EDX:数据(Data)寄存器,常用于乘除法和I/O指针
ESI:源变址寄存器
EDI:目的变址寄存器
ESP:堆栈(Stack)指针(Pointer)寄存器,指向堆栈顶部
EBP:基址(Base)指针(Pointer)寄存器,指向当前堆栈底部
EIP:指令寄存器,指向下一条指令的地址

基本程序执行寄存器
寄存器为直接位于CPU内的高速存储位置
8个通用寄存器,6个段寄存器,一个处理器状态寄存器(EFLAGS),和一个指令指针寄存器(EIP)。(指令寄存器:Instruction pointer register)
通用寄存器:主要用于算术运算和数据传输。EAX寄存器的低16位在利用过程可用AX表示,AX寄存器的高8位被称为AH,低8位被称为AL。同样的关系也存在于EAX,EBX,ECX,EDX寄存器

乘除指令默认利用EAX。它常常被称为扩展累加器(extended accumulator)寄存器
CPU默认利用ECX为循环计数器(circulate)

ESP用于寻址堆栈(一类系统内存结构)数据。它极少用于一般算术运算和数据传输,通常被称为扩展堆栈指针(extended stack pointer)寄存器

ESI和EDI用于高速存储器传输指令,有时也被称为扩展源地址寄存器(extended source index)和扩展目的地址寄存器(extended destination index)

高级语言通过EBP来引用堆栈里的函数参数和局部变量。除了高级编程,它不用于一般算术运算和数据传输。它常常被称为扩展帧指针(extended frame pointer)寄存器

EBP和ESP作为指针的寄存器,常用于椎栈操作。通常,它被高级语言编译器用以建造‘堆栈帧’来保存函数或过程的局部变量,EBP指向栈低,ESP指向栈顶。

指令指针:指令指针(EIP)寄存器里包含下一条将要执行指令的地址。某些机器指令能控制EIP,令程序分支转向到一个新位置。

EFLAGS寄存器:EFLAGS(或者Flags)寄存器包含了独立的二进制位,用于控制CPU的操作,或者是反应一些CPU操作的结果。有些指令可以测试和控制这些单独的处理器标志位。
32位标志寄存器 EFLAGS
用于标识当前的一些状态
CF:进位标志
OF:溢出标志
SF:符号标志
ZF:零标志
AC:辅助进位标志
PF:奇偶标志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cloud一分钟 |谷歌总裁李佳离职;三星将为5G网络投220亿美元;人人网6000万美元贱卖...

Hello&#xff0c;everyone&#xff1a;11月16日早&#xff0c;星期五CSDN一分钟新闻时间&#xff1a;谷歌总裁李佳离职&#xff0c;未来投入AI与医疗领域 谷歌折损一员大将&#xff0c;不知作何感想。 三星将为5G网络投220亿美…

OD(Ollydbg)简介

ollydbg简介&#xff1a; Ollydbg 通常称作OD&#xff0c;是反汇编工作的常用工具&#xff0c;OD附带了200脱壳脚本和各类插件&#xff0c;功能非常强大&#xff0c;可以过SE&#xff0c;VMP3.0&#xff0c;深受逆向圈内人士的喜爱 OD&#xff0c;是一个反汇编工具&#xff0c;…

CTF-Bugku逆向题Android方法归纳

1.signin题目: reverse() 功能&#xff1a;反转数组里的元素的顺序 语法&#xff1a;arrayobject.reverse.() 这类方法会改变原来的数组&#xff0c;不可逆转 tostring() 功能&#xff1a;将各类进制的数字转化为字符串 语法&#xff1a;number.toString(radix)&#xff08…

八折进行中 | 暌违一载,2018 中国大数据技术大会(BDTC)首轮讲师阵容震撼来袭!...

暌违一载&#xff0c;今又相约。作为年度技术趋势与行业应用的风向标&#xff0c;2018 中国大数据技术大会&#xff08;BDTC 2018&#xff09;携主题“大数据新应用”再度强势来袭&#xff0c;稳踏技术时代浪潮&#xff0c;势将引爆今冬技术圈。2018 年12 月 6-8 日&#xff0c…

BugkuCTF-WEB题web16备份是个

知识点 ini_set — 为一个配置选项设置值 PHP ini_set用来设置php.ini的值&#xff0c;在函数执行的时候生效&#xff0c;脚本结束后&#xff0c;设置失效。无需打开php.ini文件&#xff0c;就能修改配置&#xff0c;对于虚拟空间来说&#xff0c;很方便 strstr — 查找字符串…

中国云计算的十年江湖

本文经授权转自公众号企服行业头条&#xff08;ID&#xff1a;wwwqifu&#xff09;有云的地方&#xff0c;就有江湖。有江湖的地方&#xff0c;就免不了战乱纷争。盘古开天地前&#xff0c;宇宙混沌一片。云计算在国内诞生之际也是如此。没有先例&#xff0c;没有规矩。一切都从…

BugkuCTF-WEB题速度要快

此题小结&#xff1a; 用python脚本获取网页内容以及post数据 主要函数: s requests.session() url’’ return s.get(url). # 可以获取header等信息 data{} 最后传值:s.post(datadata) 解题流程 打开网页&#xff0c;只看到一句话&#xff1a;我感觉你得快点!!! F12查看源…

BugkuCTF-WEB题秋名山车

打开网页&#xff0c;题目让我们计算车速&#xff0c;限时2s&#xff0c;并且通过POST方式传递结果 再刷新几次&#xff0c;显示&#xff1a; 手动计算并传值一定会超过2s的时间限制&#xff0c;因此我们编写python脚本实现(参考车速脚本.py) 编写python脚本并运行&#xff0…

想在“双十一”做“爆款”?你的数据库存能支撑吗?

火热的“双十一”剁手节刚刚过去&#xff0c;阿里巴巴、京东们继续往年的辉煌&#xff0c;有趣的是&#xff0c;线下传统零售百货们今年也不甘寂寞&#xff0c;诸如北京的新世界百货、上海和杭州的银泰百货等大商场也适时推出各种活动&#xff0c;赚了个盆满钵满。有些消费者今…

BugkuCTF-WEB题需要管理员

提示&#xff1a;好像需要管理员 御剑扫描一下后台&#xff0c;发现robots.txt&#xff0c;访问 提示/resusl.php&#xff0c;继续访问&#xff0c;发现要传入一个参数x&#xff0c;并且x的值是要等于password&#xff0c;采用burp爆破 得到密码是admin,其实题目好像需要管…

Cloud一分钟 |小米与美图战略合作;新东方在线通过港交所上市聆讯;工信部审批首个“.cloud”顶级域名...

Hello&#xff0c;everyone&#xff1a;11月20日早&#xff0c;星期二CSDN一分钟新闻时间&#xff1a;小米与美图战略合作&#xff0c;将获得美图手机品牌和影像技术等全球独家授权 小米要收购美图的节奏&#xff1f; …

BugkuCTF-WEB题file_get_contents

知识点 empty() 函数用于检查一个变量是否为空。empty() 判断一个变量是否被认为是空的。当一个变量并不存在&#xff0c;或者它的值等同于 FALSE&#xff0c;那么它会被认为不存在。如果变量不存在的话&#xff0c;empty()并不会产生警告。 extract()函数从数组里将变量导入…

盛会再临,2018 中国大数据技术大会(BDTC)首曝日程及议题

满目皆干货&#xff0c;俯仰尽拾珠。作为年度技术趋势与行业应用的风向标&#xff0c;连续成功举办十一年的中国大数据技术大会&#xff08;BDTC&#xff09;携主题“大数据新应用”再度强势来袭&#xff0c;稳踏技术时代浪潮&#xff0c;势将引爆今冬技术圈数据&#xff0c;让…

BugkuCTF-WEB题程序员本地网站

在BurpSuite里添加X-Forwarded-For: 127.0.0.1

云计算的“傲慢”与“偏见”

还记得身高一米六的男生终于扬眉吐气&#xff0c;却又被知识狠狠碾压的那一次相亲节目现场吗&#xff1f;美女嘉宾的择偶标准明晃晃的写着“身高不能低于158公分&#xff0c;喜欢懂得云计算。”将“懂得云计算”排在择偶标准的第一位&#xff0c;究竟是什么操作&#xff1f;通俗…

BugkuCTF-WEB题MD5

解题流程 打开页面&#xff1a; 根据提示&#xff1a;md5 collision 找一个以0e开头的md5值 0e开头MD5值小结 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e…

Cloud一分钟 |小米瞄上电纸书市场;员工《卫报》开专栏控诉亚马逊;拼多多Q3财报:总收入33.724亿元...

Hello&#xff0c;everyone&#xff1a;11月22日早&#xff0c;星期四CSDN一分钟新闻时间&#xff1a;重庆建成首个5G连续覆盖试验区:覆盖面积2.4平方公里 5G远程驾驶、5G无人机、虚拟现实等多项5G应用同时亮相&#xff0c;标志着重庆5G网络在商用化发展之路上又前进了一步。 …

只了解View的事件分发是不够的,来看下输入系统对事件的处理

1.IMS的启动过程IMS的创建在SystemServer的startOtherServices方法中&#xff0c;不了解请查看技术争鸣&#xff01;七大主题报告&#xff0c;四大技术专题&#xff0c;AI开发者大会首日议程全回顾AR热度不在? NO! 三星开发者大会将聚焦AR人工智能进行时&#xff1a;人类的未来…

BugkuCTF-WEB题你从哪里来

知识点 Referer的作用为告诉服务器请求是从哪里来的 这道题考察的是HTTP header里的Referer字段&#xff0c;Referer是HTTP请求头信息里面的一个常见字段&#xff0c;它提供了访问来源的信息。比如说&#xff0c;在某网站上看到一个广告并点了进去&#xff0c;那么我就可能会在…

BugkuCTF-WEB题cookie欺骗

知识点 isset&#xff1a; 检测变量是否设置&#xff0c;并且不是 NULL $_GET&#xff1a;收集来自 method“get” 的表单里的值 intval() 函数用于获取变量的整数值。 in_array() 函数搜索数组里是否存在指定的值。 举例&#xff1a; <?php $am array("Bill"…