2018/01/07 #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 …
2018/01/03 思考:
当需要一个容器能够存储1个字节,你会怎么做? //char
当需要一个容器能够存储4个字节,你会怎么做? //int
当需要一个容器能够存储100个2个字节的数据,你会怎么做? //short arr[100]
当需要一个容器能够存储5个数据,这5个数据中有1字节的,2字节的有10字节的。。。你会怎么做??
2018/01/03 多维数组的定义 比如一个班有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] = …
2018/01/01 数组的定义 数组定义的格式:
数据类型 变量名[常亮]; //为什么不能使变量? //因为在声明的时候 编译器需要知道数组的长度,分配相应大小的内存 数组的初始化 方式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] = …
2017/12/30 如何实现让某些语句按照一定的条件重复执行呢?
比如:打印从0 – N的值?
例子: goto语句
#include #include void MyPrint(int x) { int i = 0; B: printf("%d\n",i); i++;
2017/12/29 众所周知,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 …
2017/12/28 switch语句的定义 语法 switch(表达式) { case 常亮表达式1: 语句; break; case 常亮表达式: 语句; break; case 常亮表达式: 语句; break; ...... default: 语句; break; } 需要注意的点 表达式结束不能使浮点数 case后的值不能一样 case后的值必须是常量 break: break非常重要,当执行到一个分支后 如果没有break就会继续向下执行,遇到break才跳出switch语句 default 语句与位置无关,但是当default写在其他条件的前面时。如果没有break;,就会向下继续匹配 Switch语 …
2017/12/28 运算符与表达式 什么是运算符?什么是表达式? 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 …
2017/12/24 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 次幂(次方),其原型为:
2017/12/24 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 …
2017/12/21 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 也就是只需 …
2017/12/21 最近一个H5的app做优化。我写了个转发接口。每次请求都会慢300到500ms,匪夷所思
问题发现 最近H5做了重构。
由于接口的安全原因 不得不做了一个转发接口。
转发接口接受来自h5页面的http请求,解析参数,处理敏感数据,然后调用后端的api完成接口逻辑。
2017/12/20 今天的kimsufi 4C没抢到。不过这个垃圾网还不如oline的。就找了个脚本改改 部署方便些
脚本 脚本使用python3.6编写,下面是脚本
需要更改的是价格。这个脚本是根据价格判断需要的服务器是否有货的
地址的话 这个是官网默认的地址,如果有活动的话 如果活动的界面跟这个地址的界面一样的话 直接改地址就可以了
2017/12/17 变量声明 变量类型 变量名;
变量类型 用来说明宽度是多大
int 4个字节
short 2个字节
char 1个字节
变量名的命名规则
只能以字母、数组、下划线组成,却第一个元素必须是字母或者下划线 区分大小写 不能使用C语言的关键字 全局变量 编译的时候就已经确定了内存地址和宽度,变量名就是内存地址的别名 如果不重新编译,全局变量的内存地址不管。游戏外挂中的找“基址”,其实就是找全局变量 全局变量中的值任何程序都可以改,是公用的 例子:CE搜索基址
2017/12/17 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 …
2017/12/02 安装 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行修改为 …
2017/11/28 VMware Fusion 10 Pro 序列号 导入虚拟机 以及下载地址
VMware Fusion 10 Mac 虚拟软件已于今年10月发布。新版的VMware Fusion 10 将兼容 macOS High Sierra,同时还支持最新 MacBook Pro 上的 Touch Bar。Fusion 10 还会改进图形性能和准确性,并采用苹果 Metal 技术。
那么下面的东西将会是你喜欢的东西, 如果你有能力支付昂贵的费用,还请支持正版,双十一购买会便宜点。
2017/11/28 前提条件 域名要解析到服务器ip上去
ubuntu16.04 安装Nginx 非常简单,因为需要喜欢内容所以装的是full版本
sudo apt update -y sudo apt install nginx-full -y 安装好之后配置好反向代理
ssl证书 我使用的是 certbot 自动获取的 Let’s Encrypt 证书
安装 certbot
sudo apt-get update -y sudo apt-get install software-properties-common sudo add-apt-repository …
2017/11/24 经常遇到这样的情况:
系统自带的 Python 是 2.6,自己需要 Python 2.7 中的某些特性; 系统自带的 Python 是 2.x,自己需要 Python 3.x; 此时需要在系统中安装多个 Python,但又不能影响系统自带的 Python,即需要实现
Python 的多版本共存。pyenv 就是这样一个 Python 版本管理器。
安装 pyenv 在终端执行如下命令以安装 pyenv 以及几个插件:
2017/11/18 计算机只认识0和1,计算机能做的运算归根结底也就是直接对0和1做运算(通常称为 位运算)
与运算 两个位都为1时,结果为1 and(&)
或运算 只要有一个为1 就是1 or(|)
异或运算 不一样的时候是1 xor(^)
非运算(单目运算) 0变1 1变0 not(~)
左移 各二进制位全部左移若干位,高位丢弃,低位补0 shl(>) 在汇编中shr补0,sar补符号位