-2

我目前正在 level02 上进行 Exploit-Exercises,在脚本中我看到一个名为“asprintf”的函数,asprintf(&buffer, "/bin/echo %s is cool" , getenv("USER"));buffer = null; 在此函数调用之前。

请用简单的英语向我解释这个功能的作用以及它为什么存在,我知道还有另一个帖子问同样的事情,但它对我没有多大帮助。(是的,我阅读了手册页!)

请不要忽略或删除问题,这不是第一次,(给版主的消息)。

4

2 回答 2

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`.
于 2017-11-03T10:06:46.353 回答
1

我认为asprintf您提到的功能sprintf是特定于 glibc 标准库的变体。函数的第一个参数不是指向字符数组的指针,如sprintf,而是指向char *变量的指针,该变量将保存新分配的char数组的地址。也就是说,该asprintf函数的作用与使用相同,sprintf但不是使用固定大小的char数组,而是为它构建的字符串分配空间。分配的数组asprintf必须在稍后由调用者释放。

于 2017-11-03T09:55:39.573 回答