ebp
  • 2024-06-20探究C语言函数栈帧的创建和销毁
    引言在C语言程序中,每当一个函数被调用时,系统都会在栈上为该函数分配一块内存空间,这块内存空间就被称为栈帧。栈帧中包含了函数执行所需的所有信息,如局部变量、参数、返回地址等。栈帧的创建和销毁是函数调用的核心部分,它们确保了函数能够正确地执行和返回。本文将在VS2013环
  • 2024-06-16裸函数和调用约定
    一、裸函数在正常的函数编译中,即使函数没有定义函数体的内容,编译器也依然会编译出部分汇编指令用来执行函数。但是如果定义一个裸函数void_declspec(naked)test()编译器将不会操作这个函数,不会给其生成汇编指令(但是会在主函数中生成call和jmp指令指向这个裸函数)可以看到
  • 2024-06-15堆栈图
    存储参数1.push先执行push2,在push1。栈从上往下(1,2是参数)call—〉返回一个地址,并将下一个指令地址存入栈中401171—〉函数执行完的返回地址(简称返回地址)保留栈底2.pushebp将ebp里的值放入了栈里面提升栈顶3.movebp,esp将esp里的值放入ebp中4.Subesp,40esp-四零,(四
  • 2024-06-13pwn学习-栈迁移
    栈迁移:简单理解就是在栈溢出的时候可溢出的字符过少,只能溢出ebp和ret的地址,可以使用leave_ret这个gadget来实现栈的迁移。在栈中,默认情况下汇编语言在栈结束的时候都默认会执行一次leave和ret指令,我们利用这个特性将返回地址修改为leave_ret的gadget,将会执行两次leave和ret的操
  • 2024-06-08计算机组成原理复习笔记
    前言就是按照考试的题型写的总结非常应试版题型一、进制转换只考十进制二进制十六进制之间的相互转换一个个看(1)十进制转其他转二进制:除以2从小到大取余数(0或1)转十六进制:除以16从小到大取余数(0到f)(2)二进制十六进制转十进制每位数字乘以相应的幂数再相
  • 2024-06-02dbg修改EIP动调 [BJDCTF 2020]Easy
    教程多是patching,但是我下载错误(以后有时间再试试),那用dbg吧还有这道题蜜汁让我幻视pwn题目DieIDA主函数很好找,代码只是输出提示,没有其他东西了关键函数在其他地方 看看左边函数框 发现在main函数前面有一个名字一看就是自定义的函数ques这个函数在main函数之前运行
  • 2024-05-14win32下vs2013汇编传参和局部变量栈的分配
    1、传参无论是用寄存器还是栈,最终都要压入栈中。2、第一个参数的位置是ebp+8,少于4byte的数据类型按照4Byte压栈,第n个参数的地址是[ebp+4+4n],ebp+4是返回地址。8byte的数据类型,会先开辟8字节的栈空间esp-8,再把数据放入栈中。下一个参数的地址相应的要加8。3、局部变量用函数自己
  • 2024-05-13win32下汇编代码结构学习
    通常win32下三种不同的调用模式,不同版本的编译器,对汇编出来的代码都会代理一些差别。__cdecl是默认的方式,采用外平栈。__stdcall,采用内平栈。__fastcall,因为采用2个寄存器传参,所以多于2个参数后也会用外平栈的方式。传入的第一个参数位置在ebp+8,后面依次加4个字节,即第n个参数的
  • 2024-05-11buuctf-pwn-ciscn_2019_es_2
    checksecida我们看到在vul函数中,有两个read函数,每个都读取了0x30(48)大小的字符,并放入字符数组s中,也就是说我们能溢出的只有8个字节,刚好覆盖到ebp和返回地址所以我们需要栈迁移,使我们能溢出更多字节首先利用第一个read,输入40字节的数据,刚好覆盖到ebp,然后printf就会顺带打印
  • 2024-04-18C & x86msvc_asm第一天
    做浙大PTA的7-105寻找250时候,对scanf的的机制不太熟悉,于是想到联系之前学过的汇编来理解。这里可以看出,scanf接受一个指针和一个变量地址。注意这里的OFFSET操作符,相当于C++中的&。读%d也就是缓冲区里的内容,放到_tmp$[ebp]里面。但是这里汇编看不到_scanf的细节,这里先不讨论。
  • 2024-04-08newstart 部分题解和pwn相关的学习
    做newstart的pwnpieee题的pie的学习首先:对于pieee这道题很简单的栈溢出,除了NX其他的保护都开了,然后呢在左边也发现了后门函数相对偏移为0x1264(对于这里我们只用关心后三位,因为pie不会随机化地址的低12位,通俗点说就是我们十六进制地址的后三位)而一般而言后三位的地址能够确定我
  • 2024-03-272017年全国大学生信息安全竞赛-填数游戏
    2017年全国大学生信息安全竞赛填数游戏:题目描述:答案加flag{}解题方法:题目附件下载下来发现是一个.exe文件,运行一下弹出一个输入框,随便输入几个数字,得到一个fail这里我们还是一样的把它放进exeinfope.exe去查看一下他的属性信息:这里我们发现是一个32位的无壳的exe文件,我们将
  • 2024-03-20golang 多返回值的实现原理-转载
    之前一次面试时,面试官问到你知道golang的多返回值的实现吗,一脸懵逼,平时主要注重项目应用开发,对这块确实没关注,答得不好,各位大佬,以后建议也加强下基础哦。今天看看golang中多返回值的实现。可以简单认为c中多返回值的实现,其实就是通过寄存器将返回参数以指针形式传入传入参
  • 2024-03-16栈迁移
    栈迁移栈溢出可用的长度无法构造一个完整的ROP链,使用栈迁移换到另外的足够的地址去构造哦ROP链。核心两次leave;ret指令。leave->movespebp;popebp即将ebp的内容赋值给ebp(ebp指向ebp原先存储的地址),然后将esp指向ebp原先的地址ret->popeip即将栈顶内容(下一条指令的
  • 2024-03-14滴水逆向笔记系列-c语言总结2-10.变量-11.if逆向-12.正向基础
    第十课c语言31.编码ASCII标准的ASCII编码只需要七位,第八位在拓展ASCII编码使用GB23122.局部变量和全局变量下面代码输出结果为1111(x=11改变了全局的x)第十一课c语言41.内存图2.逆向参数个数3.简单逆向if代码4.if...else...反汇编判断跳转执行一部分代
  • 2024-03-07堆与栈
    1堆与栈使用内存时,需要考虑分配、回收2个问题。堆和栈是使用内存的2种不同方式。堆通用性好,但需要复杂的内存管理算法配合使用栈针对函数做了优化,性能很好,但通用性差。堆堆的设计思路是:关注点分离把内存的分配回收和应用程序实际读写内存分开内存管理模块负责内存的分
  • 2024-03-02DEP机制分析报告
    DEP机制分析报告DEP概述​ 数据执行保护(DataExecutionPrevention),将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。DEP的工作状态Optin:默认仅将DEP保护应用于Windows系
  • 2024-01-2527派生类的继承过程
    派生类的继承过程派生类如何初始化从基类继承来的成员变量?派生类继承所有可继承的成员变量和方法,除了构造和析构函数通过调用基类的构造函数初始化继承来的成员变量,调用基类的析构函数释放继承来的成员变量通过调用派生类的构造函数初始化新的成员变量,调用派生类的析构函数释
  • 2024-01-24对于push,pop,call,leave,ret的理解
    push指令比如pushebp就是把ebp的值放在esp所指的地方,然后esp-4(32位,以下均为32位)。pop指令popebp就是把esp所指的地方的值给ebp,然后esp+4call指令call函数的时候,把eip的下一行存到esp所指的位置,然后esp-4leave指令leave指令可以等价于movesp,ebp;popebpret指令等价于p
  • 2024-01-14栈迁移的简单学习总结
    一:栈迁移是什么二:有什么作用:作用一:顾名思义就是迁移栈,这样可以扩大我们溢出的空间,因为有时候溢出的空间只可以修改ebp或者ret作用二:任意地址写,具体的可以看这位师傅:pwn技术分享-栈迁移1_哔哩哔哩_bilibili三:原理是什么原理网上有许多写的非常好的,这里我推荐:https://z
  • 2024-01-08【C语言】函数栈帧的创建和销毁
    1、什么是函数栈帧我们在写C语言代码的时候,经常会把一个独立的功能抽象为函数,所以C程序是以函数为基本单位的。那函数是如何调用的?函数的返回值又是如何待会的?函数参数是如何传递的?这些问题都和函数栈帧有关系。函数栈帧(stackframe)就是函数调用过程中在程序的调用栈(callstack)所
  • 2023-12-31ciscn_2019_es_2
    ciscn_2019_es_2栈迁移read()存在溢出,但是只有0x30个位置不能拿到shell,所以考虑栈迁移通过泄露参数s在栈上的位置,将payload写入栈上迁移栈到参数s的位置,运行写入的payload拿到shellleaved=>movesp,ebppopebp#清除栈帧,初始化到执行前的样子ret=>popeipj
  • 2023-12-30pwn2_sctf_2016
    pwn2_sctf_2016lib地址泄露vuln()程序对输入的v2做了限制首先要利用整数绕过if(v2>32)的限制程序中没有现成的shell所以要通过printf泄露lib手动构造shellfrompwnimport*context.log_level='debug'io=process('./pwn2_sctf_2016')#io=gdb.debug('./
  • 2023-12-30网络攻防技术——栈溢出
    作业题目本实验的学习目标是让学生将从课堂上学到的有关缓冲区溢出漏洞的知识进行实践,从而获得有关该漏洞的第一手经验。缓冲区溢出是指程序试图将数据写入预先分配的固定长度缓冲区边界之外的情况。恶意用户可利用此漏洞改变程序的流控制,甚至执行任意代码。此漏洞是由于数据存储
  • 2023-12-07PWN入门之Stack Overflow
    本文是i春秋论坛签约作家「Binarystar」分享的技术文章,旨在为大家提供更多的学习方法与技能技巧,文章仅供学习参考。大家好,我是Binarystar,目前从事于公安行业,擅长Web、二进制和电子取证方向。能把网络安全技能运用在工作中,与我的职业结合起来做有意义的事,是非常自豪的,我希望通