我目前正在 level02 上进行 Exploit-Exercises,在脚本中我看到一个名为“asprintf”的函数,asprintf(&buffer, "/bin/echo %s is cool" , getenv("USER"));
buffer = null; 在此函数调用之前。
请用简单的英语向我解释这个功能的作用以及它为什么存在,我知道还有另一个帖子问同样的事情,但它对我没有多大帮助。(是的,我阅读了手册页!)
请不要忽略或删除问题,这不是第一次,(给版主的消息)。
显然您正在寻找以下示例用法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`.
我认为asprintf
您提到的功能sprintf
是特定于 glibc 标准库的变体。函数的第一个参数不是指向字符数组的指针,如sprintf
,而是指向char *
变量的指针,该变量将保存新分配的char
数组的地址。也就是说,该asprintf
函数的作用与使用相同,sprintf
但不是使用固定大小的char
数组,而是为它构建的字符串分配空间。分配的数组asprintf
必须在稍后由调用者释放。