在x86汇编代码,NASM,Linux中操作字符串

时间:2011-09-26 19:09:01

标签: x86 intel nasm

我一直在尝试操作.s文件中的字符串 我希望包含“/ bin / bash”的变量“pa”转换为“/ 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 :(得分:0)

自从我与ASM合作已经有一段时间了,而且我并不熟悉NASM,所以我在这里错了。但你可能想试一试。 。

问题在于你不能像那样进行内存到内存的移动。

试试这个:

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

将来,如果您告诉我们您收到的是汇编错误而不是错误的输出,那将会很有帮助。