看libco,要搞明白怎么hook栈内存的
hook栈内存就是要 让函数中使用的临时变量 都 在指定的内存 上进行分配
首先看了一些关于函数栈的资料 X86汇编调用框架浅析与CFI简介,对函数压栈过程有了一些认识。
结合libco的代码,对hook栈内存有了一些自己的理解
在coctx_swap做了一些注释,如下:
//-------------
// 64 bit
//low | regs[0]: r15 |
// | regs[1]: r14 |
// | regs[2]: r13 |
// | regs[3]: r12 |
// | regs[4]: r9 |
// | regs[5]: r8 |
// | regs[6]: rbp |
// | regs[7]: rdi |
// | regs[8]: rsi |
// | regs[9]: ret | //ret func addr
// | regs[10]: rdx |
// | regs[11]: rcx |
// | regs[12]: rbx |
//hig | regs[13]: rsp |
struct coctx_t
{
void *regs[ 14 ];
size_t ss_size;
char *ss_sp;
};
extern "C"
{
extern void coctx_swap( coctx_t * x,coctx_t* y) asm("coctx_swap");
};
#elif defined(__x86_64__) // 该函数调用之