2015-02-23 81 views
3

我碰到這段代碼:作爲一個函數的char數組的這個調用是做什麼的?

char code[] = "\xb0\x01\x31\xdb\xcd\x80"; 
int main(int argc, char **argv) 
{ 
    int (*func)(); 
    func = (int (*)()) code; 
    (int)(*func)(); 
} 

它是從Writing Shellcode for Linux and Windows Tutorial複製。

有人可以解釋一下,這個函數調用(int)(*func)();正在做什麼?

+0

@Downvoter;評論將不勝感激。 – haccks 2015-02-23 06:39:41

+0

它調用一個函數,其機器碼在數組'code'中。 – 2015-02-23 06:43:39

+0

@ Jean-BaptisteYunès;你能解釋一下嗎? – haccks 2015-02-23 06:45:44

回答

3

它調用一個函數,其機器碼在數組code中。該字符串包含一些機器級別的指令((我認爲,三看看x86指令集)。func被聲明爲一個函數的指針,該函數不帶參數並返回intfunc然後設置爲地址第一個字節的是(機器指令記得了)。然後func被調用,這樣的函數調用的第一個指令是由。

我不知道現在的x86指令集非常好,但似乎在進行系統調用(不知道哪一個); 0xcd 0x80是系統的陷阱。


正如@etheranger所說,這是一個調用_exit系統調用。

當心,這是Linux的依賴,看到What does "int 0x80" mean in assembly code?

這一機制的簡短說明,請訪問:http://www.linfo.org/system_call_number.html

+1

在問題中鏈接的來源意味着它是一個'exit'調用。 – etheranger 2015-02-23 06:49:16