【发布时间】:2011-11-08 07:24:20
【问题描述】:
我正在尝试使用以下 asm 代码编写 shellcode,但我总是在 movl %esi, 0x8(%esi) 处遇到段错误,知道为什么吗?实际上只运行 movl %esi, 0x8(%esi) 会导致段错误。
void main() {
__asm__(
"mov $0x80, %edx\n\t"
"jmp l1\n\t"
"l2:popl %esi\n\t"
"movl %esi,0x8(%esi)\n\t"
"movb $0x0,0x7(%esi)\n\t"
"movl $0x0,0xc(%esi)\n\t"
"movl $0xb,%eax\n\t"
"movl %esi,%ebx\n\t"
"leal 0x8(%esi),%ecx\n\t"
"leal 0xc(%esi),%edx\n\t"
"int $0x80\n\t"
"movl $0x1, %eax\n\t"
"movl $0x0, %ebx\n\t"
"int $0x80\n\t"
"l1:call l2\n\t"
".string \"/bin/sh\"\n\t"
);
}
【问题讨论】:
-
您的代码段(您放置字符串的位置)可能不可写。查看
mprotect(2)。 -
使用 8[ESI] 检查您尝试访问的地址
标签: assembly segmentation-fault