cygwin中不能int 0x80吗?

发布于 2022-07-26 20:44:35 字数 449 浏览 20 评论 4

偶尝试在Cygwin下写汇编,好像不行~
代码(test.s):

.section .data
output:
        .ascii "This is a sample outputn"
.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 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

如果没有 2022-07-28 02:17:48

这想这样应该是绕过了cygwin层

喵星人汪星人 2022-07-28 00:22:54

当然崩溃。这个中断是让显卡输出的,不是在 win32 的 csrss (控制台的子系统)中输出,两个是不同的概念,呵呵

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

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

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

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

橘虞初梦 2022-07-27 09:43:48

偶在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的函数,可惜也崩溃了……

难得心□动 2022-07-27 03:30:18

俄,这个中断的后果……

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文