系统调用如下:
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
,它就会关闭。但这不是暂停。
最佳答案
这似乎适用于 x86_64 Archlinux。你怎么确定它不是 pause()ing?
strace'ing 对我来说表明 pause() 确实被调用并产生与您上面描述的相同的特征。从另一个终端向该进程发送 SIGHUP 也会为我恢复执行。
请提供 strace 输出。
关于linux - 为 x64 系统调用编译的 x32 ASM(使用 NASM)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21007991/