这种将 char 数组转换为函数的调用有何作用?

What does this invocation of a char array cast as a function do?

我遇到了这段代码:

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)(); 在做什么?

它调用了一个机器代码在数组code中的函数。 string 包含一些机器级指令((我认为是三个,看看 x86 指令集)。func 被声明为指向不带参数的函数的指针和 returns 一个 int。然后 func 被设置为那个 string 的第一个字节的地址(机器指令记得)。然后 func 被调用,因此对 字符串 的第一条指令进行了函数调用。

我现在对x86指令集不太了解,不过好像是系统调用(不知道是哪个); 0xcd 0x80 是系统的陷阱。


正如@eteranger所说,它是对_exit系统调用的调用。

注意这是 Linux 相关的,参见 What does "int 0x80" mean in assembly code?

此处提供了此机制的简短说明:http://www.linfo.org/system_call_number.html