2016-03-12 5 views
-2
int main(int argc, char **argv) 
{  
    int (*func)();  
    func = (int (*)()) code; 
    (int)(*func)();  
} 

переменная кода имеет некоторую шеллкода в немМожете ли вы помочь мне объяснить следующий код C?

+0

В какой части указанного кода у вас есть вопросы? Одна конкретная линия? Все три линии? Пожалуйста, постарайтесь быть более конкретными. –

+0

все три строки .. не знаю, что каждый из них означает –

ответ

-2

code вероятно является переменной, которая соответствует адресу некоторого машинного кода в памяти. Затем указатель на функцию, которая не принимает никакого параметра и возвращает int, устанавливается на этот адрес и вызывается функция. int f() является прототипом для функции без параметров и int в качестве возвращаемого значения, тогда int (*pf)() является указателем на такую ​​функцию.

+2

«_takes no parameter_» - На самом деле, это должно быть «принимает неопределенное количество аргументов» –

+0

Правильно, использовало правило C++ ... –

0

Функциональные указатели. Этот фрагмент кода должен помочь вам понять.

#include <stdio.h> 
int Hello(); 
int code(); 

int main(int argc, char **argv) 
{  
    int (*func)(); //pointer to function that takes no arguments quivalent to: int (*func)(void); 
    func =&Hello; 
    int x = func(); 
    printf("%d\n", x); 

    func = (int (*)()) code; // Assigns the pointer from the code function to the func pointer 
    x = code(); 
    printf("%d", x); 
} 
int code() 
{ 
    printf("code returns: "); 
    return 500; 
} 

int Hello() 
{ 
    printf("hello returns: "); 
    return 1; 
} 
Смежные вопросы