【技术学习】深度强化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 


    关注 西邮通院科协


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册