Ich bin fast sicher ebp+0x8
zeigt auf eine Zeichenfolge (das Programm fragt tatsächlich durch eine Eingabeaufforderung dafür, aber ich bin nicht sicher, wo es gespeichert ist). Was ist die allgemeine Idee der Linien? Warum 1 zum 32-Bit-Teil von ebp + 8 hinzufügen?Was bedeuten diese Anweisungen? (Disassembly)
mov eax,DWORD PTR [ebp+0x8]
movzx eax,BYTE PTR [eax]
mov BYTE PTR [ebp-0x11],al
add DWORD PTR [ebp+0x8],0x1
mov eax,DWORD PTR [ebp+0x8]
movzx eax,BYTE PTR [eax]
test al,al
Es ist offenbar testen, ob die Zeichenfolge nur ein einzelnes Zeichen, und kopiert das erste Zeichen 'EBP-0x11'. Die '+ 1' ist Teil der Bedingung 'if (string [1] == 0) ', die die abschließende Null prüft. – Jester
Das ist ernsthaft CodeDead. Es ist ein Debug/nicht optimierter Build, oder? Es ist komisch für dich, das zu haben, aber nicht die Quelle. Vernünftiger Code würde 'mov edx, [ebp + 8]'/'movzx eax, Byte ptr [edx + 1]'/'test al, al'. (Das Kopieren des ersten Bytes in ein lokales Array bei '[ebp-0x11]' habe ich weggelassen, da dieses nicht verwendet wird. Wenn die Kopie nicht benötigt wird, sogar 'cmp byte ptr [edx + 1], 0' Für Code-Größe würde die Verwendung von "movsb" oder "lodsb" funktionieren. –