_start:
jmp short call
shell:
pop esi
movsd ;move 4 byte from esi to edi (/bin)
mov edx,edi ;edx contains /bin
xor edi,edi
movsw ;move 2 bytes (/s)
xor ebx,ebx
mov ebx,edi ;ebx contains /s
xor eax,eax
xor edi,edi
movsb
mov eax,edi ;eax contiene h
mov esi,edx ;esi contains /bin
xor ecx,ecx
push ecx
mov edx,esp ;edx dword NULL
push ecx ;NULL
push ecx ;NULL
add esp,3 ;0
push eax
add esp,3 ;h
push ebx
add esp,2 ;/s
push esi ;/bin
mov ecx,esp ;/bin/sh0,NULL
xor edi,edi
push edi
add esp,3 ;0
push eax
add esp,3
push ebx
add esp,2
push esi
mov ebx,esp ;/bin/bash0
xor eax,eax
mov al,0xb
int 0x80
call:
call shell
path db "/bin/sh"
我试图编写一个外壳代码(jmp-调用-pop)来生成一个shell,但是我在movsd
指令(分段错误)上遇到了一个问题。我不明白是怎么回事,我用ptr设置esi到字符串,所以movsd应该将4字节从esi移动到edi,对吗?但是为什么它是分段断层呢?
发布于 2014-02-17 15:39:35
movsd
将4个字节从esi
指向的内存移动到edi
指向的内存。您还没有初始化edi
,因此这是一个指向任意地址的存储;它发生在分段错误上也就不足为奇了。
英特尔的架构手册,第2卷(这些是免费下载,可以回答您所有的基本组装问题。下载它们,并熟悉在哪里找到东西,如果您要编写程序集):
将第二个操作数(源操作数)指定的字节、字或双字移到第一个操作数(目标操作数)指定的位置。源操作数和目标操作数都位于内存中。
https://stackoverflow.com/questions/21831091
复制相似问题