Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Preload read() to exit() on EOF
#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
/* gcc -shared -fPIC exit-on-EOF.c -o -ldl */
/* LD_PRELOAD=./ ./test */
/* AFL_PRELOAD=./ afl-fuzz -i in -o out -n -- ./test */
typedef int (*orig_read_f_type)(int fd, void *buf, int count);
int read(int fd, void *buf, int count) {
orig_read_f_type orig_read = (orig_read_f_type)dlsym(RTLD_NEXT, "read");
for (int i = 0; i < count; ++i) {
int n = orig_read(fd, buf++, 1);
if (n == 0) {
return count;
#include <stdio.h>
#include <unistd.h>
int main(int argc, char const *argv[]) {
char c;
do {
read(STDIN_FILENO, &c, 1);
printf("%c", c);
return 0;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment