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

我遇到了这段代码:

char code[] = "\xb0\x01\x31\xdb\xcd\x80"; int main(int argc, char **argv) { int (*func)(); func = (int (*)()) code; (int)(*func)(); } 

它是从用于Linux和Windows Tutorial的Writing Shellcode复制而来的。

有人可以解释一下这个函数调用(int)(*func)(); 是在做?

它调用一个函数,其机器代码在数组code 。 该字符串包含一些机器级指令((我认为三个,看看x86指令集) func被声明为一个指向函数的指针,该函数不带参数并返回一个int 。然后将func设置为该地址。该字符串的第一个字节(机器指令记住)。然后func ,因此调用字符串的第一条指令。

我现在没有x86指令设置得很好,但它似乎进行了系统调用(不知道哪一个); 0xcd 0x80是系统的陷阱。


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

请注意这是依赖于Linux的,请参阅汇编代码中的“int 0x80”是什么意思?

有关此机制的简短说明,请访问: http : //www.linfo.org/system_call_number.html