【发布时间】:2013-03-27 08:06:20
【问题描述】:
代码在这里:
void main()
{
_exit(0);
}
通过拆卸主要部分:
80483d4: 55 push %ebp
80483d5: 89 e5 mov %esp,%ebp
80483d7: 83 e4 f0 and $0xfffffff0,%esp
80483da: 83 ec 10 sub $0x10,%esp
80483dd: c7 04 24 00 00 00 00 movl $0x0,(%esp)
80483e4: e8 17 ff ff ff call 8048300 <_exit@plt>
据我所知,进行系统调用的方法是使用“int 0x80”,但我只能在这里找到“call 8048300 exit@plt”,那么如何更改 gcc 以使其在“int 0x80”中编译系统调用方式(我需要我的程序以这种方式调用系统调用)?
【问题讨论】:
-
你为什么要问?你想达到什么目的??
-
void main() 在 C 的托管实现上是虚假的,相对于您的整体问题而言,这是一个小问题。只是吹毛求疵。
-
@BasileStarynkevitch 因为我想扫描我的程序的汇编代码以查找对系统调用的调用发生的位置,因此使用“int $0x80”时更容易检测。
-
@RandyHoward 感谢您的建议。
-
@Coaku 如果您想查看您的程序通过
int 0x80对内核进行的确切系统调用,请使用名为strace的(binutils?)工具。它向您显示具有给定参数和返回值的确切系统调用,甚至在出现问题时为您解释 errno。对于库调用,您可以使用ltrace。
标签: c linux gcc assembly system-calls