为什么VS下一个int总是从ebp-8开始,ebp-4对应的4个字节干吗用了?

C/C++ > C语言 [问题点数:20分,结帖人dpdp_2012]
等级
本版专家分:1931
结帖率 100%
等级
本版专家分:5427
勋章
Blank
技术圈认证(专家版) 博客专家完成年度认证,即可获得
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
Blank
GitHub 绑定GitHub第三方账户获取
Blank
红花 2012年11月 其他开发语言大版内专家分月排行榜第一
2011年5月 其他开发语言大版内专家分月排行榜第一
2010年6月 其他开发语言大版内专家分月排行榜第一
2010年5月 其他开发语言大版内专家分月排行榜第一
2010年4月 其他开发语言大版内专家分月排行榜第一
2008年1月 其他开发语言大版内专家分月排行榜第一
2007年12月 其他开发语言大版内专家分月排行榜第一
2007年11月 其他开发语言大版内专家分月排行榜第一
2007年4月 其他开发语言大版内专家分月排行榜第一
2006年12月 其他开发语言大版内专家分月排行榜第一
2006年11月 其他开发语言大版内专家分月排行榜第一
2006年10月 其他开发语言大版内专家分月排行榜第一
2006年7月 其他开发语言大版内专家分月排行榜第一
2006年6月 其他开发语言大版内专家分月排行榜第一
2005年11月 其他开发语言大版内专家分月排行榜第一
2005年10月 其他开发语言大版内专家分月排行榜第一
2005年9月 其他开发语言大版内专家分月排行榜第一
2005年6月 其他开发语言大版内专家分月排行榜第一
2005年5月 其他开发语言大版内专家分月排行榜第一
2005年3月 其他开发语言大版内专家分月排行榜第一
2005年2月 其他开发语言大版内专家分月排行榜第一
2004年10月 其他开发语言大版内专家分月排行榜第一
2004年9月 其他开发语言大版内专家分月排行榜第一
2005年2月 硬件使用大版内专家分月排行榜第一
2004年8月 硬件/嵌入开发大版内专家分月排行榜第一
等级
本版专家分:5427
勋章
Blank
技术圈认证(专家版) 博客专家完成年度认证,即可获得
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
Blank
GitHub 绑定GitHub第三方账户获取
Blank
红花 2012年11月 其他开发语言大版内专家分月排行榜第一
2011年5月 其他开发语言大版内专家分月排行榜第一
2010年6月 其他开发语言大版内专家分月排行榜第一
2010年5月 其他开发语言大版内专家分月排行榜第一
2010年4月 其他开发语言大版内专家分月排行榜第一
2008年1月 其他开发语言大版内专家分月排行榜第一
2007年12月 其他开发语言大版内专家分月排行榜第一
2007年11月 其他开发语言大版内专家分月排行榜第一
2007年4月 其他开发语言大版内专家分月排行榜第一
2006年12月 其他开发语言大版内专家分月排行榜第一
2006年11月 其他开发语言大版内专家分月排行榜第一
2006年10月 其他开发语言大版内专家分月排行榜第一
2006年7月 其他开发语言大版内专家分月排行榜第一
2006年6月 其他开发语言大版内专家分月排行榜第一
2005年11月 其他开发语言大版内专家分月排行榜第一
2005年10月 其他开发语言大版内专家分月排行榜第一
2005年9月 其他开发语言大版内专家分月排行榜第一
2005年6月 其他开发语言大版内专家分月排行榜第一
2005年5月 其他开发语言大版内专家分月排行榜第一
2005年3月 其他开发语言大版内专家分月排行榜第一
2005年2月 其他开发语言大版内专家分月排行榜第一
2004年10月 其他开发语言大版内专家分月排行榜第一
2004年9月 其他开发语言大版内专家分月排行榜第一
2005年2月 硬件使用大版内专家分月排行榜第一
2004年8月 硬件/嵌入开发大版内专家分月排行榜第一
等级
本版专家分:252
等级
本版专家分:5427
勋章
Blank
技术圈认证(专家版) 博客专家完成年度认证,即可获得
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
Blank
GitHub 绑定GitHub第三方账户获取
Blank
红花 2012年11月 其他开发语言大版内专家分月排行榜第一
2011年5月 其他开发语言大版内专家分月排行榜第一
2010年6月 其他开发语言大版内专家分月排行榜第一
2010年5月 其他开发语言大版内专家分月排行榜第一
2010年4月 其他开发语言大版内专家分月排行榜第一
2008年1月 其他开发语言大版内专家分月排行榜第一
2007年12月 其他开发语言大版内专家分月排行榜第一
2007年11月 其他开发语言大版内专家分月排行榜第一
2007年4月 其他开发语言大版内专家分月排行榜第一
2006年12月 其他开发语言大版内专家分月排行榜第一
2006年11月 其他开发语言大版内专家分月排行榜第一
2006年10月 其他开发语言大版内专家分月排行榜第一
2006年7月 其他开发语言大版内专家分月排行榜第一
2006年6月 其他开发语言大版内专家分月排行榜第一
2005年11月 其他开发语言大版内专家分月排行榜第一
2005年10月 其他开发语言大版内专家分月排行榜第一
2005年9月 其他开发语言大版内专家分月排行榜第一
2005年6月 其他开发语言大版内专家分月排行榜第一
2005年5月 其他开发语言大版内专家分月排行榜第一
2005年3月 其他开发语言大版内专家分月排行榜第一
2005年2月 其他开发语言大版内专家分月排行榜第一
2004年10月 其他开发语言大版内专家分月排行榜第一
2004年9月 其他开发语言大版内专家分月排行榜第一
2005年2月 硬件使用大版内专家分月排行榜第一
2004年8月 硬件/嵌入开发大版内专家分月排行榜第一
等级
本版专家分:1931
dpdp_2012

