C
文章平均质量分 79
「已注销」
这个作者很懒,什么都没留下…
展开
-
算法导论笔记——插入排序C语言实现
第二章算法基础2.1插入排序对于少量元素的排序,插入排序是个有效算法,工作方式类似于排序一手扑克牌。每次从桌上拿一张牌并将它插入另一手中正确的位置,为找到正确位置,依此对手中的牌进行比较,直到找出正确位置。该算法是原址排序。原址排序:在排序算法中,如果输入数组中仅有常数个数元素需在排序过程中存储在数组之外,则称排序算法是原址的。例如:插入排序,堆排序,快速排序。伪代码:INSERTION-SORT...原创 2018-03-20 22:02:36 · 205 阅读 · 0 评论 -
邻接链表单源最短路径Bellman-Ford算法C语言
单源最短路径算法涉及到松弛技术。对于每个结点v来说,我们用一个属性p(v)来记录,从源节点到节点v的最短路径权重的上界,称此属性为s到v的最短路径估计。松弛操作对一条边(u,v)来说,在边(u,v)上的松弛操作为,比较p(v)与p(u)加上边(u,v)的权重。如果当前最短路径权重上界大于新值,则更新,最短路径估计。以节点数为5的图,源节点为0为例,如图所示松弛操作C代码void relax(int...原创 2018-06-07 19:08:47 · 2025 阅读 · 3 评论 -
KMP算法C语言
KMP算法是一种改进的字符匹配算法,具体实现是通过构造next数组,通过next数组指示下一轮应用于进行匹配的元素位置减少了模式串与主串的匹配次数,优化了算法的时间复杂度。S串 主串T串 模式匹配串next数组的建立原理建立一个字符串数组,字符串数组的第一个元素a[0]规定用存放数组中含有的字符个数。比如主串S为abaabaaab,则s[0] = 9,s[1] = 'a',s[2] = 'b',s...原创 2018-06-02 12:40:49 · 1023 阅读 · 0 评论 -
[Re]南邮ctf平台逆向题
继续学习,这次尝试做了一下南邮ctf平台的逆向题来练习目录第一题 HELLO,RE!第二题 ReadAsm2第三题 Py交易第四题 WxyVM第五题 maze第六题 WxyVM 2 第一题 HELLO,RE!打开ida,找到main函数按F5,hexray反编译就在眼前 flag{Welcome_To_RE_World!}第二题 ReadAs...原创 2018-12-03 14:23:16 · 1594 阅读 · 0 评论 -
Windows消息钩子[键盘监控]
之前看书,看到一眼消息钩子,一直没实践,现在有空弄了下,主要原理是利用windows自带SetWindowsHookEx API函数HHOOK SetWindowsHookEx(int idHook, //hook形式HOOKPROC lpfn //hook过程HINSTANCE hmod //钩子所属的...原创 2018-12-08 11:18:09 · 1881 阅读 · 0 评论 -
[Re]bugku CTF逆向题(持续更新)
目录bugku 入门逆向题解bugku easy_vb题解bugku easy_rebugku 游戏过关题解bugku love题解bugku file题解待续bugku 入门逆向题解打开程序,一闪而过去控制台环境打开只有一串字符,再次拖入ida em,啥都没有,flag果然就是这串字符bugku easy_vb题解一个vb写的程...原创 2018-12-05 21:41:27 · 3124 阅读 · 1 评论 -
[PWN]安恒杯2019.2 filesystem
之前一直玩逆向,鉴于逆向和pwn都算同一类,寒假花了点时间补了下。由于自己太菜,被几个函数误导了好久。。。。最后到点刚好解出来,没能来得及提交。。。被自己蠢哭了main函数很简单,各种菜单输入匹配,一眼就看到个B4cKd0oR可疑的很!更进去看看是啥看到个system,那不是简单了,立马输入B4cKd0oR,键入ls命令程序返回了服务器上的文件目录,看到一个fl...原创 2019-02-24 18:31:37 · 676 阅读 · 0 评论 -
glibc2.29堆溢出tcache的利用方式及原理
ibc2.29 堆溢出tcache的利用方式及原理Dancing With Heap 与堆共舞二进制学习之旅参考资料:ctf-pwn https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/tcache_attack/#tcache-poisoningglibc wiki https://sourceware.org/glib...原创 2019-03-06 16:07:32 · 8064 阅读 · 0 评论 -
glibc动态链接器dl_runtime_resolve简要分析
dl_runtime_resolve简要分析资料glibc 2.9 sourcelinux elf 手册&各种百度搜索基于32位elf,64位一些结构会略有不同,新手学习,如果有理解错误,请师傅们帮忙指出。elf执行时动态绑定简要分析动态链接的过程动态链接中起到核心作用的是got节和plt节,链接器为所有共享目标文件(shared object)中未定义的(undef)外部...原创 2019-05-05 17:31:37 · 2972 阅读 · 0 评论 -
邻接链表BFS广度优先搜索C语言
广度优先搜索不同于深度优先搜索,广度优先搜索先搜索当前定点的度,并生成,广度优先搜索树,他的一个重要性质是可以,计算源节点到其他节点的最短路径,是许多重要算法的原型,如单源最短路径或是最小生成树算法。C代码void bfs(listpoint g,int s){ int road[9],value[9]; listpoint m; queuepoint q; deg...原创 2018-06-05 21:57:26 · 888 阅读 · 0 评论 -
动态规划练习——RQNOJ开心的金明C语言
动态规划与分治法相似,都是通过组合自问题解来求解原文题,分治法处理划分互相独立的子问题,动态规划更适合处理,子问题出现相交的情况。动态规划常用于求解最优化问题。通常按四个步骤设计动态规划算法1.刻划一个最优解的结构特征。2.递归定义最优解的值。3.计算最优解的值,自底向上或自顶向下。4.利用计算出的信息构造最优解。题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专...原创 2018-06-04 19:03:09 · 858 阅读 · 0 评论 -
算法导论笔记——归并排序C语言实现
第二章 算法基础2.3.1 分治法许多有用的算法在结构上是递归的,为了解决某个问题,算法依次或多次递归的调用其自身已解决其紧密相关的若干子问题。这些算法典型遵循分治法的思想。分治模式每层递归都有三个步骤:分解 将原问题分解为若干子问题,这些子问题都是原问题较小的实例。实例:对于给定输入序列成为问题的实例。解决 递归的求解各子问题,如果子问题够小则可以直接求解。合并 将子问题的解合并成原文题的解。归...原创 2018-03-21 11:07:54 · 502 阅读 · 1 评论 -
算法导论——最大序列堆与堆排序C语言实现
第六章堆排序堆可以被近似看成一个近似完全二叉树以结点数为10的树为例 给定一个节点下标为i,则其父,子节点分别为parent(i) return i/2 //父结点left(i)return 2*i //左子结点right(i)return 2*i+1 //右子结点如 i= 2则其左子结点为4 右子节点为5 父节点为1二叉堆可分为两种形式最大堆 所有结点父结点要大于...原创 2018-03-31 11:30:53 · 1225 阅读 · 0 评论 -
数据结构——线性表的顺序存储结构C语言
线性表顺序存储结构是在存储空间中开辟出一块连续的存储空间用于存放数据。数据之间的关系在逻辑上连续的。即A1-A2-A3......An伪代码typedef struct{ int length; elemtype *data;}list;整型变量length 用于存储当前表长度,即表中数据数量,data指针用于指向,内存中连续的部分,elemtype即为存储的数据类型,可根...原创 2018-04-09 21:34:41 · 407 阅读 · 0 评论 -
算法导论笔记——最大子数组C语言实现
第四章分治策略在分治策略中我们将递归的求解一个问题,在每层递归中有如下三个步骤。分解 将问题划分为一些子问题,子问题形式与原问题一样,只是规模更小。解决 递归的求解出子问题。如果子问题规模足够小,则停止递归,直接求解。合并 将子问题的解合并为原问题的解。需要递归求解时,我们称之为递归情况,当子问题足够小时,不需要递归时,我们称之为递归已经触底,进入基本情况。递归式一个递归式就是一个不等式或等式,通...原创 2018-03-27 18:02:02 · 1047 阅读 · 0 评论 -
约瑟夫环——C语言循环链表模拟
约瑟夫问题已知n个人围城一周,编号1,2,3,.......,n,从1号开始报数,每隔k个人报到数的人出列。常见解决方法,递归或循环链表模拟循环链表模拟代码#include<stdio.h> //以30个人为例 ,每7个人出列为例#include<malloc.h>#define elemtype int#define status int #define o...原创 2018-06-02 23:20:43 · 562 阅读 · 0 评论 -
邻接矩阵,邻接链表DFS深度优先搜索C语言
图主要有两种存储结构,邻接矩阵表示法,邻接链表表示法。以有9个顶点的图为例。如图所示邻接矩阵表示法typedef struct { //邻接矩阵 elemtype data[9]; elemtype connect[9][9]; }graph,* graphpoint;建立9个元素的数组用于表示元素并建立对应关系矩阵用于表示顶点之间的关系邻接链表表示法ty...原创 2018-06-03 13:20:07 · 1415 阅读 · 0 评论 -
快速排序C语言
快速排序利用了分治法思想,将带排序数组分解成多个部分进行排序,每个部分排序实际是进行一次数组的重新划分,选定一个元素将其作为中间元素,使元素两侧只有大于或是小于他的元素。用递归树可证得快速排序的时间复杂度为nlogn,并且系数较小,是实际中的常用排序算法。快速排序C语言int quick_sort(int a[],int p,int q){ int i,j; int max,n; n = ...原创 2018-06-03 16:44:16 · 4176 阅读 · 2 评论 -
ret2dl_runtime_resolve实例分析
dl_runtime_resolve实例分析IDA静态分析这里用2019信安国赛的baby_pwn来做演示(就是因为这个做不出来去做了好多功课),实例程序test在文件夹下,hack.py是实现本地攻击的脚本首先使用checksec查看文件保护状态,由于是partial relo所以并没机会改写动态段的字符串表地址。所以我们直接伪造所有所需要的参数结构。ida动态段信息如下d_ta...原创 2019-05-07 23:04:44 · 455 阅读 · 0 评论