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) zu

    Anscheinend 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.


Anmelden zum Antworten