Sprintf,2.Parameter
-
Hallo
void Funktion( void ) { char buffer[16]; // Anfangsadresse 0x0012FF1C char shellcode[] = "\x66\x31\xc0\xb4\x40\x66\xc1\xe0\x08\xb8\x0a\x10\x66\xff\xd0"; sprintf( buffer, "%s1abcd%c%c%c%c", 0x1C, 0xFF, 0x12, 0x00 ); }
Was bedeutet der 2.Parameter bei der sprintf Funktion.
Ich hab recherchiert und raus bekommen dass es irgendwas mit der Formatierung des stringszu tun hat,aber was ??Mfg Heiner
-
sprintf( buffer, "%s1abcd%c%c%c%c", 0x1C, 0xFF, 0x12, 0x00 );
das knallt.
Als erster parameter wid ein pointer auf einen string erwartet (da %s). Dein pointer zeigt also auf die adresse 0x1C, wo mit sicheheit keine brauchbarer string leigt.
Die %c stehen für single-byte character.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_printf_type_field_characters.asp
-
Aber der erste Parameter ist ja buffer und nicht "%s"
Warum zeigt mein Pointer auf "1C" er ist ja nur ein Parameter NACH dem "s1abcd.."
Der Code ist nicht von mir.In der Beschreibung wurde gesagt,dass
oh da ist ein Tippfehler es sollvoid Funktion( void ) { char buffer[16]; // Anfangsadresse 0x0012FF1C char shellcode[] = "\x66\x31\xc0\xb4\x40\x66\xc1\xe0\x08\xb8\x0a\x10\x66\xff\xd0"; sprintf( buffer, "%s1abcd%c%c%c%c", 0x1C, 0xFF, 0x12, 0x00 ); }
heißen.
Also es wurde gesagt,dass zuerst shellcode und dann die vier anderen Bytes in BUFFER kopiert würden.
-
P:S:
Für was stehen ABCD??
-
-
Irgendwie kommt mir der Code bekannt vor. Hatten wir das nicht erst letztens?
Heiner L. schrieb:
Aber der erste Parameter ist ja buffer und nicht "%s"
CMatt meinte ja auch den ersten Parameter, der für die Formatauswertung relevant ist. Bei sprintf wäre das der 3. Parameter, in unserem Fall also 0x1C.
sprintf arbeitet mit sogenannten variablen Argumentlisten. Entsprechend dem Format ("%s1abcd%c%c%c%c") werden alle nachfolgenden Argumente ausgewertet. Wie das genau passiert, findest du in jeder ausführlichen Beischreibung der ...printf Funktionen. Im C Standard gibts zB eine.
-
Also der Code soll richtig so heißen:
void Funktion( void ){ char buffer[16]; // Anfangsadresse 0x0012FF1C char shellcode[] = "\x66\x31\xc0\xb4\x40\x66\xc1\xe0\x08\xb8\x0a\x10\x66\xff\xd0"; sprintf( buffer, "%s1abcd%c%c%c%c",shellcode, 0x1C, 0xFF, 0x12, 0x00 ); }
sorry