Hans ohne 00 dazwischen in den Speicher schreiben
-
Wenn ich den Inhalt der Variable hans so im Speicher platziere steht im Speicher, wenn ich mit dem Debugger nachsehe, nicht "hans" somdern "h.a.n.s".
Kann es sein das ich es irgendwie in UNICODE speichere aber es in ASCII speichern müsste?
Wie kann ich "hans" in den Speicher schreiben?unsigned char hans[] = "hans"; buf = malloc(strlen(hans)+1024*1024+1); buf = memset(buf, 0x90, 1024*1024); strcat(buf, hans); buf[strlen(buf)] = 0;
-
ich hab mal sowas gesehen wie:
unsigned char hans[] = L"hans";
-
So wie du es machst, sollte es eigentlich schon passen.
"L" deklariert den Text explizit als Unicode, also gerade das Gegenteil von dem was du willst.Wie kommst du darauf, dass es als "h.a.n.s" drinsteht?
-
Wenn ich mit dem Debugger nach dem ASCII-String "hans" suche wird nichts gefunden. Wenn ich jedoch nach "h.a.n.s" suche, finde ich die Stelle im Speicher.
-
das würde ich nciht als Indikator nehmen.
Du kannst es ganz leicht herausfinden:
Hol dir die Speicheradresse an der der String anfängt und lies 4 Byte. Daran kannst du erkennen ob es mit oder ohne 0 gespeichert wird.
-
buf[strlen(buf)] = 0;
unsinn. strlen(buf) wird dir die erste stelle eines \0 sagen, das musst du nicht nochmal =0 setzen.
buf = memset(...);
auch sinnlos, denn nach der zuweisung zeigt buf immernoch auf die selbe stelle.
strcat(buf, hans);
wahnsinnig ineffizient, denn du weisst genau, dass du 1024*1024 zeichen ueberspringen musst, und genau das muss auch strcat machen. schreibs so:
strcpy(buf+1024*1024, hans); // ich weiss, 1048576...
ausserdem weisst du nicht, ob der speicher von malloc() genullt ist. du kannst also mit deiner strcat-aktion nicht wissen, ob nach dem haufen NOPs noch anderes "string-artiges" kommt.