C语言12 字节对齐

#include char x; short y; int check() { x =1; y=2; return 0; } int main(int argc, char* argv[]) { check(); system("pause"); return 0; } //上述代码中 check 函数的反汇编 13: x =1; 00401038 C6 05 E2 55 42 00 01 mov byte ptr [x (004255e2)],1 14: y=2; 0040103F 66 C7 05 E0 55 42 00 mov word ptr [y (004255e0)],offset …

C语言11 结构体

思考: 当需要一个容器能够存储1个字节,你会怎么做? //char 当需要一个容器能够存储4个字节,你会怎么做? //int 当需要一个容器能够存储100个2个字节的数据,你会怎么做? //short arr[100] 当需要一个容器能够存储5个数据,这5个数据中有1字节的,2字节的有10字节的。。。你会怎么做??

C语言10 多维数组

多维数组的定义 比如一个班有5个组,每个组有9个人 int arr[45] 或者 intarr[5*9] 或者 int arr[5][9] 比如一个县有5个学校,每个学校有3个年级,每个年级有4个班,每个班有5个组,每个组有9个人 int arr[53459] 或者int arr[5][3][4][5][9] int arr[5][3][4][5][9] ,又成为多维数组. 多维数组的初始化 int arr[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,7,6,5} }; 多维数组的存储方式 int arr[3][4]; 反汇编对比 8: int arr[3*4] = …

C语言9 数组

数组的定义 数组定义的格式: 数据类型 变量名[常亮]; //为什么不能使变量? //因为在声明的时候 编译器需要知道数组的长度,分配相应大小的内存 数组的初始化 方式1: int arr[10] = {0,0,0,0,0,0,0,0,0,0}; 方式2: int arr[] = {1,2,3,4,5,6,7,8,9,10}; 对应汇编 #include "stdafx.h" int main(int argc, char* argv[]) { int age[10] = {1,2,3,4,5,6,7,8,9,10}; return 0; } 8: int age[10] = …

C语言8 循环语句

如何实现让某些语句按照一定的条件重复执行呢? 比如:打印从0 – N的值? 例子: goto语句 #include #include void MyPrint(int x) { int i = 0; B: printf("%d\n",i); i++;

Ubuntu安装最新版nginx

众所周知,Ubuntu 上官方源的更新速度一直是慢得令人发指的,很多人不得不自己编译 nginx,非常麻烦。 所以。我们直接用nginx官方源来安装。 增加源地址: sudo vim /etc/apt/sources.list 增加nginx官方源地址: deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx 导入key cd wget …

C语言7 switch语句为什么高效

switch语句的定义 语法 switch(表达式) { case 常亮表达式1: 语句; break; case 常亮表达式: 语句; break; case 常亮表达式: 语句; break; ...... default: 语句; break; } 需要注意的点 表达式结束不能使浮点数 case后的值不能一样 case后的值必须是常量 break: break非常重要,当执行到一个分支后 如果没有break就会继续向下执行,遇到break才跳出switch语句 default 语句与位置无关,但是当default写在其他条件的前面时。如果没有break;,就会向下继续匹配 Switch语 …

C语言6 运算符和表达式

运算符与表达式 什么是运算符?什么是表达式? int x,y; x+y x-y x>y x==y x=y 表达式的结果 (x+y)*(x-y) char => short => int => float => double /*如果x和 y类型 不同,最终结果按照上面结果类型转换*/ 表达式不论怎么复杂。最终只有一个结果 不同类型运算结果类型证明的例子: void main() { char x =1; short y = 2; int z = x + y; return } 对应汇编片段: mov byte ptr [ebp-4],1 mov word ptr [ebp-8],offset …

C语言常用函数

sqrt 求给定值的平方根 sqrt() 用来求给定值的平方根,其原型为: double sqrt(double x); 【参数】x 为要计算平方根的值。 如果 x < 0,将会导致 domain error 错误,并把全局变量 errno 的值为设置为 EDOM。 【返回值】返回 x 平方根。 Exp: #include main(){ double root; root = sqrt(200); printf("answer is %f\n", root); } pow 求x的y次方(次幂) pow() 函数用来求 x 的 y 次幂(次方),其原型为:

C语言4 -C语言整数和浮点数

C语言数据类型 基本类型 整数类型 char、short、int、long char 8BIT 1字节 0~0xFF short 16BIT 2字节 0~0xFFFF int 32BIT 4字节 0~0xFFFFFFFF long 32BIT 4字节 0~0xFFFFFFFF 特别说明: int 在16位计算机中与short宽度一样,在32位以上的计算机中与long相同 存储格式 char x = 1; //0000 0001 0x01 char x = -1; //1111 1111 0xFF (反码、补码、源码规则存储) 数据溢出 char x = 0xFF; //1111 1111 …

C语言5 -字符和字符串

int x = 123; //补码 int float f = 123.4F; //IEEE编码 int i = "A"; //神马情况??? 我们在代码中写入 int i = "A"; 反编译后汇编就编程了 mov dword ptr ss:[esp-4],0x41 为什么会变成41呢? 字符类型 ASCII 表 (American Standard Code for Information Interchange 美国标准信息交换代码) 维基百科: https://zh.wikipedia.org/wiki/ASCII 字符类型 ASCII表最大 127 16进制 是 0x7F 也就是只需 …

IIS、asp.net 中TTFB诡异的500ms时间

最近一个H5的app做优化。我写了个转发接口。每次请求都会慢300到500ms,匪夷所思 问题发现 最近H5做了重构。 由于接口的安全原因 不得不做了一个转发接口。 转发接口接受来自h5页面的http请求,解析参数,处理敏感数据,然后调用后端的api完成接口逻辑。

Online.net 服务器监控脚本

今天的kimsufi 4C没抢到。不过这个垃圾网还不如oline的。就找了个脚本改改 部署方便些 脚本 脚本使用python3.6编写,下面是脚本 需要更改的是价格。这个脚本是根据价格判断需要的服务器是否有货的 地址的话 这个是官网默认的地址,如果有活动的话 如果活动的界面跟这个地址的界面一样的话 直接改地址就可以了

C语言3 -变量

变量声明 变量类型 变量名; 变量类型 用来说明宽度是多大 int 4个字节 short 2个字节 char 1个字节 变量名的命名规则 只能以字母、数组、下划线组成,却第一个元素必须是字母或者下划线 区分大小写 不能使用C语言的关键字 全局变量 编译的时候就已经确定了内存地址和宽度,变量名就是内存地址的别名 如果不重新编译,全局变量的内存地址不管。游戏外挂中的找“基址”,其实就是找全局变量 全局变量中的值任何程序都可以改,是公用的 例子:CE搜索基址

C语言2-参数的传递与返回值

short plus(short x,short y,short z,short m) { return x+y+z+m; } void main() //入口程序 程序开始执行的地方 { //调用函数 plus(1,2,3,4); return; //执行结束 } 找到plus函数的反汇编 理解每一行汇编代码 找到参数是如何传递 返回值是如何返回的 plus函数对应反汇编代码和意义 调用函数调用: push 4 push 3 push 2 push 1 call (plus) 0041100f add esp,10h 下面是call内部 push ebp mov ebp,esp sub …

Ubuntu下安装Transmission 挂PT 并配置域名访问

安装 Transmission sudo apt-get install transmission-daemon 修改配置文件 先停止transmission sudo service transmission-daemon stop 编辑 sudo vim /etc/transmission-daemon/settings.json 第14行修改为“dht-enabled”: false, 第15行是下载目录修改成你自己的“download-dir”: “/home/transmission/downloads”, 第20行修改为“encryption”: 2, 第23行修改为 …

VMware Fusion 10 Pro 序列号

VMware Fusion 10 Pro 序列号 导入虚拟机 以及下载地址 VMware Fusion 10 Mac 虚拟软件已于今年10月发布。新版的VMware Fusion 10 将兼容 macOS High Sierra,同时还支持最新 MacBook Pro 上的 Touch Bar。Fusion 10 还会改进图形性能和准确性,并采用苹果 Metal 技术。 那么下面的东西将会是你喜欢的东西, 如果你有能力支付昂贵的费用,还请支持正版,双十一购买会便宜点。

Nginx 反向代理nuget配置文件

前提条件 域名要解析到服务器ip上去 ubuntu16.04 安装Nginx 非常简单,因为需要喜欢内容所以装的是full版本 sudo apt update -y sudo apt install nginx-full -y 安装好之后配置好反向代理 ssl证书 我使用的是 certbot 自动获取的 Let&#8217;s Encrypt 证书 安装 certbot sudo apt-get update -y sudo apt-get install software-properties-common sudo add-apt-repository …

Python 多版本共存之pyenv

经常遇到这样的情况: 系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性; 系统自带的 Python 是 2.x,自己需要 Python 3.x; 此时需要在系统中安装多个 Python,但又不能影响系统自带的 Python,即需要实现 Python 的多版本共存。pyenv 就是这样一个 Python 版本管理器。 安装 pyenv 在终端执行如下命令以安装 pyenv 以及几个插件:

计算机中的运算

计算机只认识0和1,计算机能做的运算归根结底也就是直接对0和1做运算(通常称为 位运算) 与运算 两个位都为1时,结果为1 and(&) 或运算 只要有一个为1 就是1 or(|) 异或运算 不一样的时候是1 xor(^) 非运算(单目运算) 0变1 1变0 not(~) 左移 各二进制位全部左移若干位,高位丢弃,低位补0 shl(>) 在汇编中shr补0,sar补符号位