作为一个函数的char数组的这个调用是做什么的?

问题描述:

我碰到这段代码:作为一个函数的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

它调用一个函数,其机器码在数组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