windows程序堆栈分布

参数、返回地址、局部变量和ebp的关系

Debug版本:

0x004000D0  Local_3         ebp-20    <-- 局部变量3
                         0xCCCCCCCC
                         0xCCCCCCCC
0x004000DC  Local_2         ebp-14    <-- 局部变量2
                         0xCCCCCCCC
                         0xCCCCCCCC
0x004000E8   Local_1         ebp-8     <-- 局部变量1
                         0xCCCCCCCC
0x004000F0   EBP_Old        ebp        <-- 旧ebp值
0x004000F4   Retn_Addr     ebp+4   <-- 返回地址
0x004000F8   Parem_1       ebp+8    <-- 参数1
0x004000FC   Param_2       ebp+C    <-- 参数2
0x00400100   Param_3       ebp+10  <-- 参数3

Release版本:

0x004000E4  Local_3        ebp-c     <-- 局部变量3
0x004000E8  Local_2        ebp-8     <-- 局部变量2
0x004000EC  Local_1        ebp-4     <-- 局部变量1
0x004000F0  EBP_Old       ebp        <-- 旧ebp值
0x004000F4  Retn_Addr   ebp+4    <-- 返回地址
0x004000F8  Parem_1      ebp+8    <-- 参数1
0x004000FC  Param_2      ebp+C    <-- 参数2
0x00400100  Param_3      ebp+10  <-- 参数3

堆栈由高地址到低地址增长

时间: 2024-07-30 13:25:44

windows程序堆栈分布的相关文章

Windows程序调试系列: 使用VC++生成调试信息 转

Windows程序调试系列: 使用VC++生成调试信息 ZhangTao,[email protected], 译自 “Generating debug information with Visual C++”,Oleg Starodumov 出处: http://www.cnblogs.com/itrust/archive/2006/08/17/479603.aspx 引子 当我们使用调试器来调试程序时,我们希望能够单步调试到源代码中,在代码中设置断点,观察变量的值(包括用户自定义的复杂类型的

Windows程序内部运行机制 转自http://www.cnblogs.com/zhili/p/WinMain.html

一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序就可以了,微软帮我们做了非常好的封装,以至于对于很多.NET开发人员至今也不清楚Windows 平台下程序运行的内部机制,所以本专题将深入剖析下Windows 程序的内部运行机制. 二.Windows平台下几个基础概念 有朋友会问,理解了程序运行的内部机制有什么用,因为在我们实际开发中用得微软提供的

Windows程序代码重构

代码重构:在程序功能实现之后,对代码进行一定规模的整理,使之符合"高内聚.低耦合"的软件设计原则,便于维护和使用. ①用函数封装消息处理代码--对Windows程序窗口函数中的每一个case程序段进行封装以形成一个消息处理函数,而在case中调用这个函数. ②利用数组或链表实现消息映射表进一步实现代码的隔离--因为窗口函数switch-case结构实质上实现的就是一个根据消息标识来查找消息处理代码的功能,故可以用消息映射表和一段查表程序来替代它,表中的每一项可以使用一个函数指针来指向消

编写的windows程序,崩溃时产生crash dump文件的办法

一.引言 dump文件是C++程序发生异常时,保存当时程序运行状态的文件,是调试异常程序重要的方法,所以程序崩溃时,除了日志文件,dump文件便成了我们查找错误的最后一根救命的稻草.windows程序产生dump文件和linux程序产生dump文件的方式不一样,linux默认是不让产生core dump文件,只要在用户自己的~/.bash_profile文件中增加 ulimit -S -c unlimited > /dev/null 2>&1 这样程序崩溃就可以产生可调试的core d

盘点那些快速打开windows程序的快捷键

很多时候,快捷键带给我们的不仅仅是快速,还能带给我们一种心灵上的满足感.试想一下,别人都在中规中矩的用鼠标点,一步步慢慢调出所需要程序,而你却可以直接通过一个快捷键就完成了,是不是感觉特别有成就呢?今天就给大家整理了打开windows程序的常用快捷命令,windows系统拥护者的朋友们赶紧来转走收藏吧. 注:开始菜单中的"运行"是通向程序的快捷途径,输入特定的命令后,即可快速的打开Windows的大部分程序. winver检查Windows版本 wmimgmt.msc 打开Window

windows程序如何实现精准定时

有朋友问我,"小兵以太网测试仪"这个软件,是如何控制发包频率的. 我想想,干脆写一篇文章来聊聊这个问题吧. windows下,每当一个程序设定的定时器时间到了,windows会给程序发送一个WM_TIMER消息. 根据著名的windows编程书籍<Windows程序设计>的描述(在第8章), 我们知道,windows的定时器有如下的缺陷: 1. 精度不高 windows98大概是55ms,Windows NT大概是10ms. 2. WM_TIMER消息可能无法及时处理 WM

MFC第一节-windows程序内部运行机制

一.窗口 设计窗口类时: 1 typedef struct _WNDCLASS{ 2 UINT style; //如水平.垂直变化是否重绘,禁用Close,检测双击 3 WNDPROC lpfnWndProc;//窗口过程函数句柄 4 int cbClsExtra;//类附加内存 5 int cbWndExtra;//窗口附加内存 6 HANDLE hInstance;//实例句柄 7 HANDLE hIcon;//图标 8 HCURSOR hCursor;//光标 9 HBRUSH hbrBa

为编写的Windows程序提升权限

1.要求以管理员身份运行 在vs工程属性中,Linker ---> Manifest File---> UAC Execution Level,选择requireAdministrator (/level='requireAdministrator')选项 2.在main函数开始时运行以下函数代码: BOOL WINAPI EnablePrivileges() { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCur

windows 程序的本体与操作系统之间的关系

1 WinMain(hInst,hPrev,--) 2 { 3 MSG msg; 4 RegisterClass(--); 5 CreateWindow(--); 6 ShowWindow(--); 7 UpdateWindow(--); 8 while(GetMessage(--)) 9 { 10 TranslateMessage(--); 11 DispatchMessage(--); 12 } 13 return msg.wParam; 14 } 15 16 Window Procedur