我有以下 C 代码:

#include <stdio.h>

    char strA[80] = {"string to be used for demonstration purposes."};
    char strB[80];

    int main(void){
      char *pA;      //A pointer to type char
      char *pB;      //Another pointer to type char
      puts(strA);    //Show string A
      pA = strA;     //Point pA to string A
      puts(pA);      //Show what pA is pointing to
      //printf("pA = %s",  pA);
      pB = strB;     //Point pB to string B
      putchar('\n'); //Move down one line on the screen

      while(*pA != '\0'){
        *pB++ = *pA++;
      }

      *pB = '\0';
      puts(strB);    //Show string B on the screen

      return 0;

    }

现在我使用 gdb 进行调试,并执行以下步骤:
gdb str
break main
run
x/s $esp

但在这里我得到“如果有界则地址”错误......
任何人都可以告诉我如何解决它?
谢谢你

最佳答案

那是因为您在 64 位机器上, $esp 是一个 32 位寄存器。你会想要做 x/s $rsp

关于c - linux中的gdb C代码-地址越界,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20891195/

10-12 22:22