- 论坛徽章:
- 0
|
本帖最后由 vupiggy 于 2011-04-21 20:08 编辑
movl $1,%eax
movl %eax,%ebx
int $0x80
vistar_w 发表于 2011-03-23 08:47 ![]()
1. int $0x80 越过 libc 直接调系统调用不提倡,谁也不知道内核对参数,返回值的处理什么时候会变动,甚至可能 int $0x80 这种方式是否还被支持都不得而知。
2. 如果只为了试验,假设 int $0x80 仍然被支持,你上面这段代码的错误之处在于参数传递方式不对,通过 ebx, ecx 传系统调用参数是 Linux ia32 支持的,在 mac os x 上,通过栈,于是代码大概应该是这样(手头没有 Intel 的 mac 没法试):- push $23 # 传入 exit 的参数
- movl $1, %eax # 指定系统调用号,1: exit
- sub $4, esp # 一点额外空间
- int $0x80
复制代码 如果运气好汇编链接通过,运行完以后 echo $?,看看是不是 23。
建议生成 32 位的 binary。- as --32 -o test.o test.s
- ld -m elf_i386 -e _start -o test test.o
复制代码 |
|