Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Χρήση format parameter %n σε printf στην C++ (VS2008)

Îåêßíçóå áðü ôï ìÝëïò Thiseas. Τελευταία δημοσίευση από το μέλος Thiseas στις 17-03-2010, 15:34. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-03-2010, 17:18 57686

    Χρήση format parameter %n σε printf στην C++ (VS2008)

    Αναφέρεται από μερικούς οτι η παράμετρος %n της printf που γράφει σε συγκεκριμένη διεύθυνση μνήμης συγκεκγριμένες τιμές, έχει καταργηθεί από την Microsoft, αν και αναφέρεται μέσα στο MSDN.

    Πράγματι, κάνοντας χρήση της %n μέσα από προγράμματα C++ σε VS2005,2010 σε XP,Vista,7 το πρόγραμμα απλά κρασάρει στο runtime ενώ περνάει κανονικά compile. Ίδιο ακριβώς πρόγραμμα λειτουργεί μια χαρά σε linux περιβάλλον. Αυτο το λέω για να μην θεωρηθεί οτι γίνεται κακή χρήση της %n.

    Από πλευράς security η παράμετρος %n έχει χρησιμοποιηθεί κατ' επανάληψη σε Format String επιθέσεις.

    Έχει χρησιμοποιήσει κανένας φίλος εδώ, επιτυχώς το %n σε printf, σε κάποιο από τα παραπάνω περιβάλλοντα (C++ σε VS2005,2010 σε XP,Vista,7)?
    Αν ναι, μήπως θα είχε την καλοσύνη να μας έδειχνε πώς ή αν έχει ακούσει οτι πράγματι έχει καταργηθεί?


    Thnx 4 your time! :)



    Nothing to declare...
  •  16-03-2010, 23:57 57711 σε απάντηση της 57686

    Απ: Χρήση format parameter %n σε printf στην C++ (VS2008)

    Επειδή δεν βλέπω και πολύ μεγάλη συμμετοχή, παραθέτω και το πρόγραμμα σε C που έχω χρησιμοποιήσει (αυτό που τρέχει σε linux αλλά σκάει στο runtime σε Windows...) μήπως βοηθηθεί κάποιος φίλος περισσότερο...

    #include <stdio.h>
    int main(int argc, char *argv[])
    {
    	int value = 0;
    	printf("1st 0: %d\n", value);
    	printf("AAAA%n\t", &value);
    	printf("2nd: %d\n", value);
    	printf("AAAAAA%n\t", &value);
    	printf("3rd: %d\n", value);
    	return 0;
    }

    Thnx

    Nothing to declare...
  •  17-03-2010, 01:09 57716 σε απάντηση της 57711

    Απ: Χρήση format parameter %n σε printf στην C++ (VS2008)

    Το documentation αναφέρει επί του θέματος ότι είναι απενεργοποιημένος ο εν λόγω field character και πρέπει να την ενεργοποιήσεις ο ίδιος για να χρησιμοποιήσεις την %n.Ορίστε πως θα δουλέψει το παράδειγμά σου:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define PRINTF_COUNT_ENABLE 1
    #define PRINTF_COUNT_DISABLE 0
    
    int main(int argc, char* argv[])
    {
    
    	_set_printf_count_output(PRINTF_COUNT_ENABLE);
    
    	int value = 0;
    	printf("1st 0: %d\n", value);
    	printf("AAAA%n\t", &value);
    	printf("2nd: %d\n", value);
    	printf("AAAAAA%n\t", &value);
    	printf("3rd: %d\n", value);
    
    	system("pause");
    
    
    	return 0;
    }
  •  17-03-2010, 15:34 57736 σε απάντηση της 57716

    Απ: Χρήση format parameter %n σε printf στην C++ (VS2008)

    Ops.... thnx a lot mate!

    Thnx a lot.
    Έψαχνα ακριβώς αυτό: http://msdn.microsoft.com/en-us/library/ms175782.aspx


    Nothing to declare...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems