main() 的激活记录

发布于 2024-10-21 21:07:09 字数 908 浏览 7 评论 0原文

我是倒车新手。如果问题听起来像初学者,我很抱歉:) 我在 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

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

谢谢。

I am new to reversing. My apologies if question sounds to beginer-ish :) I have created simple code in Visual Studio C++ 2010 on XP SP3:

int main()
{
    return 0;
}

Whenever I open it in Olly it shows the following state of the stack with execution paused:

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

I can see end of SEH chain and SE handler the rest of it just doesn't make sense to me. I have found the following stack layout for the functions with exception handler installed:

Function_Local_Variables
Exception_Registration_Record
Exception_Handler
Callers_EBP
Return_Address_in_Caller
Function_Arguments

It does not seem to apply in my case. I need help trying to understand what's been stored in stack please.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哆兒滾 2024-10-28 21:07:10

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

If you're trying to learn the stack convention by looking at hex in Olly, you should consider which stack convention your code is following. By default, most C++ code follows the __cdecl convention. Check out this link: http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文