深入理解系统调用:从 int 0x80 到 syscall
1. C 运行时环境与函数命名
在 C 运行时环境中,程序的第一个函数通常需要命名为 main 。不过,如果你想编写一个不依赖任何 C 库例程、独立运行的程序,你可以自由选择函数名。但此时不能使用 gcc 来链接程序,而需要显式使用 ld ,并通过 -e 选项指定函数名。
例如,要汇编和链接一个特定程序,可使用以下命令:
$ as --gstabs -o helloWorld_int80.o helloWorld-int80.s
$ ld -e myStart -o helloWorld-int80 helloWorld-int80.o
2. int 0x80 系统调用
在 Linux 中, int 0x80 是用于执行系统调用的软件中断。我们通过 eax 寄存器将 write 系统调用的编号传递给 int 0x80 处理程序。 write 系统调用的参数与调用 write C 包装函数时使用的参数相同,但需要将它们存储在指定的寄存器中。
调用 int 0x80 处理程序时,我们仅使用寄存器的 32 位部分。这一机制是为 32 位环境设计的,虽然在 64 位
超级会员免费看
订阅专栏 解锁全文
197

被折叠的 条评论
为什么被折叠?



