我目前在level02上进行Exploit-Exercises,在脚本中我看到一个名为'asprintf'的函数,asprintf(&buffer, "/bin/echo %s is cool" , getenv("USER"));
buffer = null;在此函数调用之前。
请用简单的英语向我解释这个功能是做什么以及它为什么存在,我知道有另一个帖子问同样的事情,但它对我帮助不大。 (是的,我读了手册页!)
请不要忽略或提出删除问题,这不是第一次,(给版主的消息)。
答案 0 :(得分:1)
我认为您提到的asprintf
函数是sprintf
的变体,它特定于glibc标准库。该函数的第一个参数不是指向字符数组的指针,与sprintf
一样,而是指向char *
变量的指针,该变量将保存新分配的char
数组的地址。也就是说,asprintf
函数与sprintf
的作用相同,但是,它不是使用固定大小的char
数组,而是为它构建的字符串分配空间。由asprintf
分配的数组必须在稍后由调用者释放。
答案 1 :(得分:1)
表示您正在寻找asprintf
的示例用法:
char *buffer = NULL;
if (asprintf(&buffer, "The counter is %d\n", 42) < 0)
{ perror("asprintf failed"); exit(EXIT_FAILURE); };
// now buffer points to a heap allocated string "The counter is 42\n".
printf("%s", buffer); // print the string on the terminal
free(buffer); // free the buffer allocated by `asprintf`.