二进制数学
本文最后更新于 2022年2月25日 中午
咳咳,由于打比赛老是基础不牢,地动山摇,故开此篇以文字形式记录下,把二进制牢牢的记住!
第一个问题:计算机是如何存储数字的?
答:
首先是整数:
计算机中所有的整数都是以补码的形式存储的。整数的补吗就是它本身,负数的补码是它除了符号位的位数取反(这样做生成的叫反码)加一。
使用补码,可以将符号和数值统一处理,加法和减法也可以统一处理(CPU 只有加法器)
其余知识点,如浮点数表示等参考别人的资料,知道这点就很关键。
第二个知识点:【内存】中数据的存储(更新了十六进制数大小端存储)
十六进制和整型数据的存储
计算机中,二进制数可以转为十六进制数,一个十六进制数相当于 4 个 2 进制,也就是 4 个 bit,两个十六进制数为一个字节
大端:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端:数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中,内存储存即是小端序
在 pwn 中,内存一个地址即是以小端序存储的 unsigned int64 数字,在进行程序的输入时,伪造地址需要自行以字节码的形式将对应内存改成以数字形式存储在该处的样子(十六进制小端序,C 语言认可十六进制),输入顺序是从低地址到高地址。
由于是伪造,正常逻辑是输入可见的 ASCII 码字符,伪造逻辑不考虑这个,只考虑数字的内存形式,输入十六进制小端序形式的字节字符串数据即可伪造好地址!
例子:
1 |
|
1 |
|
第三个知识点 数字操作(python 实现)
1 |
|
python 原生实现数字转字节:
1 |
|
泄露的内存数,转换为数字:
1 |
|
1 |
|
微信支付
支付宝支付
“如果你觉得这个博客对你有帮助,欢迎打赏!”
二进制数学
https://k3ppf0r.github.io/2022/02/04/基础/二进制数学/