IO_FILE泄漏问题如何任意读取解决?

2026-05-25 12:440阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2629个文字,预计阅读时间需要11分钟。

IO_FILE泄漏问题如何任意读取解决?

在堆题中没有show函数时,我们可以使用+IO_FILE+进行leak记录。下面是如何实现这一手法的简单说明:

使用一个输出函数+puts+来说明,它在源代码中的表现形式为+_IO_puts+。

c+_IO_puts+(const char *str){ int result; // ... 实现细节 ...}

在堆题没有show函数时,我们可以用 IO_FILE 进行leak,本文就记录一下如何实现这一手法。

拿一个输出函数 puts 来说,它在源码里的表现形式为 _IO_puts 。

_IO_puts (const char *str) { int result = EOF; _IO_size_t len = strlen (str); _IO_acquire_lock (_IO_stdout); if ((_IO_vtable_offset (_IO_stdout) != 0 || _IO_fwide (_IO_stdout, -1) == -1) && _IO_sputn (_IO_stdout, str, len) == len && _IO_putc_unlocked ('\n', _IO_stdout) != EOF) result = MIN (INT_MAX, len + 1); _IO_release_lock (_IO_stdout); return result; }

我们可以看到 _IO_puts 又调用了一个叫 _IO_sputn 的函数。

阅读全文

本文共计2629个文字,预计阅读时间需要11分钟。

IO_FILE泄漏问题如何任意读取解决?

在堆题中没有show函数时,我们可以使用+IO_FILE+进行leak记录。下面是如何实现这一手法的简单说明:

使用一个输出函数+puts+来说明,它在源代码中的表现形式为+_IO_puts+。

c+_IO_puts+(const char *str){ int result; // ... 实现细节 ...}

在堆题没有show函数时,我们可以用 IO_FILE 进行leak,本文就记录一下如何实现这一手法。

拿一个输出函数 puts 来说,它在源码里的表现形式为 _IO_puts 。

_IO_puts (const char *str) { int result = EOF; _IO_size_t len = strlen (str); _IO_acquire_lock (_IO_stdout); if ((_IO_vtable_offset (_IO_stdout) != 0 || _IO_fwide (_IO_stdout, -1) == -1) && _IO_sputn (_IO_stdout, str, len) == len && _IO_putc_unlocked ('\n', _IO_stdout) != EOF) result = MIN (INT_MAX, len + 1); _IO_release_lock (_IO_stdout); return result; }

我们可以看到 _IO_puts 又调用了一个叫 _IO_sputn 的函数。

阅读全文