吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9082|回复: 48
上一主题 下一主题
收起左侧

[调试逆向] 逆向基础笔记二 数据宽度和逻辑运算

[复制链接]
跳转到指定楼层
楼主
lyl610abc 发表于 2021-2-27 23:04 回帖奖励
本帖最后由 lyl610abc 于 2021-3-12 16:36 编辑

继续更新个人的学习笔记,
其它笔记传送门
逆向基础笔记一 进制篇
逆向基础笔记三 通用寄存器和内存读写
逆向基础笔记四 堆栈篇
逆向基础笔记五 标志寄存器
逆向基础笔记六 汇编跳转和比较指令
逆向基础笔记七 堆栈图(重点)
逆向基础笔记八 反汇编分析C语言
逆向基础笔记九 C语言内联汇编和调用协定
逆向基础笔记十 汇编寻找C程序入口
逆向基础笔记十一 汇编C语言基本类型
逆向基础笔记十二 汇编 全局和局部 变量
逆向基础笔记十三 汇编C语言类型转换
逆向基础笔记十四 汇编嵌套if else
逆向基础笔记十五 汇编比较三种循环
逆向基础笔记十六 汇编一维数组
逆向基础笔记十七 汇编二维数组 位移 乘法
逆向基础笔记十八 汇编 结构体和内存对齐
逆向基础笔记十九 汇编switch比较if else
逆向基础笔记二十 汇编 指针(一)
逆向基础笔记二十一 汇编 指针(二)
逆向基础笔记二十二 汇编 指针(三)
逆向基础笔记二十三 汇编 指针(四)
逆向基础笔记二十四 汇编 指针(五) 系列完结

数据宽度

计算机数据

数学上的数字是没有大小限制的,可以无限大。但在计算机中,由于硬件的制约,数据是有长度限制的,超过数据宽度的数据会被丢弃

同一个数据,表示无符号数和有符号数则其含义不同

  • 无符号数:正数
  • 有符号数:正数、负数

例:

当数据宽度为4时,即数据只能存储4位2进制位0000~1111

无符号数:

数据 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F
二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

有符号数:

正数:

数据 0 1 2 3 4 5 6 7
十六进制 0 1 2 3 4 5 6 7
二进制 0 0001 0010 0011 0100 0101 0110 0111

负数:

数据 -1 -2 -3 -4 -5 -6 -7 -8
十六进制 F E D C B A 9 8
二进制 1111 1110 1101 1100 1011 1010 1001 1000

可以发现当数据为1011,把数据看作无符号数时,数据表示为B

把数据看作有符号数时,数据表示为-5

无符号数的表示范围为0~2^4-1即0~15\\ 有符号数的表示范围为-2^3~2^3-1即-8~7

几个重要的计量单位

BYTE                    字节          8BIT

WORD                 字                 16BIT 2字节

DWORD          双字          32BIT 4字节

逻辑运算

或运算(or |)

只要有一个为1则结果为1

与运算(and &)

两个都是1结果才为1

异或运算(xor ^)

相同为0 不同为1

非运算(not !)

取反 1是0 0是1

CPU如何计算2+3?

X:0010

Y:0011

先异或

image-20210227225741221

R:0001

异或完以后要判断是否运算结束

将两个数进行与运算 然后左移一位

image-20210227225805371

0010<<1 ==0100

如果结果全为0,结果则为我们所要的结果

否则,把上面异或得到的值赋值到X

把左移后的结果赋值到Y

X:0001

Y:0100

重复操作

先异或

image-20210227225832210

R:0101

再将两个数进行与运算 然后左移一位

image-20210227225849434

左移完结果全是0,结果则为我们所要的

最终结果为0101=5

CPU如何计算2-3?

X:0010

Y:1101

先异或

image-20210227225905554

R:1111

将两个数进行与运算 然后左移一位

image-20210227225917490

0000<<1=0000

如果结果全为0,结果则为我们所要的结果

最终结果为1111 = -1

如何取某个值的第N位的数值

与操作

如我们想要查看23h这个十六进制数的第3位则可以进行如下运算:

先将23h转化为二进制:0010 0011

image-20210227225942716

最简单的加密算法

通过异或加密数据 再次异或后则解密数据

要加密的数据:2021:0010 0000 0010 0001

密钥:54:0101 0100

image-20210227225957586

高位:0111 0100 = 74

image-20210227230009730

低位:0111 0101 = 75

原本的2021加密成了7475

然后再次进行异或操作进行解密:

image-20210227230024513

高位:0010 0000 = 20

image-20210227230037298

低位:0010 0100 = 21

解密回了原来的数值2021

免费评分

参与人数 7吾爱币 +4 热心值 +7 收起 理由
nyyyddddn + 1 我很赞同!
QRQ + 1 + 1 我很赞同!
血纹21 + 1 谢谢@Thanks!
fanfei + 1 + 1 谢谢@Thanks!
hualala123 + 1 用心讨论,共获提升!
mala-tang + 1 + 1 谢谢@Thanks!
机制呆萌的我 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

来自 22#
 楼主| lyl610abc 发表于 2021-3-3 13:45 |楼主
YMYS 发表于 2021-3-3 13:24
不懂就问,1000为什么是-8,1111为什么是-1

在计算机中:
正数是直接用原码表示的
负数以其正值的补码形式表示的
下面以数据宽度8为例
1的原码:0000 0001
1的反码:1111 1110(反码为原码按位取反)
1的补码:1111 1111(补码为反码+1)

同理可得:
8的原码:0000 1000
8的补码:1111 0111+1=1111 1000
我帖子里的例子里给出的数据宽为4,,因此
1000是-8
1111是-1

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
aswcy815174418 + 1 + 1 我很赞同!
YMYS + 1 + 1 我很赞同!

查看全部评分

来自 34#
 楼主| lyl610abc 发表于 2021-4-4 18:02 |楼主
sy19901023 发表于 2021-4-4 17:25
没明白,能再给讲下吗?为正还是负不跟有符号数有关吗?跟数据宽度是什么关系吖

为正数还是负数看我们如何看待这个数
在数据宽度是8时
对于 0xFF = 1111 1111
如果把它看作有符号数,则其值为-1
如果把它看作无符号数,则其值为255
在数据宽度为是16时
0xFF = 0000 0000 1111 1111
无论是把它看作有符号数还是无符号数,其值均为255
推荐
YMYS 发表于 2021-3-3 13:24
不懂就问,1000为什么是-8,1111为什么是-1

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lyl610abc + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!

查看全部评分

沙发
Ly_轮回 发表于 2021-2-27 23:19
原来CPU底层是这么算的
3#
bigdawn 发表于 2021-2-28 00:15
基础学习资料,收藏备用
4#
marlborogolo 发表于 2021-2-28 01:50
谢谢楼主分享
5#
pwzx 发表于 2021-2-28 08:38
很好,又重新温习了一遍,以前学的都还给老师了
6#
小卍卒 发表于 2021-2-28 09:30
0010<<1=0100

如果结果全为0,结果则为我们所要的结果

最终结果为1111 = -1


这里是不是写错了?没有理解啊
7#
Link_Stark 发表于 2021-2-28 10:19

写错了吧,我也看到了
8#
 楼主| lyl610abc 发表于 2021-2-28 11:55 |楼主

感谢指正,写错了,已修正
9#
pojie6033 发表于 2021-2-28 12:07
已经学习了,谢谢楼主
10#
小卍卒 发表于 2021-2-28 12:18
lyl610abc 发表于 2021-2-28 11:55
感谢指正,写错了,已修正

向大佬学习,笔记很是有帮助,谢谢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 10:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表