小编Nat*_*ate的帖子

如何在C程序中打印堆栈的内容?

正如标题所说,我想在我的C程序中打印堆栈的内容.

以下是我采取的步骤:

  • 我做了一个简单的汇编(helper.s)文件,其中包含一个返回我的ebp寄存器地址的函数和一个返回我的esp寄存器地址的函数

    .globl get_esp
    
    get_esp:
        movl %esp, %eax
        ret
    # get_ebp is defined similarly, and included in the .globl section
    
    Run Code Online (Sandbox Code Playgroud)
  • 我叫get_esp ()get_ebp ()从我的C程序功能(fpC = get_esp ();其中FPC是一个int)
  • 我(成功地,我认为)打印了我的esp和ebp寄存器的地址(fprintf (stderr, "%x", fcP);)
  • 我尝试了,但未能打印出我的esp寄存器的内容.(我想fprintf (sderr, "%d", *fcP);fprintf (sderr, "%x", *((int *)fcP));其他方法中).处理此行时,我的程序在运行时遇到分段错误.

我究竟做错了什么?

编辑:这必须通过调用这些汇编函数来获得堆栈指针来完成.EDIT2:这是家庭作业.

c x86 assembly pointers

5
推荐指数
1
解决办法
6982
查看次数

标签 统计

assembly ×1

c ×1

pointers ×1

x86 ×1