【问题标题】:Segmentation fault trying to create a socket - Assembly尝试创建套接字的分段错误 - 程序集
【发布时间】:2017-06-11 12:01:43
【问题描述】:
bits 32

section .text

    global _start

_start:

    ;socket
    mov eax, 0x66
    mov ebx, 0x1
    push 0x0
    push 0x1
    push 0x2
    mov ecx, esp
    int 0x80

    ;bind
    mov edx, eax
    xor eax, eax
    mov eax, 0x66
    mov ebx, 0x2
    push word 0x0
    push word 0x5c11
    push word 0x2
    mov ecx, esp
    push 0x16
    push ecx
    push edx
    int 0x80

    ;listen
    push eax
    mov eax, 0x66
    mov ebx, 0x4
    push edx
    mov ecx, esp
    int 0x80

    ;accept
    push eax
    push eax
    push edx
    mov ecx, esp
    int 0x80
$ nasm -f elf32 socket.asm ; ld -m elf_i386 -o socket socket.o

$ ./socket 

Segmentation fault (core dumped)

我已经在 Ubuntu 16.04 Desktop x86_64 上编译了二进制文件。

有什么想法吗?

【问题讨论】:

  • 我有一个想法:使用调试器找出问题所在。
  • 我和格雷先生在一起,您可以使用多种语言的调试器来躲避,但不能使用汇编。
  • 通过使用调试器,我注意到 rip 被不存在的地址覆盖。所以我在最后添加了一个出口,现在我没有收到任何分段错误。对吗?

标签: sockets assembly segmentation-fault x86-64


【解决方案1】:

我在末尾添加了一个出口,现在我没有收到分段错误错误。

mov eax, 0x1
mov ebx, 0x0
int 0x80

【讨论】:

  • 是的,没错。 +1 用于解决您自己的问题。两个提示:(1)在 Stack Overflow 上发布代码时,选中整个块并按 Ctrl+K(或单击工具栏上的{} 按钮)将其格式化为代码。 (2) mov reg, 0 更常用和更有效地写成xor reg, reg。所以在这种情况下,第二行可能只是xor ebx, ebx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多