2014-04-17 28 views
0

我「米試圖編寫使用makecontext在linux代碼32位 該名男子文件包含以下代碼陣列炭爲Linux化妝方面

#include <ucontext.h> 
    #include <stdio.h> 
    #include <stdlib.h> 

    static ucontext_t uctx_main, uctx_func1, uctx_func2; 

    //function here 

    int main(int argc, char *argv[]) 
    { 
     char func1_stack[16384]; 
     char func2_stack[16384]; 

     if (getcontext(&uctx_func1) == -1) 
      handle_error("getcontext"); 
     uctx_func1.uc_stack.ss_sp = func1_stack; 
     uctx_func1.uc_stack.ss_size = sizeof(func1_stack); 
     uctx_func1.uc_link = &uctx_main; 
     makecontext(&uctx_func1, func1, 0); 
     // other context code 

如何使適合更多環境驗證碼,我的主要問題是如何創建的char funcN_stack? 數組我想這個代碼將建立與函數N尺寸的功能和環境

回答

1

,我認爲你是問你如何創建n個16384字節數組緩衝區(用於堆棧使用):

/* assumption: N is #defined */ 

char *stacks[N]; 
int i; 
for (i=0; i<N; i++) 
{ 
    stacks[i] = malloc(16384); 
    /* add error handling here if malloc returns NULL */ 
} 

然後使用stacks[x]作爲緩衝區的地址。注意不能使用sizeof(因爲stacks[i]是一個簡單的指針而不是數組),所以必須使用16384直接指令,或者更好地使用常數或#define

+0

做完你最想做的事情之後,我簡單地寫下'uctx_funcx.uc_stack.ss_sp = staks [x];' –

+1

或者更好的辦法就是擁有一個'ucontext'數組。 – abligh