C++语言基础讲解(8)
1.C语言到C++速成不同点?C是面向过程的过程。C++是面向对象的高级语言。C更偏向于写一些底层的操作:比如 嵌入式,驱动开发
C++向下兼容C
C++比C多了函数库
HOW学C++?当然肯定是把C学好咯。这里简单介绍一下C++就好了
首先我们看一个C++的hello的入门代码
123456789#include <iostream>using namespace std;int main() { cout << "Hello World" << endl; return 0;}
在来看一下一个比较复杂的C语言的代码
123456789101112131415161718#pragma warning(disable:4996)#include <stdio.h>int main(){ long long m = 0, fm = 1, sum = 1; int n, i; while (scanf("%d", &n), n != -1) { m ...
C语言语句深入理解(7)
1.循环语句
while
for
do while
break:直接跳出循环
continue:跳过本次循环后面的代码进入下一次的判断
while循环123456789101112131415161718#include <stdio.h>int main(){ /* 局部变量定义 */ int a = 10; /* while 循环执⾏ */ while (a < 20) { printf("a 的值: %d\n", a); a++; if (a > 15) { /* 使⽤ break 语句终⽌循环 */ break; } } return 0;}
12345678910111213141516171819202122232425262728 int a = 10;00007FF72566520B mov dword ptr [a],0Ah /* while 循环执⾏ */ while (a < 20)00007FF725 ...
C语言语句讲解(6)
1.类型与类型强转强制转换就是把变量从一种类型转化成另外一种类型的数据。
简单的例子方法:(想要转换的类型)变量
12345678#include <stdio.h>int main(){ int sum = 17, count = 5; double mean; mean = (double) sum / count; printf("Value of mean : %f\n", mean );}
sum的值首先被转化未double性,然后除以count得到一个double型的值
这样的转换是显性的。转换也可以是隐型的
整数提升也就是把小于int 或者 unsigned int 的整数转化成 跟高的过程
编译器首先会整数提升,如果操作数类型不同,则把他们转化为层次最高的类型
int->unsigned int->long->unsigned long->unsigned long long ->float->double->long double
123456789#include & ...
路途很遥远,一步一脚印
2024-9-22我又回来了。
2023-11-1总觉得写CTF也不是一个头,我应该是将CTF作为一个学习的途径。而不是整天就是写CTF题目,我也不适合这样的事情。
将CTF作为提升自己的路径。我想学计算机内层的东西。
既然这样,我重新开始来学习C语言吧。
然后每天一个CTF,有空余时间就来学408考研。想考个北京邮电。现在英语的化,就每天看看单词,要求也不多,争取的记住就好了。
2023-9-24加油,我觉得一直写CTF也不是办法,后续我可能会改变自己的策略。重复习,重基础。
2023-9-10时间过得真快啊。不知不觉就暑假过去了,都大二咯
这学期也要好好干!!
2023-6-21不知不觉,时间过得好快,我也有摆烂的有一段时间。
正好遇到放假(端午节)今天就来好好的反思一下吧。
怎么说的:最近遇到的问题就是,我有点不知道如何是好,在二进制和渗透里面,对于渗透:我非常的喜欢,单大多数时候都只能单纯的用工具来完成任务,我是想找漏洞的,但是我又不知道如何下手,如何进行找漏洞,也许我某些方法我是知道的,但是在开始找漏洞的时候还是一篇茫然。对于二进制:说过来说过去,我都一直在学,但是每一次遇到 ...
C语言基础讲解(5)
1.环境的搭建#pragma warning(disable:4996)
这个环境,就懒得说了,我用的是VS 2022
然后再linux下是之前那个Ubuntu,gcc版本是5.4.0
2.用编译器反编译windows下简单的写一个c代码
12345#include <stdio.h>int main() { printf("hello world"); return 0;}
设置断点,单步调试,就可以看到一步一步的内容。
按下f11【要注意不是在黑窗口里面按】或者点vs2022上面的一步一步调试。
在设置了断点后可以反编译
调试->窗口->反汇编【ctrl+alt+d】
ok 懂的都懂
linux下12345#include<stdio.h>int main(){ printf("hello world!"); return 0;}
首先生成这个文件哈
1gcc hello.c -o hello -i 保存路径
C文件编译都要分为4步:预处理,编译,汇编,连接
...
实战寻找关键call(4)
这里来实战一下下。这个程序
成功注册这个程序就可以了
首先我们点开这个程序,发现这个程序说:需要注册
查一个这个程序是如何写的…然后用IDA打开。
1shift+f12
先找找关键的字符串。
1shitf + f
搜索一下,找到这个程序的关键的位置,从上图中可以看出,有一个name 和 code 的字符串,我们就去搜索一下这个,然后点进去看看
点进去,然后看一看代码,emmm有点蒙蔽,交叉引用一下吧,看看图的样子。这里很明显能得到几个跳转。感觉就像是判断一样。
找到需要的位置按一下,有光标,然后tab一下,看看伪代码。大概就知道一点点。
用OD单步调试一下吧,静态的看确实脑壳大。
进入OD , 全局中文搜索,智能搜索,找到这个name / code 的地方. 点过去看一看
通过IDA所看到的if 语句 ,是一个 双if 咱们大概找找位置,找到大if的位置,这个肯定是一个关键的位置。
大概知道这个地方,上面有一个call 一眼丁正是关键call。
让程序运行到这个看看,运行到这个上面这个红色的call的位置。然后单步调试一下。
然后再程序中的密钥的地方,输入一个name ...
汇编语言深入讲解(3)
1.X86汇编初步认识这里来看两个例子
加减乘除123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120ASSUME CS:CODES,DS:DATAS ;关联一下啦DATAS SEGMENT ;定义⼀个DATAS段 X DW 3 ;给字变量X赋值,X占16位 Y DW 2 ;给字变量Y赋值,Y占16位 STR1 DB 'X = $' ;⽤于输出的表达式字符串,下同理 STR2 DB 'Y = $' STR3 DB 'X + Y = $' STR4 DB ...
汇编语言讲解(2)
1.汇编语言简介和发开环境搭建汇编语言介绍编辑-弄成汇编程序-连接程序-调试程序
1masm一下 -> link一下 -> debug一下
12编程 -> .asm -> 编译 -> .obj -> 链接 -> .exe -> 加载 -> 内存中的程序 -> 运⾏(edit) (masm) (link) (command) (CPU)
这里需要下载一个masm 的一个集成环境【在虚拟机里面搞】
123456789101112131415161718;完整段的Hello World程序DATAS SEGMENT STRING DB 'Hello World!',13,10,'$'DATAS ENDSCODES SEGMENT ;codes ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX ;让ds 和 datas相互关联 LEA DX,ST ...
编程基础(1)
1.进制进制之间的转化,emmm 这里就不累赘了。
现在这么先进了,能计算机就计算机吧。当然原理肯定还是要懂的。
2.编程基础之常见字符编码数据宽度超出最多宽度的数据会被丢弃
12345bit 1byte 8 0xFFword 16 0xFFFFdoubleword 32 0xFFFFFFFFQword 64
⽆符号数、有符号数不说了
原码、反码、补码在计算机中,存储形式是通过补码来存储的
原码:最⾼位为符号位,其余各位为数值本身的绝对值
反码:正数反码与原码相同,负数符号位为1,其余位对原码取反
补码:正数补码与原码相同,负数符号位为1,其余位对原码取反加1
12345-1 1000 0001 原码:1000 0001反码 1111 1110 补码 1111 1111
与运算and &
两个位都是1才是1。【一假即假】
12341011 00011101 1000——————1001 0000
或运算||
只要有一个为1就为1。【一真即真】
12341011 00011101 1000——————1111 1001
异或运算xor ...
WIN32程序设计-使用资源(5)
资源文件的“源文件”是 .rc 的脚本文件
菜单和加速健1.菜单和加速键的组成
加速健就是快捷键
/# sharp
这里有一个工具 resedit-x64
12闪退:在文件:ResEdit.xml中查找行"<autoCheckupdate value="true"/>",并将其替换为"<autocheckUpdate value="false" />"
12设置中文ctrl+P 在第一个地方把语言 english设置成chinese
ok用这个工具,创建一个菜单
12$F -> \t -> tab健
2.菜单和加速键的定义12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273//>>>>>>>> ...