0
對於用戶級線程庫,我需要通過修改存儲在jmp_buf中的PC值來計算跳轉到某個函數。在jmp_buf中修改PC以轉至其他功能
這是我寫:
jmp_buf env;
void print (void) {
printf("\nHello World!");
}
static int ptr_mangle(int p) {
unsigned int ret;
asm(" movl %1, %%eax;\n"
" xorl %%gs:0x18, %%eax;"
" roll $0x9, %%eax;"
" movl %%eax, %0;"
: "=r"(ret)
: "r"(p)
: "%eax"
);
return ret;
}
int main() {
int i = setjmp(env);
env[0].__jmpbuf[5] = ptr_mangle(print);
longjmp(env, 2);
return 0;
}
我試圖將其設置爲我試圖跳到函數的地址修改PC的jmp_buf。 我遇到分段錯誤。 我無法弄清楚究竟需要做什麼。我是否也需要修改SP?
任何幫助將非常感激。