我一直在尝试操作.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
'
答案 0 :(得分:0)
自从我与ASM合作已经有一段时间了,而且我并不熟悉NASM,所以我在这里错了。但你可能想试一试。 。
问题在于你不能像那样进行内存到内存的移动。
试试这个:
mov bx,[eax+7]
mov [eax],bx
mov byte [eax+7], 0
将来,如果您告诉我们您收到的是汇编错误而不是错误的输出,那将会很有帮助。