Assembly SIGSEGV在组装中的应用

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

我正在读一本关于利用、编写外壳代码和漏洞发现的书。我现在所在的章节是关于编写外壳代码的,我用汇编语言编写了一个程序并进行了汇编,但是我在第一条mov指令中遇到了一个分段错误。程序需要系统调用execve函数。这是通过att中的objdump看到的组装后的代码:

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
命令行。