首页 > TAG信息列表 > ebp

刮开有奖

首先是用exeinfope查看文件是否加壳,并同时查看该文件是32位还是64位 得出结论:32位无壳文件 然后用32位ida打开,找到main函数,再按F5反汇编 进入DialogFunc函数 点击查看代码 INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) { const char *v4; // esi

MIT JOS Lab1.3 笔记

通过符号表 Debug 调试器中的符号表 Stabs 是程序的一种信息格式, 用于在调试器中描述程序. 在 GNU 中使用“ -g”选项,GCC在.s文件中放入其他调试信息,这些信息由汇编器和链接器稍作转换,并传递到最终的可执行文件中。这些调试信息描述了源文件的功能,例如行号,变量的类型和范围以及函

逆向基础之C语言:C语言for循环九九乘法表以及裸汇编

一.for循环 <1>.格式: for( ; ;){ } 括号里的表达式 第1个.赋初值第2个.判断条件第3个.跳出循环的条件(一般自增自减)  for循环可以是1个表达式 可以是2个表达式 可以是3个表达式. <2>.for循环只有中间的条件表达式时反汇编跟while是一模一样的 int fun1() { int a;

图解栈帧运行过程

通用的栈帧结构 C语言在调用过程(函数)的时候使用了栈数据结构提供的后进先出的内存管理原则。 当Q 在执行时, p 以及所有在向上追溯到P 的调用链中的过程,都是暂时被挂起的。 当x86-64 过程需要的存储空间超出寄存器能够存放的大小时,就会在栈上分配空间,这个部分称为过程的栈帧(stack

Windbg查看调用堆栈(k*)

   无论是分析程序崩溃原因,还是解决程序hang问题,我们最常查看的就是程序调用堆栈。学会windbg调用堆栈命令,以及理解堆栈中的各个参数的意义就显得至关重要。 上图就是一个典型的Windbg堆栈,如果不理解ChildEBP、RetAddr、Args to Child等参数意义,以及它们之间的来龙去脉,调试工

[二进制漏洞]栈(Stack)溢出漏洞 Linux篇

目录[二进制漏洞]栈(Stack)溢出漏洞 Linux篇前言堆栈堆栈(Stack)概念堆栈数据存储方式函数调用函数调用C语言代码函数调用过程GDB调试函数Call返回原理函数栈帧函数栈帧描述函数栈帧调试栈溢出漏洞实战pwndbg调试开始HackPwn菜鸡小分队 [二进制漏洞]栈(Stack)溢出漏洞 Linux篇 前

C# 类继承中的私有字段都去了哪里?

最近在看 C++ 类继承中的字段内存布局,我就很好奇 C# 中的继承链那些 private 字段都哪里去了? 在内存中是如何布局的,毕竟在子类中是无法访问的。 一:举例说明 为了方便讲述,先上一个例子: internal class Program { static void Main(string[] args) {

[第五空间2019 决赛]PWN5

[第五空间2019 决赛]PWN5 这次我们换一下,尝试只用工具来解题 浅看一下 int __cdecl main(int a1) { unsigned int v1; // eax int result; // eax int fd; // [esp+0h] [ebp-84h] char nptr[16]; // [esp+4h] [ebp-80h] BYREF char buf[100]; // [esp+14h] [ebp-70h] BY

内联汇编的使用,函数返回值的外部调用

#include "windows.h" #include "stdio.h" _declspec(naked) void Fun() { _asm { push ebp; mov ebp ,esp; sub esp ,0x40; push esi; push edi; push ecx; mov eax,0xcccccccc;

BUUCTF 不一样的flag

利用PEiD打开不一样的flag.exe,无壳,32位 利用ida打开不一样的flag.exe,反编译得到代码 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { char v3[29]; // [esp+17h] [ebp-35h] BYREF int v4; // [esp+34h] [ebp-18h] int v5; // [esp+38

BUUCTF reverse3

利用PEiD打开reverse_3.exe,无壳,32位 2.利用ida打开reverse_3.exe,反编译并找到主函数 int __cdecl main_0(int argc, const char **argv, const char **envp) { size_t v3; // eax const char *v4; // eax size_t v5; // eax char v7; // [esp+0h] [ebp-188h] char v8

[MiniL CTF 2022] Reverse部分赛题复现

再不学re

函数调用栈

博客网址:www.shicoder.top 微信:18223081347 欢迎加群聊天 :452380935 这个分栏我们开始学习PWN,当然PWN也是自己的兴趣爱好,所以可能博客更新较慢,不好意思啦 前置知识 每个函数都有自己的栈帧,栈底用ebp,栈顶用esp,还有一个eip,表示即将执行的指令的地址,下面是栈的图示,是从高地址向低地

C#语法糖系列 —— 第一篇:聊聊 params 参数底层玩法

首先说说为什么要写这个系列,大概有两点原因。 这种文章阅读量确实高... 对 IL 和 汇编代码 的学习巩固 所以就决定写一下这个系列,如果大家能从中有所收获,那就更好啦! 一:params 应用层玩法 首先上一段 测试代码。 class Program { static void Main(string[] ar

详细分析一个函数进栈出栈的例子

前面我们只是讲解了一个函数的活动记录是什么样子的,相信大家对函数的详细调用过程的认识还不是太清晰,这节我们就以 VS2010 Debug 模式为例来深入分析一下。 请看下面的代码: void func(int a, int b){ int p =12, q = 345; } int main(){ func(90, 26); return 0; }

一个函数在栈上到底是怎样的

函数的调用和栈是分不开的,没有栈就没有函数调用,本节就来讲解函数在栈上是如何被调用的。 栈帧/活动记录 当发生函数调用时,会将函数运行需要的信息全部压入栈中,这常常被称为栈帧(Stack Frame)或活动记录(Activate Record)。活动记录一般包括以下几个方面的内容: 1) 函数的返回地址,也就是

2022DASCTF X SU 三月春季挑战赛 easyre

2022DASCTF X SU 三月春季挑战赛 easyre 前奏 查壳 查壳,asp壳,esp定律脱之,修复可以看我的上一篇文章 main函数 main函数的反汇编代码 int __cdecl main(int argc, const char **argv, const char **envp) { unsigned __int8 Dest[50]; // [esp+1Ch] [ebp-74h] BYREF char Str[

CTF_Pwn保护机制相关(动态更新)

保护机制及其编译选项 NX -z execstack / -z noexecstack (关闭 / 开启) 不让执行栈上的数据,于是JMP ESP就不能用了 即可写处不可执行,可执行处不可写 Canary -fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 栈里插入cookie信息 又名金

安全之路 -- 多核处理器同步函数KiIpiGenericCall函数在XP SP3下的寻址方式

前言 众所周知,在进行内核Inline Hook的时候,如果需要Patch的字节数少于等于8,我们可以借助CMPXCHG8B或者Interlockedcompareexchange64大法进行原子挂钩(这两个函数会申请总线锁和缓存锁,达到多核同步的效果);但是如果字节数大于8怎么办呢?我们可以使用DPC播报(KeInsertQueueDpc或者KeGene

BUUCTF_Re_[ACTF新生赛2020]easyre

有个upx的壳,脱掉后,主函数代码: int __cdecl main(int argc, const char **argv, const char **envp) { char v4[12]; // [esp+12h] [ebp-2Eh] BYREF int v5[3]; // [esp+1Eh] [ebp-22h] char v6[5]; // [esp+2Ah] [ebp-16h] BYREF int v7; // [esp+2Fh] [ebp-11h] in

c++之函数与函数重载

一、函数默认参数 1.1 函数默认参数简介 在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。 比如:我们要实现一个 分页 插件,在使用时可以由用户指定当前是第几页以及每页显示多少条数据。 如果用户没

ret2libc 3

ret2libc 3 漏洞点 src开辟了256字节空间,dest开辟了56个地址 strcpy将src中的字符串拷贝到dest中 src可控 反汇编 int __cdecl main(int argc, const char **argv, const char **envp) { char **v4; // [esp+4h] [ebp-11Ch] int v5; // [esp+8h] [ebp-118h] char src[256]

栈迁移原理介绍与应用

本文将对CTF Pwn中「栈迁移」(又称「栈转移」)这一技术进行介绍与分析,希望读完本文后以下问题将不再困扰你: 什么是栈迁移?栈迁移解决了什么问题?怎么使用栈迁移这个技巧? 开始之前,有如下预备知识会极大提升你的阅读体验: CTF Pwn是在做什么?提权(Getshell)是什么意思?在操作系统内

c语言深度理解(函数栈帧与可变参数列表)

文章目录 函数栈帧总结 函数栈帧 (来自比特蛋哥的c语言深度解析的课堂板出) ebp:栈底寄存器 esp:栈顶寄存器 eip:指令寄存器,用来存储下一条要执行的语句 ebp指向的是一个函数栈帧的栈底,栈区使用空间是从高地址向低地址使用。刚开始时,在ebp-8的地址处放入A值,ebp-14的位置

数组和指针的区别

// test.c void test() { char array[4] = {0}; *(array + 0) = 0x00; array[1] = 0x11; *(array + 2) = 0x22; array[3] = 0x33; char *pointer = array; pointer[0] = 0x00; pointer[1] = 0x11; pointer[2] = 0x22; pointer[3] = 0