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); }
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); } }
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)); } }