免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1219 | 回复: 4
打印 上一主题 下一主题

cygwin中不能int 0x80吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-20 19:20 |只看该作者 |倒序浏览
偶尝试在Cygwin下写汇编,好像不行~
代码(test.s):

.section .data
output:
        .ascii "This is a sample output\n"
.section .text
.globl start
_start:

#exit(0)
movl $1, %eax
movl $0, %ebx
int $0x80

as -o test.o test.s
ld -o test test.o
编译后执行./test出现异常,不知为何,请达人指点一二,感激不尽~

[ 本帖最后由 hlinzhou 于 2006-10-20 19:28 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-10-20 19:44 |只看该作者
俄,这个中断的后果……

呵呵,Cygwin 最终还是遵从 win32 的,所以这个 int 0x80 绝对不会打印到 “屏幕” 上去……并且,后果也是可观的。

另外,Cygwin,所以还是用 newlib 的库函数吧。
BTW,newlib 是被 Cygwin 用来提供 C 接口的库。

论坛徽章:
0
3 [报告]
发表于 2006-10-20 20:52 |只看该作者
偶在Win下反汇编看下……汗……
00401000 > $  B8 01000000   mov     eax, 1
00401005   .  BB 00000000   mov     ebx, 0
0040100A   .  CD 80         int     80
newlib不会用……redhat上那个即使make过了,偶也不一定有能力把它用到汇编里去……
还是用俺那个可怜的Bochs吧……

P.S.
不过gcc编译的结果满怪的,生成的exe无比复杂,没有直接int 80,而是调用了N多的cygwin1.dll的函数,可惜也崩溃了……

论坛徽章:
0
4 [报告]
发表于 2006-10-20 21:01 |只看该作者
当然崩溃。这个中断是让显卡输出的,不是在 win32 的 csrss (控制台的子系统)中输出,两个是不同的概念,呵呵

win32/nt 上,又转换至对 ntoskrnl 的调用。

你用 write(1,"Hello, world.\n",15) 看看?

另外,软中断应该在内核空间吧,怎么跑到用户空间代码里了?你是在精简代码,对么?

[ 本帖最后由 langue 于 2006-10-20 21:05 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-10-21 10:06 |只看该作者
这想这样应该是绕过了cygwin层
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP