Loading ifs/include/preload/passthrough.hpp +7 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,13 @@ extern void* libc_feof; extern void* libc_ferror; extern void* libc_fileno; extern void* libc_fflush; extern void* libc_fpurge; extern void* libc___fpurge; extern void* libc_setbuf; extern void* libc_setbuffer; extern void* libc_setlinebuf; extern void* libc_setvbuf; extern void* libc_putc; extern void* libc_fputc; Loading ifs/src/preload/intcp_functions.cpp +72 −0 Original line number Diff line number Diff line Loading @@ -277,6 +277,78 @@ int fflush(FILE *stream) { return (reinterpret_cast<decltype(&fflush)>(libc_fflush))(stream); } int fpurge(FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return 0; } } return (reinterpret_cast<decltype(&fpurge)>(libc_fpurge))(stream); } void __fpurge(FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&__fpurge)>(libc___fpurge))(stream); } void setbuf(FILE *stream, char *buf) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&setbuf)>(libc_setbuf))(stream, buf); } void setbuffer(FILE *stream, char *buf, size_t size) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&setbuffer)>(libc_setbuffer))(stream, buf, size); } void setlinebuf(FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&setlinebuf)>(libc_setlinebuf))(stream); } int setvbuf(FILE *stream, char *buf, int mode, size_t size) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return 0; } } return (reinterpret_cast<decltype(&setvbuf)>(libc_setvbuf))(stream, buf, mode, size); } int putc(int c, FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { Loading ifs/src/preload/passthrough.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,13 @@ void* libc_feof; void* libc_ferror; void* libc_fileno; void* libc_fflush; void* libc_fpurge; void* libc___fpurge; void* libc_setbuf; void* libc_setbuffer; void* libc_setlinebuf; void* libc_setvbuf; void* libc_putc; void* libc_fputc; Loading Loading @@ -112,6 +119,13 @@ void init_passthrough_() { libc_ferror = dlsym(libc, "ferror"); libc_fileno = dlsym(libc, "fileno"); libc_fflush = dlsym(libc, "fflush"); libc_fpurge = dlsym(libc, "fpurge"); libc___fpurge = dlsym(libc, "__fpurge"); libc_setbuf = dlsym(libc, "setbuf"); libc_setbuffer = dlsym(libc, "setbuffer"); libc_setlinebuf = dlsym(libc, "setlinebuf"); libc_setvbuf = dlsym(libc, "setvbuf"); libc_putc = dlsym(libc, "putc"); libc_fputc = dlsym(libc, "fputc"); Loading Loading
ifs/include/preload/passthrough.hpp +7 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,13 @@ extern void* libc_feof; extern void* libc_ferror; extern void* libc_fileno; extern void* libc_fflush; extern void* libc_fpurge; extern void* libc___fpurge; extern void* libc_setbuf; extern void* libc_setbuffer; extern void* libc_setlinebuf; extern void* libc_setvbuf; extern void* libc_putc; extern void* libc_fputc; Loading
ifs/src/preload/intcp_functions.cpp +72 −0 Original line number Diff line number Diff line Loading @@ -277,6 +277,78 @@ int fflush(FILE *stream) { return (reinterpret_cast<decltype(&fflush)>(libc_fflush))(stream); } int fpurge(FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return 0; } } return (reinterpret_cast<decltype(&fpurge)>(libc_fpurge))(stream); } void __fpurge(FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&__fpurge)>(libc___fpurge))(stream); } void setbuf(FILE *stream, char *buf) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&setbuf)>(libc_setbuf))(stream, buf); } void setbuffer(FILE *stream, char *buf, size_t size) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&setbuffer)>(libc_setbuffer))(stream, buf, size); } void setlinebuf(FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return; } } return (reinterpret_cast<decltype(&setlinebuf)>(libc_setlinebuf))(stream); } int setvbuf(FILE *stream, char *buf, int mode, size_t size) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { auto fd = file_to_fd(stream); if(CTX->file_map()->exist(fd)) { CTX->log()->trace("{}() called on fd {}", __func__, fd); return 0; } } return (reinterpret_cast<decltype(&setvbuf)>(libc_setvbuf))(stream, buf, mode, size); } int putc(int c, FILE *stream) { init_passthrough_if_needed(); if(CTX->initialized() && (stream != nullptr)) { Loading
ifs/src/preload/passthrough.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,13 @@ void* libc_feof; void* libc_ferror; void* libc_fileno; void* libc_fflush; void* libc_fpurge; void* libc___fpurge; void* libc_setbuf; void* libc_setbuffer; void* libc_setlinebuf; void* libc_setvbuf; void* libc_putc; void* libc_fputc; Loading Loading @@ -112,6 +119,13 @@ void init_passthrough_() { libc_ferror = dlsym(libc, "ferror"); libc_fileno = dlsym(libc, "fileno"); libc_fflush = dlsym(libc, "fflush"); libc_fpurge = dlsym(libc, "fpurge"); libc___fpurge = dlsym(libc, "__fpurge"); libc_setbuf = dlsym(libc, "setbuf"); libc_setbuffer = dlsym(libc, "setbuffer"); libc_setlinebuf = dlsym(libc, "setlinebuf"); libc_setvbuf = dlsym(libc, "setvbuf"); libc_putc = dlsym(libc, "putc"); libc_fputc = dlsym(libc, "fputc"); Loading