4
我試圖用ld
的-wrap
選項攔截對printf
的呼叫。我有兩個文件:爲什麼換行時使用ld打印printf失敗?
的main.c:
#include <stdio.h>
int main(void) {
printf("printing\n");
printf("printing");
}
printf_wrapper.c:
int __real_printf(const char *format, ...);
int __wrap_printf(const char *format, ...) {
(void)format;
return __real_printf("WRAPPED\n");
}
我用下面的命令編譯:
gcc -Wl,-wrap,printf *.c
當我運行結果a.out
二進制,我得到這個輸出:
printing
WRAPPED
如果字符串中有換行符,爲什麼換行失敗?我檢查了我的系統的stdio.h
和printf不是一個宏。這是與海灣合作委員會5.3.0
如果您交換訂單或同時使用換行符,您會得到什麼? – Olaf
您是否試過關閉優化?海灣合作委員會可能已經改變你的printf其他東西,比如說put。 – bruceg
如果我在源中交換訂單,則會交換打印的順序。另外,如果我有一個換行符和一個變量(例如'printf(「print:%d \ n」,1);'),則它將被正確包裝 – awelkie