作为函数转换的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