DP 动态规划我现在暂时讲不清楚 以后再说 70.爬楼梯 解: 1234567891011121314class Solution {public: int climbStairs(int n) { if(n == 1) return 1; if(n == 2) return 2; vector<int> dp(n+1); 2026-01-19 数据结构与算法 #动态规划 #LeetCode
栈 栈(LIFO)此栈非彼栈… 20.有效的括号 解: 后进先出 1234567891011121314151617181920class Solution {public: bool isValid(string s) { stack<char> stk; for(char c : s) { if(c 2026-01-19 数据结构与算法 #LeetCode #数据结构 #栈
链表 链表c语言动态内存管理中 链表结构无处不在 有fast bin这种单向链表 也有unsorted bin这种双向链表 重点在于对指针的理解 在DSA中 核心算法则是双指针 160.相交链表 双指针 解: 123456789101112131415161718192021/** * Definition for singly-linked list. * struct ListNode { 2026-01-19 数据结构与算法 #LeetCode #双指针 #数据结构 #链表
双指针 双指针慢慢写… 283.移动零 解法: 123456789101112131415class Solution {public: void moveZeroes(vector<int>& nums) { int slow = 0; //快慢双指针 for(int fast = 0;fast < nums.size(); 2026-01-19 数据结构与算法 #LeetCode #算法 #双指针
twoSum 起因:coding能力太差导致期末考试被制裁 因此 今天从LeetCode的第一题两数之和开始数据结构与算法的学习 首先给出题目 第一个想法是直接两层for循环暴力枚举所有可能 1234567891011121314class Solution {public: vector<int> twoSum(vector<int>& nums, int t 2026-01-17 数据结构与算法 #LeetCode #哈希表 #性能优化
panorama 计算机专业的同学应该都听过一本书,深入理解计算机系统(CSAPP) 其实我很早就开始读了,但是只是囫囵吞枣,根本不知所云,于是便放弃了一段时间。 现在经历了许多(并非),对许多名词有了一些概念后,我又重新翻开了这本书,发现许多地方豁然开朗,今天将第一章,计算机系统漫游,也就是标题所说的panorama,总结一下,以遍展开后续的学习。 以这本书的方式,从你的第一个程序hello的生命周期说起,我们来 2026-01-16 CS #panorama
ret2dlresolve 关于动态链接与延迟绑定 想起来再写… 时隔多年终于打算写了,之前认为这个方法比较抽象就没有深入研究,最近打比赛遇到没有gadget的题目时我的傲慢终于付出了代价 不过一切都不算太迟,现在来看看吧… 1printf("hello ret2dlresolve!"); 在c语言中写下这个句子,观察其汇编代码会看到有这么一段 1call printf@plt <printf@p 2026-01-15 OS #ret2dlresolve #动态链接 #延迟绑定
signal 此篇blog为SROP那一章的后续,主要补充一下linux中的信号处理机制 为什么写这篇呢,因为我发现我虽然能构造SROP利用,但是却并不明白为什么能这么做 最近在学习操作系统时,学习到了这么一个知识点,进程在进行上下文切换时,也会有保存寄存器,恢复寄存器这样的一个动作,但是保存的地方是内核栈,那我为什么在用户栈布置上下文(context)时能make sense呢? 经过查阅资料发现,原来这两 2026-01-15 OS #SROP #linux信号机制
fmt_bss 一道格式化字符串漏洞的题目,题目出自NewStarCTF2025的week5pwn 题目给的提示: hint:对于常规的栈上格式化字符串漏洞,可以任意构造自己的恶意数据来实现任意地址写,但是对于非栈上变量来说,就无法直接给出目的地址的指针,此时就需要留意栈上残留的内容,看看能不能找到可以利用的点(善用你的gdb) 先来看看题目逻辑 1234567891011121314151617undefine 2026-01-02 pwn #fmt #指针
shellcode 今天来分享一下关于shellcode编写技术的一些题目,在此之前,需要你对x86-64的汇编指令,寄存器调用约定,栈有一定了解 先来讲比较简单的ret2shellcode技术 前提条件是NX保护没开,即栈可执行 因此可以直接使用pwntools的一个非常强大的集成功能 12from pwn import *shellcode = asm(shellcraft.sh()) 通常payload是: 2026-01-02 pwn #寄存器 #shellcode编写 #汇编语言