【技术学习】深度强化C技能,你要知道这些“点”(一)
深度强化C技能,你要知道这些“点”...
1.概率事件的描述:
2.加上之后才可以对函数进行外部调用:注射入口。
直接加载函数名 之前即可。
3.加上之后不进行安全监测:
4.计算一个类型的极限值:
——字符的概念面试常用
——自定义一个数据类型
5.字符串的结束标志是 . 的编号是 0.
0——48
A——65
a——97
6.字符串不可以直接相加:解决办法是
也不可以直接赋值,解决方案是:
这里就是将str字符串的前7个字符赋值给strur1.(截取字符串)
7.某一类型的数的长度是一定的
无符号数会产生进位,例如:
Unsigned long long num = 4294967295; //long long 8个字节
那么num + 100 = 99;
有符号数会产生越界错误,产生负数如:
Long long num = 2147483647;
那么num + 1 = -2147483647;
8.求与运算只能在整数和字符之间
9.
//五舍六入。算法:
//12344.5 +0.4 12344.9 12344 1234.4
//12344.6 +0.4 12345123451234.5
float changeRMB = ((int)(RMB * 10.0f + 0.4f)) / 10.0f;
float RMB;
printf("请输入钱数:
");
scanf("%f", &RMB);
printf("现在有%.2f元
", RMB);
float changeRMB = ((int)(RMB * 10.0f + 0.4f)) / 10.0f;
//这是对小数点后第二位数的处理 是 *10.0,那要是对第三位操作
//的话,应该是 *100.0
//五舍六入的算法。这是算的
//12.2412.24*10.0+0.4=122.8((int)122.8)/10.0=12.2
//12.2612.26*10.0+0.4=123.0123.0/10.0=12.3
//五舍六入是加上0.4.那么四舍五入是加上0.3
printf("
现在有%.2f元
", changeRMB);
RMB > changeRMB ? printf("可以偷钱%f
", RMB - changeRMB) :
printf("原封不动");
float changeRMB = ((int)(RMB * 100.0f + 0.04f)) / 100.0f;
printf("
现在有%.3f元
", changeRMB);
//第三位五舍六入
changeRMB = ((int)(RMB * 10.0f + 0.4f)) / 10.0f;
//第二位五舍六入
printf("
现在有%.3f元
", changeRMB);
1024GB=1TB
1024TB=1PB
10.
查找一个数的二进制,八进制,函数。
11.在C代码中插入汇编语言
//插入汇编语言
_asm
{
mov eax, num//eax 是一个寄存器,将num的值移到eax
add eax, 5//eax 的值加5
mov num, eax
}
12.实数也可以自增。
13.简单的文件重定向:
首先新建一个1.txt文件,然后再文件中写入系统命令(比如:ipconfig);执行如上的命令之后会在该目录之下的2.txt文件中得到ipconfig命令的结果。如下:
14.
sprintf(str1, "for /l %%i in (1, 1, %d) do %s", num, strurl);
system(str1);
这是一个在DOS环境下进行的循环操作。
sprintf(str, "for /l %%i in (1, 1, 5) do calc");
system(str);
15.
Sleep(2000);//停止2秒钟 #include
16.
ShellExecuteA(0, "open", "notepad", 0, 0, 3); //打开notepad
0:隐藏
1:正常
3:最大化
6:最小化
打开notepad。
小插件xuetr
OllyDBG. IDA Radasm
Cheat-Engine6.3
GM加速器
17.注入一个进程去修改内部的内容。
第一步:
任意写一段代码,如下:
//注射修改变量
#include
#include
void main()
{
int x = 10;
int y = 100000;
printf("%x, %x
", &x, &y);
while (1)
{
printf("我有%d个梦。我要写%d字的文章。
", x, y);
Sleep(1000);
}
}
我们要做的就是:当这个程序在运行的时候,修改其中的x, y 的值。
第二步:
写一个动态链接库文件,这个文件将会被注入(使用注射工具)上一个运行的进程。如下:
_declspec(dllexport) void go()
{
int *p = (int *)0x3df9d4;
*p = 100;
int *p1 = (int *)0x3df9c8;
*p1 = 99999;
}
这里p指向运行过程中的第一步的程序,的源代码中的,x, y地址中的内容。(也就是x, y的值)
我们会在编译好之后。看到这两个文件。
第三步:
运行注射修改变量.exe,然后将运行输出的地址,赋值给p,和p1。之后编译生成动态库文件。
第四步:
,执行这个注射工具。
点击进程,然后点击注入,根据路径找到修改.dll 文件,之后输入入口函数,如下:
然后再观察正在运行的被注入进程的输出:
数据被改变:
到此,大功告成。
虽然进程与进程之间是不可以互相访问内存的,但是可以通过这样的注射入模块的方式来修改,别的进程之中的内容。 游戏中的“血,蓝 等”变量,我们就可以这样修改,这就是一个简单地外挂原理。
注意:数据是可以修改的指令(函数)不可以修改,函数只可以调用。
17.
system("taskkill /f /im SogouExplorer.exe");
//关闭搜狗浏览器进程
18.
SetCursorPos(400, 400);//设置鼠标位置
Sleep(500);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标的左键弹起
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标的左键按下
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//鼠标的左键弹起
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//鼠标的左键按下
19.
控制符c, e, x, g的大小写是不影响输出结果的,而其余的d, f, 是要区分大小写的,若是大写,比如printf(“%D”, 10);结果是:D.
20.
scanf(“请输入整数%d”, &num);
Printf(“%d”, num);
在输入的时候应该输入“请输入整数100”, 之后才会正确的输出。
21.
Long long 是 8 字节的,%d在这里可以扫描出4个字节,只要输出的数字不溢出,就可以正常读出来。
22.
scanf("%d,%d", &x, &y);//这里有逗号,那么在输入的时候必须要有逗号
如果这里个是由要求,一定要清楚的告诉用户。
23.
int num1, num2, num3;
scanf("%3d%3d%3d", &num1, &num2, &num3);
printf("%d %d %d
", num1, num2, num3);
可以使用这种方式截取数据。
24.
char c1, c2, c3;
scanf("%c%c%c", &c1, &c2, &c3);
printf("[%c][%c][%c]
", c1, c2, c3);
在这里输入一个字符一回车,那么再输入完第二个字符之后,回车,这时候,其实接受到的知识第一个字符,和之后的回车,和第二个字符。如下:
25.
//任意输入五个字符,并进行大小写转换
char str[5];
int i;
printf("请输入五个字符:");
gets(str);
for (i = 0; i
关注 西邮通院科协
微信扫一扫关注公众号