- 博客(5)
- 收藏
- 关注
原创 数据的存放
首先开辟新栈的操作就是由esp-的操作完成的,而主程序完成子程序后的下条指令地址就存储在新栈的栈顶。进入子程序后,esp指向栈顶,ebp指向栈低,但esp是低地址,ebp是高地址,是不是有点迷糊了。在程序运行子程序时,如果子程序拥有临时变量,往往会开辟一个新的栈来容纳临时数据。此时如果arr数组超了,就会挤压到a的地址,影响到a的数据,也就是栈溢出。也就是字符串指针加加的操作能依次读取到所以元素的原因。arr将率先压入栈,a将随后压入栈。也就是arr是高地址,a是低地址。所以e是低地址,e是高地址。
2024-09-02 14:48:51
242
1
原创 基础壳的原理
例如我们要给一个程序加上一个执行messagebox的壳该如何做,不考虑注入,我们可以在程序的可执行可读可写区段的空白区域添加上我们的代码。我们发现在text段中的文件偏移1110处有大量空白,可以作为写壳代码的区域。oep属性在nt头的可选头里面我们通过修改这个值来保证我们的壳代码是最先运行。壳实际上是一段可执行代码,而有壳的程序会先执行壳代码在执行其他。在我们执行完壳代码后需要返回原本oep,jmp回去。再把地址用来计算,得到完整的跳转地址,就完成了。在010里面我们能看到的只有文件偏移。
2024-03-23 00:43:51
186
1
原创 软件漏洞 栈溢出
首先我们需要清楚,栈底是ebp高地址,栈顶是esp低地址,而存储一般由低地址向高地址。综上esp是栈的顶,由他来开辟空间,但他是存储的底,由他向高地址存储。当调用一个函数时,会进行esp-的操作,来开辟新的栈提供内存。ebp是栈的底,由他来结束空间,但他是存储的顶。
2024-03-10 15:11:08
202
1
原创 C++异步IO
首先,当我们创建一个线程用于进行阻塞函数和读取大型文件时,这条线程将会等待结果的反馈,阻塞在原地,那么我们可以说这条线程就有些浪费了,这就叫做同步IO。那我们有什么方法可以解放这个线程,让其先进行后面的操作,等待结果反馈再回头执行阻塞部分呢,答案就是异步IO,异步IO的原理就是将阻塞操作交给底层操作系统进行,等同于再开一条线程进行这些浪费时间的操作,以效能换取效率,而本该阻塞的线程继续执行后续代码,节省速率。
2024-03-06 15:58:59
1380
3
原创 c++ 网络编程 基本交互与多线程交互
提到网络编程我们首先想到的是socket,俗称套接字,他将端口和ip进行连接, 然后是winsock,是windows提供的一款网络编程接口。分为1和2两个版本,版本1只提供tcp和udp协议。tcp和udp是网络通讯基本协议,tcp协议需要三次招手,要求稳定的连接,如同和服务器要有夫妻的名分,udp直接发送到服务器,一夜情关于c++的网络编程,微软提供了进行操作的程序接口。
2024-03-04 20:10:19
330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人