Манипулирование строками в ассемблере x86, NASM, Linux - PullRequest
1 голос
/ 26 сентября 2011

Я пытался манипулировать строкой в ​​моем файле .s, я хочу, чтобы переменная "pa", содержащая "/ bin / bash", была преобразована в "/ bin / sh", а затем я хочу сделать вызовсистема, которая выполняет "/ bin / sh" Я написал механизм печати, чтобы убедиться, что "pa" имеет "/ bin / bash"

Я попытался сделать это

mov eax,pa
mov [eax+5],[eax+7]; /bin/bash becomes /bin/sash\0
mov [eax+6],[eax+8]; /bin/sash becomes /bin/shsh\0
mov [eax+7],[eax+9]; /bin/shsh becomes /bin/sh\0

но я думаю, что это не так, как я работаю. Я новичок в NASM

Пожалуйста, помогите мне

весь фрагмент кода ниже

`section .data
%defstr path %!SHELL
pa db path,10
palen  equ $-pa         

section .text
global _start
_start:
        mov eax,pa
        mov [eax+5],[eax+7]  ; /bin/bash becomes /bin/sash\0
        mov [eax+6],[eax+8]  ; /bin/sash becomes /bin/shsh\0
        mov [eax+7],[eax+9]  ; /bin/shsh becomes /bin/sh\0
        mov eax,4            ; The system call for write (sys_write)
        mov ebx,1            ; File descriptor 1 - standard output
        mov ecx,pa        
        mov edx,palen    
        int 80h            


        mov eax,1            ; The system call for exit (sys_exit)
        mov ebx,0            ; Exit with return code of 0 (no error)
        int 80h
'

1 Ответ

0 голосов
/ 27 сентября 2011

Прошло много времени с тех пор, как я работал с ASM, и я не очень знаком с NASM, поэтому я могу ошибаться здесь.Но вы можете попробовать.,.

Проблема в том, что вы не можете выполнить перемещение памяти в память таким образом.

Попробуйте это:

mov bx,[eax+7]
mov [eax],bx
mov byte [eax+7], 0

В будущем этобудет полезно, если вы сообщите нам, что вы получили ошибку ассемблера, а не неправильный вывод.

...