【问题标题】:x32 ASM Compiled (With NASM) for x64 Syscalls not working为 x64 系统调用编译的 x32 ASM(使用 NASM)不起作用
【发布时间】:2014-01-08 22:31:31
【问题描述】:

系统调用如下:

1 - 退出
3 - 阅读
4 - 写

他们工作得很好。但是,像这样的调用:

11 - 执行 29 - 暂停

它们不起作用。我试过同时使用十六进制和十进制(只是为了确保我没有在这方面搞砸)。请帮忙!

简单的:

SECTION .text
    global _start
_start:
    xor eax, eax
    xor ebx, ebx
    mov al, 29
    int 80h

这是我的编译方式。我正在运行 x64 位 Arh Linux 并使用 NASM 进行编译以模拟 i386:

nasm -f elf32 -o temp.o file.asm
ld -s -m elf_i386 -o exec temp.o
rm temp.o
./exec

我没有得到任何东西,而不是暂停或任何东西。它只是停止(不,它没有暂停)。我可以打字,我可以回车,我可以做任何我想做的事。一旦我ctrl+c,它就会关闭。但这不是停顿。

【问题讨论】:

    标签: linux assembly nasm system-calls


    【解决方案1】:

    这似乎适用于 x86_64 Archlinux 上的我。你怎么确定它不是暂停()?

    strace'ing 对我来说表明 pause() 确实被调用并产生了您上面描述的相同特征。从另一个终端向该进程发送 SIGHUP 也会为我恢复执行。

    请提供 strace 输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2017-10-13
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多