这个函数分配是如何工作的?
How does this function assignment work?
我正在学习一本大学书籍中的一些 C 代码(这本书的主题是 Linux 编程),我遇到了一些我不理解的代码行。我做了一些研究,但我没有在互联网上找到任何东西。有人可以向我解释这段代码吗?
我知道什么是环境变量,我不明白的部分是这个int (*det)(), det()
函数是如何工作的。对不起,如果我的标题不正确,我只是不知道如何更好地描述这个主题。
#include<stdio.h>
int main(){
int (*det)();
det = getenv("foo");
det();
return 0;
}
*** 感谢您 replies.is 有什么方法可以使这个程序正常运行,例如打印 "hallo"?
一般情况下是行不通的。您正在尝试将 char*
(字符串)分配给函数指针。一个合理的编译器会拒绝这个。
然而,并不是所有的编译器都是合理的。如果您确实设法编译并执行了这段代码,那么您已经创建了一个易受环境变量 foo
攻击的程序。这是因为如果您确实设法执行了 foo
的内容,并且它们确实可以在您的机器上执行,那么您将把进程的控制权从 C 程序转移到 foo
中存在的任何代码中].这是不可移植的,可能无法工作,绝对不安全,切勿尝试。
另外,你得到这本书的书,我猜是关于信息安全的。不行就烧掉。
正如有人已经指出的那样
det = getenv("foo");
没有多大意义,我希望你的编译器足够聪明,所以
您无法摆脱 it.Below 可能正是您期望在那本书中看到的内容:
#include <stdio.h>
#include <stdlib.h>
extern char* getenv(const char*);
/* The above statement is not mandatory but would make the code more
* readable. The keyword "extern" here implies that the function is
* is defined elsewhere.
*/
int main(void)
{
char* (*det)(const char*) = getenv;
printf("PATH env variable contains : %s\n", (*det)("PATH"));
/* Replace path with your own environment variable */
printf("Press any key to continue..\n");
getchar();
return 0;
}
我只是在这里打印一些东西,更改用法以满足您的需要。
参考资料
getenv()原型在这里。
我正在学习一本大学书籍中的一些 C 代码(这本书的主题是 Linux 编程),我遇到了一些我不理解的代码行。我做了一些研究,但我没有在互联网上找到任何东西。有人可以向我解释这段代码吗?
我知道什么是环境变量,我不明白的部分是这个int (*det)(), det()
函数是如何工作的。对不起,如果我的标题不正确,我只是不知道如何更好地描述这个主题。
#include<stdio.h>
int main(){
int (*det)();
det = getenv("foo");
det();
return 0;
}
*** 感谢您 replies.is 有什么方法可以使这个程序正常运行,例如打印 "hallo"?
一般情况下是行不通的。您正在尝试将 char*
(字符串)分配给函数指针。一个合理的编译器会拒绝这个。
然而,并不是所有的编译器都是合理的。如果您确实设法编译并执行了这段代码,那么您已经创建了一个易受环境变量 foo
攻击的程序。这是因为如果您确实设法执行了 foo
的内容,并且它们确实可以在您的机器上执行,那么您将把进程的控制权从 C 程序转移到 foo
中存在的任何代码中].这是不可移植的,可能无法工作,绝对不安全,切勿尝试。
另外,你得到这本书的书,我猜是关于信息安全的。不行就烧掉。
正如有人已经指出的那样
det = getenv("foo");
没有多大意义,我希望你的编译器足够聪明,所以 您无法摆脱 it.Below 可能正是您期望在那本书中看到的内容:
#include <stdio.h>
#include <stdlib.h>
extern char* getenv(const char*);
/* The above statement is not mandatory but would make the code more
* readable. The keyword "extern" here implies that the function is
* is defined elsewhere.
*/
int main(void)
{
char* (*det)(const char*) = getenv;
printf("PATH env variable contains : %s\n", (*det)("PATH"));
/* Replace path with your own environment variable */
printf("Press any key to continue..\n");
getchar();
return 0;
}
我只是在这里打印一些东西,更改用法以满足您的需要。
参考资料
getenv()原型在这里。