我遇到了这段代码:
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 :(得分:3)
它调用一个函数,其机器代码在数组code
中。 字符串包含一些机器级指令((我认为有三个,请查看x86指令集)。func
被声明为指向不带参数的函数的指针并返回一个int
。func
然后设置为该字符串的第一个字节的地址(机器指令记住)。然后func
被调用,所以函数调用到了字符串的第一条指令。
0xcd 0x80
是系统的陷阱。
正如@etheranger所说,这是对_exit
系统调用的调用。
请注意,这取决于Linux,请参阅What does "int 0x80" mean in assembly code?
此处提供了此机制的简短说明:http://www.linfo.org/system_call_number.html