gpt4 book ai didi

c++ - main() 的激活记录

转载 作者:行者123 更新时间:2023-11-30 18:06:50 27 4
gpt4 key购买 nike

我是倒车新手。如果问题听起来像初学者,我很抱歉:)我已经在 XP SP3 上的 Visual Studio C++ 2010 中创建了简单的代码:

int main()
{
return 0;
}

每当我在 Olly 中打开它时,它都会显示以下堆栈状态并暂停执行:

0012FFC4   7C817077  RETURN to kernel32.7C817077
0012FFC8 7C910228 ntdll.7C910228
0012FFCC FFFFFFFF
0012FFD0 7FFD5000
0012FFD4 80544CFD
0012FFD8 0012FFC8
0012FFDC 82537DA8
0012FFE0 FFFFFFFF End of SEH chain
0012FFE4 7C839AD8 SE handler
0012FFE8 7C817080 kernel32.7C817080
0012FFEC 00000000
0012FFF0 00000000
0012FFF4 00000000
0012FFF8 004012A0 Reversin.<ModuleEntryPoint>
0012FFFC 00000000

我可以看到 SEH 链和 SE 处理程序的末尾,其余部分对我来说没有意义。我发现安装了异常处理程序的函数的堆栈布局如下:

Function_Local_Variables
Exception_Registration_Record
Exception_Handler
Callers_EBP
Return_Address_in_Caller
Function_Arguments

这似乎不适用于我的情况。我需要帮助来尝试了解堆栈中存储的内容。

谢谢。

最佳答案

如果您尝试通过查看 Olly 中的十六进制来学习堆栈约定,您应该考虑您的代码遵循哪种堆栈约定。默认情况下,大多数 C++ 代码遵循 __cdecl 约定。查看此链接:http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl

关于c++ - main() 的激活记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291093/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com