等级:

【2】 缓冲区溢出 一个字节溢出 覆盖EBP

由于nstrcpy()函数,尽管它表面上对copy的长度进行了限制,但是它不小心在for循环中使形参可以等于输入长度len,这就造成存在溢出一个字节的可能性,而该字节恰好可以覆盖到buf所在函数的(foo函数)所保存的旧的ebp的...

关于编译型语言函数的调用(二)

上文中提到的局部变量的地址,第一个是[ebp-4],由于32位内存对齐的原因,第二是[ebp-8],对于VC7以上的版本,这地址可能会不一样 比如第一个可能是[ebp-8],第二飞到[ebp-14],这是VS.NET的VC编译器在每局部变量...

C++反汇编学习笔记7——数组和指针以及他们的寻址

先通过一个简单的例子来看一下数组和普通变量在初始化时的不同之处: 这是数组初始化:  42: int nArry[5] = {1, 2, 3, 4, 5}; 0042B758 mov dword ptr [ebp-1Ch],1  0042B75F mov dw

天书夜读 第章笔记

2.lea 取得地址(第二参数)后放入第一个参数中,也可用来赋值,如lea edi,[ebp-0cch],中括号是取得地址的内容,即取得ebp-0cch这地址的内容,也就 相当于mov edi,ebp-0cch,但mov操作符不支持后一个参数

栈帧%ebp,%esp详解

函数的每次调用,都有它自己独立的一个栈帧,这栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。典型的存取器安排,观察栈在其中的...

栈帧ebp,esp详解

函数的每次调用,都有它自己独立的一个栈帧,这栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。典型的存取器安排,观察栈在其中的...

pwnable(simple login)leave和ret的深入研究

Win32汇编中局部变量的使用方法可以解释一个很有趣的现象:在DOS汇编的时候,如果在子程序中的push指令和pop指令不配对,那么返回的时候ret指令堆栈里得到的肯定是错误的返回地址,程序也就死掉了。但在Win32汇编...

汇编里的结构体

