我正在从我的大学书中学习一些C代码(本书的主题是Linux编程),我遇到了一些我不理解的代码。我做了一些研究,但我没有在互联网上找到任何东西。有人可以向我解释这段代码吗?
我知道环境变量是什么,我不理解的部分是这个int (*det)(), det()
函数是如何工作的。对不起,如果我的标题不正确,我只是不知道如何更好地描述这个主题。
#include<stdio.h>
int main(){
int (*det)();
det = getenv("foo");
det();
return 0;
}
***感谢您的回复。有没有办法让这个程序正常运行,例如打印“hallo”?
答案 0 :(得分:5)
一般来说,它不起作用。您正在尝试将char*
(字符串)分配给函数指针。合理的编译器会拒绝这一点。
但是,并非所有编译器都合理。如果您确实设法编译并执行此代码,那么您已经创建了一个易受环境变量foo
攻击的程序。这是因为如果您确实设法执行foo
的内容,并且它们确实可以在您的计算机上执行,那么您将把进程的控制权从C程序转移到{{1}中存在的任何代码中}。这是不可移植的,可能是非工作的,绝对不安全,绝不应该尝试。
此外,你从中得到这本书的书是一种关于信息安全的东西。如果没有,请将其烧掉。
答案 1 :(得分:1)
正如有人已经指出的那样
det = getenv("foo");
没有多大意义,我希望你的编译器足够聪明 你不会侥幸逃脱它。可能是你期望在那本书中看到的:
#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()原型在这里。