Exemplo n.º 1
0
int main(){
  rbp_init=get_rbp();
  rsp_init=get_rsp();
  printf("stack pointer of main = %ld\n",rsp_init);
  printf("frame pointer of main = %ld\n",rbp_init);
  print_stack_frame();

  //  recur(1);
}
Exemplo n.º 2
0
void stack_trace()
{
   offset_t *rbp, *rip;

   printf("\n------ Setup Stack Trace [rsp: 0x%X | rip 0x%X]\n",
          get_rsp(), get_pc());

   rbp = (offset_t*)get_rbp();

   while(rbp && rbp < &__kernel_start__)
   {
      rip = (offset_t*)(*(rbp+1));
      rbp = (offset_t*)(*rbp);
      printf("%X\n", (offset_t)rip);
   }
}
Exemplo n.º 3
0
int recur(int x){
  count++;
  get_rbp_2;
  get_rsp_2;
  printf("%rbp is %ld, using register local var it's %ld\n",get_rbp(),rbp);
  printf("%rsp is %ld, using register local var it's %ld\n",get_rsp(),rsp);
  printf("rbp difference is %ld\n",rbp_init-rbp);
  printf("rsp difference is %ld\n",rsp_init-rsp);
  printf("recursion depth is %ld\n",((rsp_init-rsp)/48));
  printf("frame number (using rsp) %ld\n",frameCount());
  printf("frame number (using rbp) %ld\n",(rbp_init-getFP().rbp)/48);
  if(x<0){
    return -1;
  } else {
    return recur(recur(x+x));
  }
}