繁体   English   中英

在C中获取%ebp,%esp并在堆栈中输出值

[英]Get %ebp ,%esp in C and output value in stack

当前,我正在解决一个问题,我需要在调用堆栈中输出一些值。 这是我所做的:

int funcA() 
{ 
    int a = 1;
    int b = 2;
    char c = '3';
    asm("mov %ebp, ebp");
    asm("mov %esp, esp");
    printf("&a = %x\n", &a);
    printf("&b = %x\n", &b);
    printf("&c = %x\n", &c);
    printf("esp = %X  ebp = %X\n", esp, ebp);
}

esp和ebp已经预先声明。 上面的代码输出为:

&a = ff7f7c
&b = ff7f78
&c = ff7f77
esp = FF7F68  ebp = FF7F88
  1. 为什么&c = ff7f77? 在堆栈中,每个块都应该等于4个字节,而不管其类型如何,对吗?
  2. 为什么esp = ff7f68? 我认为应该等于&c-4
  3. 另一个问题是,如果我这样做:

     printf("%x", ebp-4); 

输出是

ff7f78

谁能向我解释为什么输出不是ff7f84?

谢谢大家!

  1. 不,编译器可以执行任何所需的操作。

  2. 不,编译器可以执行任何所需的操作。

  3. 您可能ebp声明为char *以外的东西。 您正在看到指针运算的结果。 在这种情况下,它看起来像是一个指向4字节类型的指针。 无论如何,您都不应该使用%x来打印指针。 这就是%p目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM