• 2024-07-01windows USB设备驱动开发-双角色驱动
    在USB的通讯协议中,规定发起连接的一方为主机(Host),接受连接的一方为设备,这可以用U盘插入电脑举个例子,当U盘插入电脑后,电脑这边主动发起查询和枚举,U盘被动响应查询和数据存取。USB双角色驱动程序堆栈体系结构Windows现在支持USB双角色控制器,从Windows10开始,包括家庭版、
  • 2024-06-22golang runtime.Caller 获取调用堆栈信息, Caller(1) 和 Caller(2) 的区别
     funcwhoCalledMe(){//获取调用堆栈信息_,fileName,lineNo,ok:=runtime.Caller(2)if!ok{fmt.Println("Failedtogetcallerinformation")return}fmt.Printf("Calledfrom:%s:%d\n",fileName,lineNo
  • 2024-06-22C/C++ 堆栈stack算法详解及源码
    堆栈(stack)是一种常见的数据结构,具有"先进后出"(LastInFirstOut,LIFO)的特性。堆栈算法允许在堆栈顶部进行元素的插入和删除操作。堆栈的操作包括:入栈(Push):将元素添加到堆栈的顶部。出栈(Pop):从堆栈的顶部移除元素。取栈顶元素(Top):获取堆栈顶部的元素,但不对其进行删除操作。
  • 2024-06-21栈帧浅析,堆栈漏洞概述——【太原理工大学软件安全期末补充】
    在上一篇文章中我说实验一不重要,确实没必要完全按照实验内容逐字逐句理解,但是这里我们补充一个知识点栈帧(StackFrame)是计算机程序执行过程中,调用栈(CallStack)中的一个单元,它包含了函数调用时的上下文信息。每当一个函数被调用时,一个新的栈帧就会被创建并被推入调用栈。栈帧
  • 2024-06-19Visual Studio + Qt项目 数组超界不会报错。 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出。
    使用vs+Qt项目时,数组超界不会崩溃和报错的问题。 开启以下2个即可。  注意:1.启用了地址擦除系统会造成QT的异常崩溃,原因未知。2.有时会报cookie的错误,数组超界了,在退出函数时才会报错。   
  • 2024-06-18ARMv7 寄存器 工作模式 和指令集 和 堆栈回溯
    因此,在图4-1中,如果处理器是在IRQ模式,我们可以看见R0,R1...R12(与在用户模式看到的相同的寄存器),加上SP_IRQ和LR_IRQ(仅在IRQ模式中可以访问的寄存器)和R15(程序计数器,PC)。我们通常不必指定模式中的寄存器名。如果我们在一行代码中引用R13,处理器会访问当前模式对应的SP寄存器。
  • 2024-06-18Missing separate debuginfos类型崩溃分析
    背景说明今天遇到一个偶现崩溃,因为复现概率非常低,并且出现的时候没有收集coredump信息,因此没有去定位,今天复现了两次,终于被我拿到完整的堆栈信息,堆栈信息如下分析过程1.打开堆栈日志,发现0号位置没有具体的函数信息,只能先看1号位置的堆栈信息,通过打印变量,发现都很正常;2.尝试能
  • 2024-06-15堆栈图
    存储参数1.push先执行push2,在push1。栈从上往下(1,2是参数)call—〉返回一个地址,并将下一个指令地址存入栈中401171—〉函数执行完的返回地址(简称返回地址)保留栈底2.pushebp将ebp里的值放入了栈里面提升栈顶3.movebp,esp将esp里的值放入ebp中4.Subesp,40esp-四零,(四
  • 2024-06-14Java数据结构:从基础到高级应用
    Java是一种广泛应用的编程语言,拥有强大的数据结构库,使程序员能够轻松地处理各种数据和算法。本文将深入探讨Java中的数据结构,从基础概念到高级应用,包括示例代码和实际用例。第一部分:基础数据结构1.数组(Array)Java中的数组是一种基本的数据结构,用于存储一组相同类型的元素。
  • 2024-06-12常见的数据寻址方式
    寄存器间接寻址:想象一下,你有一个信使(寄存器),他知道你想要的东西(操作数)放在哪里。你告诉信使去拿,但他得先看看地址本(寄存器里的地址信息)才知道东西具体在哪。这种方式挺快的,但信使可能要跑几趟,因为他得先查地址本,再去拿东西。相对寻址:这就像是你告诉信使,从当前位置(程序计数器
  • 2024-06-08再探堆栈欺骗之动态欺骗
    本文首发先知社区:https://xz.aliyun.com/t/14542在上篇文章https://xz.aliyun.com/t/14487中,我们讨论了静态堆栈欺骗,那是关于hooksleep,在睡眠期间改变堆栈行为的欺骗,这篇文章我们来一起讨论一下主动欺骗,允许任意函数发起时的堆栈欺骗。相关的基础知识在上篇文章已经介绍,并
  • 2024-06-08三探堆栈欺骗之Custom Call Stacks
    本文首发阿里云先知社区:https://xz.aliyun.com/t/14592背景知识在之前的文章中,我们介绍了静态欺骗和动态欺骗堆栈,今天我们来一起学习一下另一种技术,它被它的作者称为CustomCallStacks,即自定义堆栈调用。关于堆栈欺骗的背景我们就不再说了,这里我们补充一下回调函数和windows
  • 2024-06-06初探堆栈欺骗之静态欺骗
    本文首发先知社区:https://xz.aliyun.com/t/14487首先介绍一下堆栈欺骗的场景,当我们用一个基本的shellcodeloader加载cs的shellcode,在没有对堆栈做任何事情时,我们的堆栈是不干净的,我们去看一下堆栈时会发现有很多没有被解析的地址在其中,这显然是不正常的,因此av/edr会重点
  • 2024-06-05[转][翻译]深入理解Win32结构化异常处理(四)
     如果你已经走了这么远,不把整个过程讲完对你有点不公平。我已经讲了当异常发生时操作系统是如何调用用户定义的回调函数的。我也讲了这些回调的内部情况,以及编译器是如何使用它们来实现__try和__except的。我甚至还讲了当某个异常没有被处理时所发生的情况以及系统所做的扫尾工
  • 2024-06-05c函数堆栈
    使用反汇编分析代码1.无参数无返回值voidfun1(){}intmain(intargc,char*argv[]){ fun1(); return0;}反汇编分析2.有参无返回值代码voidfun2(intx,inty){ x+y;}intmain(intargc,char*argv[]){ fun2(1,2); return0;}返汇编分析3.无参
  • 2024-05-25js的闭包原理——通过引擎的堆栈解析
    有段代码如下:functioncreateCounter(){leti=0;functionincrement(){i++;}functiongetValue(){returni;}return{increment,getValue}}constcounter=createCounter();在这段代码中,运用了函数的3个特点:在函
  • 2024-05-23堆栈性能分析
    在Golang中,对象的分配和存储是由运行时系统进行管理的。对象可以被分配在堆上或栈上,具体取决于对象的大小和生命周期。堆上分配:对象的分配在堆上发生时,可以使用 new 或 make 关键字来创建。new 关键字用于创建各种类型的对象,并返回一个指向分配对象的指针。make 关
  • 2024-05-23基于双向堆栈的二叉树双向迭代算法
    前言之前一直在研究avl树的迭代算法。我参考了C++标准库map的实现,发现他们在树节点上使用了parent指针+一个状态标志位的形式,去实现动态迭代。但是我不想用parent指针,因为觉得会增加调整指针的时间还有浪费存储空间。于是,在我的不屑努力下,终于,找到了一种基于堆栈实现的双向迭代
  • 2024-05-22《Linux内核完全注释》学习笔记:2.4 Linux内核进程控制
    程序是一个可执行的文件,而进程(process)是一个执行中的程序实例。利用分时技术,在Linux操作系统上同时可以运行多个进程。分时技术的基本原理:把CPU的运行时间划分成一个个规定长度的时间片(timeslice),让每个进程在一个时间片内运行。当进程的时间片用完时系统就利用调度程序
  • 2024-05-22CSP历年复赛题-P1044 [NOIP2003 普及组] 栈
    原题链接:https://www.luogu.com.cn/problem/P1044题意解读:一组数入栈、出栈的方案数,如果了解卡特兰数,此题可以秒杀;如果不了解,也可以通过递归或者递推来解决;最次,可以通过DFS暴搜出方案数,当然对于n个数,一共有n次入栈、n次出栈,一共2n次,每次要么入栈要么出栈,总搜索次数在22n规模,n最
  • 2024-05-11在Linux中,什么是LAMP和LNMP堆栈?
    LAMP和LNMP都是用于搭建动态网站的常用软件堆栈,它们分别代表不同的组件组合,旨在提供高效、稳定的Web服务环境。下面是这两个堆栈的详细介绍:1.LAMP堆栈LAMP是一个开源软件堆栈的首字母缩写,代表Linux(操作系统)、Apache(Web服务器)、MySQL(数据库管理系统)和PHP(服务器
  • 2024-05-08dump net core lldb 分析 (第五章 死循环调试分析)
    centos7lldb调试netcore应用的内存泄漏和死循环示例(dump文件调试)clrthreads-live先看看还在运行的线程有那些。然后通过threadselect线程编号(lldb命令)。来切换到当前线程。线程编号不是列表种的id字段,而是最前面一行的id。lldb可以通过threadlist命令来列举所有线程。
  • 2024-04-25安全测试之探索windows游戏扫雷
    扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次。通过动态调试,逆向和来写一个扫雷辅助工具从而提高逆向与编码技能。动态调试(分析)首先进行扫雷程
  • 2024-04-17ImageJ使用教程(一):开始使用
    目录简介界面介绍Edit->Options开始使用打开图片放大拖拽图片信息色彩分析保存图片总结参考文章ImageJ软件简介ImageJ是一个基于java的公共的图像处理软件,它是由美国国立卫生研究院开发的,可运行于Windows、Linux等多种平台。软件下载解压后可直接使用,注意软件目录不要有中文,下
  • 2024-04-14汇编语言简易教程(13):栈缓存溢出
    汇编语言简易教程(13):栈缓存溢出当程序溢出基于堆栈的动态变量时,可能会发生堆栈缓冲区溢出。例如,如果一个程序分配并使用一个基于堆栈的本地数组,该数组包含50个元素,并且数组中存储了50个以上的元素,则会发生溢出。这种溢出通常是坏的,通常会导致程序错误,甚至可能使程序崩溃