#include <stdio.h>
void wrapperPrint(char* s)
{
printf(s);
return;
}
int main()
{
wrapperPrint("Hello world\n");
wrapperPrint("This is a string");
return 0;
}
如果正確的程序打印字符串(確實如此,在GCC 4.6.3測試),爲什麼我們需要的格式說明如%d,%S等,或其他潛在問題單詞,這個程序有什麼潛在的問題。與不使用格式說明與printf的
試試這個:'wrapperPrint( 「%s%s%S%s%S%S%s%S」);'。你可以使程序崩潰。你可以讀取進程的內存佔用...' –
哇。這是如何讀取內存佔用? +1,BTW。 – Anon
@Anon:'printf'不知道有多少個參數實際傳遞給它(也不是參數的類型),所以它會爲*格式字符串*中的每個'%s'調用'va_arg'並檢索來自堆棧的值。它將每個值作爲char *'並嘗試打印每個值。上面的代碼易受格式字符串攻擊的影響。 – AusCBloke