C语言常用函数
sqrt求给定值的平方根sqrt() 用来求给定值的平方根,其原型为: double sqrt(double x);【参数】x 为要计算平方根的值。如果 x < 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM。【返回值】返回 x 平方根。E
sqrt求给定值的平方根sqrt() 用来求给定值的平方根,其原型为: double sqrt(double x);【参数】x 为要计算平方根的值。如果 x < 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM。【返回值】返回 x 平方根。E
C语言数据类型基本类型整数类型char、short、int、longchar 8BIT 1字节 0~0xFFshort 16BIT 2字节 0~0xFFFFint 32BIT 4字节 0~0xFFFFFFFFlong 32BIT 4字
int x = 123; //补码int float f = 123.4F; //IEEE编码int i = "A"; //神马情况???我们在代码中写入int i = "A";反编译后汇编就编程了mov dwo
计算机只认识0和1,计算机能做的运算归根结底也就是直接对0和1做运算(通常称为 位运算)与运算两个位都为1时,结果为1 and(&)或运算只要有一个为1 就是1 or(|)异或运算不一样的时候是1 xor(^)非运算(单目运算)0变1 1变0 not(~)左移各二进制位全部左移若干位,高位丢
数据宽度因为计算机受硬件制约,数据都是有长度限制的(数据宽度),超过最多宽度的数据会被丢弃计算机中常见的数据宽度:位(BIT) -> 一个0或1字节(BYTE) =8位 范围 0-> FF字(Word) = 16位 0->FFFF双字(DoubleWord) = 32位 0-FFF
之前可以修改EIP寄存器的指令JMP,CALL,RETN所有JCC指令的动作->根据标志寄存器修改EIP的值标志寄存器 EFLAGSCF(bit 0)[Carry flag] C位若算术产生的结果在最高有效位(most-significant bit)发生进位或者借位则将其置1 反之清零这个标
寄存器传参和堆栈传参寄存器传参MOV ECX,1MOV EBX,2CALL XXMOV EAX,ECXADD EAX,EBXRETN堆栈传参 –ESP寻址PUSH 1PUSH 2CALL XXXMOV EAX,DWORD PTR SS:[ESP+8] //当内存中括号中包含ESP或者EBP的话 用
什么是函数函数就是一系列指令的几个,为了完成某个会重复使用的特定功能函数调用用JMP来执行函数用CALL来执行函数函数的参数和返回值通常情况下,会将函数的计算结果放到EAX寄存器中EAX 通常用来放返回值简单的加法函数ADD ECX,EDX //传参MOV EAX,ECX //传结果到EAX中RET
EIP寄存器EIP寄存器表示CPU下次执行的位置JMP指令JMP指令相当于给EIP寄存器赋值JMP后面只能是32位的指令格式:MPV EIP,寄存器/立即数/内存简写:JMP 寄存器/立即数/内存JMP 0x00FF19 -> MOV EIP,0X00FF19JMP EAX
什么是堆栈程序启动的时候操作系统会给每个程序一块虚拟的4G内存当程序需要使用的时候必须要和操作系统申请内存堆栈是程序的心脏,程序中需要用到的重要数据,都在堆栈中体现就是一块特殊的内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用和数据结构的堆栈无关查看堆栈正常内存使用从小地址往大地址使用,