汇编的角度来看,结构体是种另类的数组。差别在于内存的分配上。 数组 结构体 内存分配 相同类型连续 类型可能不相同 int a[4]={0,1,2,3}; String str="汇编来看是这样的"; __asm{ mov dword ptr...

EIP & EBP & ESP

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果C语言来解释,可以把这些寄存器当作变量看待。 比方说:add eax,-2 ; //可以认为是给变量eax加上-2...

【汇编与C之间的关系】 push bp(或 push %ebp)mov ebp esp的作用!!!

最近,读汇编与c的关系;读到将c源码反汇编时,有段代码不太...int bar(int c, int d) { int e = c + d; return e; } int foo(int a, int b) { return bar(a, b); } int main(void) { foo(2, 3); return 0; }

暑假pwn训练(十四) 记录一下我调试pwn的过程

emem其实我是顺便记录一下我调试的命令哈 pwngdb 这工具调试对堆有好处然后gdb-peda...这里我就简单的程序来练一下我的调试技术 main函数 int __cdecl main() { int buf; // [esp+4h] [ebp-14h] char v2;...

ida吧

经过IDA反编译后的代码是:int __cdecl Ompress(void *Dst, int a2, int a3, int a4)//dst( [esp+24h][ebp+4h] );a2([esp+28h][ebp+8h]);a3([esp+2Ch][ebp+Ch]);a4( [esp+30h][ebp+10h] ){ _BYTE *v4; // ecxint v5;...

ASM 的另类操作。。。

在 ASM 中,对于区分变量定义的类型时,对于初学者可能会有点茫然,毕竟,那些指令不是很好理解, 例如 int 的定义------------:mov [ebp+var_14], 1 double------------------: mov dword ptr [ebp+var_14], 1 ...

汇编与易语言

堆栈结构 二 例子解析 00000000 - 60 pushad 00000001 - 8B 4D 10 mov ecx, dword [ebp+0x10] 00000004 - 8B 7D 08 mov edi, dword [ebp+0x08] 00000007 - 8B 75 0C mov esi, dword [ebp+0x0C] 0000000A...

对于ESP、EBP寄存器的理解

转载地址: ... esp是栈指针,是cpu机制决定的...ebp只是存取某时刻的esp,这时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通过ebp对栈进行操作,比如获取函数参数,局部变量等,实际上使用esp也可以;

c指针5

int* arr=[5]={0};arr[0]=(int*)10;arr[1]=(int*)10;arr[2]=(int*)10;arr[3]=(int*)10;arr[4]=(int*)10; ...mov dword ptr[ebp-4],0Ah int b = 20; mov dword ptr[ebp-8],14h int c = 30; mov

指针一定是4个字节吗?!

前言:在CSDN论坛经常会看到一些关于类成员函数指针的问题,起初我并不在意,以为成员函数指针和普通的函数指针是一样的,没有什么太多需要讨论的。当我找来相关书籍查阅了一番以后,突然意识到我以前对成员函数指针...

360安全杯初赛 re题解

观察输入 检测了长度32 然后将前16字节进行拷贝 之后调用了一个loc_404600和change_2进行了变换和check 成功通过会输出Congratulations!!! 所以目的很明显 就是逆向这两函数 loc_404600 进入发现根本没有...

C语言定义整型变量为什么推荐使用int类型?

在初学C语言时,记得老师讲过存储整型变量可以定义char、short、int,随着计算机硬件的发展,可以忽略int类型带来的字节浪费,统一定义为int类型。可真正的原因是什么?本文反汇编角度进行剖析说明,使用编译器...

汇编的眼光看C++(开篇)

很多朋友,包括我自己在内,对C++语言的很多特性不是很明白。特别是几年前找工作的时候,为了应付来自工作单位的考试,我经常逼着自己的去记住一些复杂的试题和答案。可是常常时间已过,一切又回到了原点。...

C语言反汇编入门实例

VS2013+WIN7+Debug --- g:\coding\poet\test\ctest.cpp ---------------------------------------------- #include using namespace std; int main() { ;将ebp入栈,保存ebp,保护原现场 00D252A0 push ebp ;将esp...

指针学习

PS:话说当时脑浊,学不明白指针,还因幻想Java没有指针而欣喜一番,后来发现这种不明不白的太难受了,还是认真啃掉这块硬骨头吧,此文就是当时为了理解指针,汇编的角度去学习的一个过程。 #include int main...

汇编

" SUB:不带借位的减法指令。 【指令格式】SUB OP1,OP2 ...【指令功能】(OP1)←(OP1)-(OP2),将OP1-OP2的值,保存在OP1中,如: ...SUB [EAX],1 以EAX寄存器内存地址,将该地址的值减1,...开始两行代码的意思是先将ebp

字节缓冲区溢出

溢出专题()单字节缓冲区溢出 http://tech.ccidnet.com/art/1101/20050407/626435_1.html 通常的缓冲区溢出就是通过重写堆栈中储存的EIP的内容,来使程序跳转到我们的shellcode处去执行。其实,即使缓冲区只...

C和汇编混合编程--------函数调用后ebp、esp值问题

今天老师又给了一个程序,让我们分析,记录一下分析过程 程序: #include "stdio.h" #include "string.h" char *shellcode="\x64\x65\x66\x67\x68\x69\x70\x71\x05\x10\x40\x00"; void fun1(int a, int b) { ...

计算机底层各种寄存器EIP & EBP & ESP

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果C语言来解释,可以把这些寄存器当作变量看待。 比方说:add eax,-2 ; //可以认为是给变量eax加上-2...

VC6对函数返回过程的优化(

1: // test.cpp : Defines the entry point for the console application.2: //3:4: #include "stdafx.h"5:6: struct complex{7: int i; //x8: int j; //y9: int k; //z10: 

二进制安全_C语言中数据类型

1、C语言中的数据类型: 2、学习数据类型的三要素: ... 1、存储数据的宽度 2、存储数据的格式 3、作用范围(作用... char 8BIT 1字节 short 16BIT 2字节 int 32BIT 4字节 long ...

相关热词 c#正则表达式 验证小数 c# vscode 配置 c#三维数组能存多少数据 c# 新建excel c#多个文本框 c#怎么创建tcp通讯 c# mvc 电子病例 c#如何打印二维码 c#实现dbscan算法 &#39 c#