gpt4 book ai didi

stack - c 代码在 main 开始后用模式(0xABABABAB)绘制嵌入式堆栈?

转载 作者:行者123 更新时间:2023-12-05 01:52:02 30 4
gpt4 key购买 nike

我正在使用堆栈绘制/足迹分析方法进行动态内存分析。

dynamic-stack-depth-determination-using-footprint-analysis

基本上,想法是在应用程序开始执行之前,用专用填充值填充分配给堆栈区域的全部内存量,例如 0xABABABAB。每当执行停止时,就可以从栈尾向上搜索栈内存,直到找到一个不是0xABABABAB的值,这个值被认为是栈已经使用了多远。如果找不到专用值,则堆栈已耗尽所有堆栈空间,很可能已溢出。

我想要一个 c 代码用一个模式从上到下填充堆栈。

void FillSystemStack()
{
extern char __stack_start,_Stack_bottom;


}

注意

  • 我在 Eclipse 上使用通过 QEMU 仿真的 STM32F407VG 板。
  • 栈从高地址向低地址增长
  • 堆栈的开始是 0x20020000
  • 栈底是 Ox2001fc00

最佳答案

main() 开始后,您不应该完全填充堆栈,因为堆栈使用一次 main( ) 开始。完全填充堆栈会覆盖已使用的堆栈位,并可能导致未定义的行为。我想您可以在 main() 开始后立即填充堆栈的部分,只要您注意不要覆盖已经使用的部分即可。 p>

但更好的计划是在 调用 main() 之前用模式填充堆栈。查看工具链的启动代码。启动代码在调用 main() 之前初始化变量值并设置堆栈指针。根据您的工具链,启动代码可能在汇编中。初始化变量的代码可能是一个简单的循环,它将字节或字从适当的 ROM 复制到 RAM 部分。您或许可以使用此代码作为示例来编写一个新循环,该循环将使用一种模式填充堆栈内存范围。

关于stack - c 代码在 main 开始后用模式(0xABABABAB)绘制嵌入式堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71816900/

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