Segmentation fault beim modifizieren eines Strings unter Assembler
-
Hallo ich habe folgenden Assembler-Code:
.section .data .section .text .globl _start _start: xor %eax, %eax mov $70, %al xor %ebx, %ebx xor %ecx, %ecx int $0x80 jmp ender starter: popl %ebx xor %eax, %eax mov %al, 0x07(%ebx) movl %ebx, 0x08(%ebx) movl %ebx, 0x0c(%ebx) mov $11, %al lea 0x08(%ebx), %ecx lea 0x0c(%ebx), %edx int $0x80 ender: call starter .string "/bin/shNAAAABBBB"
Wenn ich den Code assembliere bekomme ich diesen Fehler:
Program received signal SIGSEGV, Segmentation fault. 0x08048063 in starter ()
Beim debuggen mit gdb habe ich herausgefunden das er bei dieser Anweisung abkratzt:
mov %al, 0x07(%ebx)
An dieser Stelle wird versucht den Wert 0x00 an die 7. Stelle des Strings zu setzen. Dabei stürzt er aber ab und ich weiß nicht warum.
Kann mir einer weiterhelfen.
-
Vielleicht sollte ich noch dabei sagen das ich das ganze mit dem GNU Assembler "as" assembliere auf einem Debian-System mit dem Kernel 3.2.0-4-686-pae
-
du holst dir vom Stack einen Wert, schreibst den in ebx, und dann dereferenzierst du diesen Wert.
Stack-->ebx
Dereferenzieren: Greife auf Adresse (ebx+7) zuAnscheinend ist die Adresse falsch.
Ich sehe auch nirgends, dass du den Wert, den du vom Stack holst, auch richtig setzt.
Setze ebx auf den Start vom String, sodass ebx die Adresse von .string beinhaltet.