Assembly SIGSEGV在组装中的应用
我正在读一本关于利用、编写外壳代码和漏洞发现的书。我现在所在的章节是关于编写外壳代码的,我用汇编语言编写了一个程序并进行了汇编,但是我在第一条mov指令中遇到了一个分段错误。程序需要系统调用execve函数。这是通过att中的objdump看到的组装后的代码:Assembly SIGSEGV在组装中的应用,assembly,x86,shellcode,Assembly,X86,Shellcode,我正在读一本关于利用、编写外壳代码和漏洞发现的书。我现在所在的章节是关于编写外壳代码的,我用汇编语言编写了一个程序并进行了汇编,但是我在第一条mov指令中遇到了一个分段错误。程序需要系统调用execve函数。这是通过att中的objdump看到的组装后的代码: execve2: file format elf32-i386 Disassembly of section .text: 08048080 <_start>: 8048080: eb 1a
execve2: file format elf32-i386
Disassembly of section .text:
08048080 <_start>:
8048080: eb 1a jmp 804809c <GotoCall>
08048062 <shellcode>:
8048062: 5e pop %esi
8048063: 31 c0 xor %eax, %eax
8048065: 88 46 07 mov %al,0x7(%esi)
8048068: 8d 1e lea (%esi),%ebx
804806a: 89 5e 08 mov %ebx,0x8(%esi)
804806d: 89 46 0c mov %eax,0xc(%esi)
8048070: b0 0b mov $0xb,%al
8048072: 89 f3 mov %esi,%ebx
8048074: 8d 4e 08 lea 0x8(%esi),%ecx
8048077: 8d 56 0c lea 0xc(%esi),%edx
804807a: cd 80 int $0x80
0804807c <GotoCall>:
804807c: e8 e1 ff ff ff call 8048062 <shellcode>
8048081: 2f das
8048082: 62 69 6e bound %ebp,0x6e(%ecx)
8048085: 2f das
8048086: 73 68 jae 80480f0 <GotoCall+0x74>
8048088: 4a dec %edx
8048089: 41 inc %ecx
804808a: 41 inc %ecx
804808b: 41 inc %ecx
804808c: 41 inc %ecx
804808d: 4b dec %ebx
804808e: 4b dec %ebx
804808f: 4b dec %ebx
8048090: 4b dec %ebx
execve2:文件格式elf32-i386
第节的分解。正文:
08048080 :
8048080:eb 1a jmp 804809c
08048062 :
8048062:5e pop%esi
8048063:31 c0异或%eax,%eax
8048065:88 46 07 mov%al,0x7(%esi)
8048068:8d 1e lea(%esi),%ebx
804806a:89 5e 08 mov%ebx,0x8(%esi)
804806d:89 46 0c mov%eax,0xc(%esi)
8048070:B00B mov$0xb,%al
8048072:89 f3 mov%esi,%ebx
8048074:8d 4e 08 lea 0x8(%esi),%ecx
8048077:8d 56 0c lea 0xc(%esi),%edx
804807a:cd 80整数$0x80
0804807c:
804807c:e8 e1 ff ff ff呼叫8048062
8048081:2f das
8048082:62 69 6e绑定%ebp,0x6e(%ecx)
8048085:2f das
8048086:7368 jae 80480f0
8048088:4a十二月%edx
8048089:41 inc%ecx
804808a:41 inc%ecx
804808b:41 inc%ecx
804808c:41 inc%ecx
804808d:4b十二月%ebx
804808e:4b十二月%ebx
804808f:4b十二月%ebx
8048090:4b十二月%ebx
在8048065,我得到了一个SIGSEGV错误,我不知道要更改什么,什么是错误的?
。text
部分是只读的。您正在尝试修改它。我如何更改它?我对汇编不是很熟悉。Jester是正确的,您想如何修复它在某种程度上取决于您如何构建它。如果您使用gcc链接和编译,您可以尝试类似于gcc-static-Wl,-N-nostartfiles-m32 execve2.s-o execve2
。这假设assemby文件是execve2.s
,您想要的可执行程序是execve2
。主键是-Wl,-N
,它将-N
传递给链接器,链接器被描述为将文本和数据部分设置为可读写。如果直接使用LD链接,则只需将-N
添加到LD命令行。我使用nasm构建它,LDM编辑的注释建议如果直接使用LD链接,则将-N
添加到LD
命令行。