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

时间:2015-02-23 06:38:02

标签: c function-pointers shellcode

我遇到了这段代码:

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

1 个答案:

答案 0 :(得分: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