栈和函数调用

栈是一种后入先出的数据结构,主要应用于函数调用。每个线程拥有用户栈和内核栈,线程启动时创建栈。函数调用过程中,栈用于存储跳转地址和局部变量。栈平衡意味着ESP在调用和返回时保持不变。栈的增长通过保护页机制自动完成,防止栈溢出。缓冲区溢出攻击是栈安全的一大威胁,编译器通过cookie保护和返回地址检查来防范。
摘要由CSDN通过智能技术生成

def:栈是一种后入先出的数据结构,天然适合用来保存需要函数调用等需要保存的信息。在windows的用户进程中都包含用户栈和内核栈两个栈。

每个线程都至少包含有一个栈,每个栈都对应内核中的一个_KTHREAD结构:


在线程开始运行之前需要创建这个线程的栈,创建过程如下:




栈作为一个存储数据的结构,在函数调用的过程中执行CALL和RET指令时分别以如下方式使用:



而用户态调用内核态的过程如下(引用自连接):


栈中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 VSCode 中,可以使用调试器来跟踪和调试函数调用。下面是一个简单的示例,展示了如何在 VSCode 中进行函数调用的调试: 1. 打开 VSCode,并打开包含你的代码的项目文件夹。 2. 在代码中设置断点,以便在特定的函数调用时暂停执行。你可以在代码行的左侧单击,或者使用 `F9` 快捷键来切换断点。 3. 在 VSCode 的顶部菜单中选择 "调试" 选项,然后点击 "新建配置"(或者编辑已有的配置文件)以创建一个调试配置。 4. 在调试配置文件中,选择你所使用的编程语言和调试环境。例如,如果你使用 C++ 编写代码并使用 GDB 调试器,则可以选择 "C++ (GDB/LLDB)"。 5. 配置调试器的参数,例如指定要调试的可执行文件、工作目录和启动参数。 6. 启动调试会话,点击调试菜单中的 "开始调试" 按钮(或者使用 `F5` 快捷键)。 7. 当代码执行到设置的断点时,程序将会暂停执行,并且你可以查看当前的帧和变量值。 8. 使用调试器提供的控制按钮(如 "继续"、"单步执行"、"进入函数" 等)来控制代码的执行流程。 9. 在调试过程中,你可以查看和监视帧、变量、表达式等的值,并使用调试器提供的其他功能进行调试。 通过以上步骤,你可以在 VSCode 中进行函数调用的调试,跟踪代码执行过程,查看变量的值,帮助你定位和解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值