标志寄存器

滴水逆向三期-标志寄存器

1.PE结构
2.下断点
3.WIN32 API9
4.什么是函数调用
5.熟悉堆栈——画过堆栈图
6.call JCC 标志寄存器
断点小理解:程序跑到MessageBox的时候就停下来
一个函数刚开始执行的时候,这个栈顶存储的就是调用这个函数时候函数的返回地址
JE根本不管你们上面是什么,他只看标志寄存器,标志寄存器符合他的条件了就跳,不符合了就不跳
JE他如果发现这个zero flag控制是1的话他就跳否则他就不跳

在这里插入图片描述所有的JCC都是由标志寄存器控制的
鼠标的位置不是0吗,然后我们双击变成1
只要找到关键的点,不跳的改成跳就ok,叫爆破,找到关系跳转(有基础的!看那个滴水逆向三期的标志寄存器这期-。-由于我上面的知识点也不太熟悉,就无法很好解释啦!大家去自行理解啦!)

标志寄存器

在这里插入图片描述
标志寄存器32位的 CF PF AF ZF SF OF这几个位要背下来的(第几位)
1.进位标志寄存器(carry flag):如果运算结果的最高位产生了一个进位或者借位(比如两个数相加往前面加了一个值叫进位,同样两个数相减不够减需要管前面的数借个值叫借位)(在我们眼中是不存在什么进位和借位的

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用标志寄存器的汇编示例: ```assembly section .data a dw 10 ; 定义一个有符号16位整数a b dw 5 ; 定义一个有符号16位整数b section .text global _start _start: ; 将a与b相加 mov ax, [a] ; 将a加载到ax寄存器 add ax, [b] ; 将b加到ax寄存器上 jo overflow ; 如果有溢出,跳转到overflow标签 ; 如果没有溢出,将结果输出到标准输出 mov eax, 4 ; 写入系统调用 mov ebx, 1 ; 标准输出文件描述符 mov ecx, ax ; 结果存储在ecx寄存器中 mov edx, 2 ; 写入2个字节 int 0x80 ; 发起系统调用 ; 程序结束 mov eax, 1 ; 退出系统调用 xor ebx, ebx ; 返回状态码0 int 0x80 ; 发起系统调用 overflow: ; 处理溢出情况,将错误消息输出到标准错误 mov eax, 4 ; 写入系统调用 mov ebx, 2 ; 标准错误文件描述符 mov ecx, msg ; 错误消息的地址 mov edx, msg_len ; 错误消息的长度 int 0x80 ; 发起系统调用 ; 程序结束 mov eax, 1 ; 退出系统调用 mov ebx, 1 ; 返回状态码1 int 0x80 ; 发起系统调用 section .data msg db "Overflow occurred!", 0x0a ; 错误消息 msg_len equ $-msg ; 错误消息的长度 ``` 在上述示例中,使用了标志寄存器的溢出标志(Overflow Flag,OF)来检测加法操作是否溢出。如果发生溢出,程序将跳转到`overflow`标签处,输出错误消息到标准错误。如果没有溢出,则将结果输出到标准输出。 请注意,上述示例基于Linux平台的x86架构。在不同的操作系统和架构上,寄存器的使用和系统调用可能会有所不同。因此,在其他环境中使用时,可能需要进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值