作为一个函数的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)();
正在做什么?
答
它调用一个函数,其机器码在数组code
中。该字符串包含一些机器级别的指令((我认为,三看看x86指令集)。func
被声明为一个函数的指针,该函数不带参数并返回int
。func
然后设置为地址第一个字节的是串(机器指令记得了)。然后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
@Downvoter;评论将不胜感激。 – haccks 2015-02-23 06:39:41
它调用一个函数,其机器码在数组'code'中。 – 2015-02-23 06:43:39
@ Jean-BaptisteYunès;你能解释一下吗? – haccks 2015-02-23 06:45:44