进制转化
R进制数转换为十进制数
R进制转换成十进制:
方法就是按权展开相加(系数乘以基数的权次方相加)
系数:就是就是每一位上的数
基数:R进制的基数就是R
权:从右侧开始每一位的索引值从0开始,每一位对应的索引值就是权值.
十进制转换R进制时,方法步骤:
1.将十进制整数转换成R进制整数采用“除R取倒余法”。即将十进制整数除以R,得到一个商和一个余数;再将商除以R,又得到一个商和一个余数; 以此类推,直到商等于零为止。每次得到的余数的倒排列,就是对应R进制数的各位数。
2. 十进制小数转换成R进制小数。十进制小数转换成R进制小数是用“乘R取整法”。即用R逐次去乘十进制小数,以此类推,直到余数为1停止。将每次得到的积的整数部分按各自出现的先后顺序依次排列(与整数的排列顺序相反),就得到相对应的R进制小数。
字
字是表示计算机自然数据单位的术语,在某个特定计算机中,字是其用来一次性处理事务的一个固定长度的位(bit)组,在现代计算机中,一个字等于两个字节(Byte)等于8位(bit)。
字长
1.机器字长,是指CPU一次能处理数据的位数,通常与CPU的寄存器位数有关。
2.指令字长,计算机指令字的位数。指令字长取决于从操作码的长度、操作数地址的长度和操作数地址的个数。不同的指令的字长是不同的。
3.存储字长,是一个存储单元存储一串二进制代码(存储字),这串二进制代码的位数称为存储字长。
4.数据字长:计算机数据存储所占用的位数。
通常早期计算机:存储字长 = 指令字长 = 数据字长。故访问一次便可取一条指令或一个数据,随着计算机应用范围的不断扩大,三者可能各不相同,但它们必须是字节的整数倍。
端序
大端:数据的高字节储存在内存的低地址中,低字节储存在内存的高地址中。
小端:数据的低字节储存在内存的低地址中,高字节储存在内存的高地址中。
栈(stack):栈用于存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。
堆(heap):堆用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。若程序员不释放,则会发生内存泄漏。
关于寄存器
一个典型的CPU由运算器,控制器,寄存器等器件组成,这些器件靠内部总线相连,内部总线实现CPU内部各个器件之间的联系,而CPU于外设(主板上的其他器件)之间的联系则由外部总线连接
简单来说,在CPU中:
1.运算器进行信息处理;
2.寄存器进行信息存储;
3.控制器控制各个器件进行工作;
4.内部总线连接各个器件,在他们之间进行数据的传送
冯·诺依曼结构
是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同
X86
是微处理器执行的计算机语言指令集,指一个Intel通用计算机系列的标准编号缩写。
X86优点在于功能强大,而且通用性、兼容性、与实用性要强。而且它的指令多,应用范围也较广。 X86的CPU随便就是1G以上、双核、四核大行其道,通常使用45nm(甚至更高级)制程的工艺进行生产. X86结构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,而且x86结构的电脑出现了近30年,其配套扩展的设备种类多、价格也比较便宜,所以x86结构的电脑能很容易进行性能扩展,如增加内存、硬盘等
BUUCTF
1放入ida得到flag
2
放入ida后shft+f12找到流程图
查看代码易得用0代o输出hell0 w0rld
3查看代码有flag为hackingforfun其中i,r代换为1