签出Linux ARM shellcode,我发现系统调用是通过使用svc 1指令进行的。但是,我也看到了一些示例,其中他们使用svc 0作为调用系统调用的指令。

显然,可以在ARMsvc 0上执行Linux在svc 1上的系统调用。与x86之类的体系结构相反,为什么会这样?这两个指令产生的中断类型是否相同?

评论

这是相同的中断。 #imm参数部分(0、1等)被Linux IIRC忽略。

#1 楼

我想您应该检查ARM文档的这一部分以及svc及其参数的描述。通过交叉引用两个链接,您将找到问题的答案。

从上面的链接中,您将能够了解svc指令的参数代表什么。应该被CPU忽略,但是异常处理程序可以使用该参数来确定请求的服务:ARM指令(如果值介于0和16777215之间)或Thumb指令(如果值介于0和255之间)。 >
thumb指令集是用于ARM指令的紧凑型16位编码。它主要是为紧凑的代码密度而设计和实现的。您可以查看有关ARM体系结构的Wikipedia页面以获取更多信息,但是我建议您仔细阅读ARM文档以获取准确的技术细节。

评论


您能否添加从这些链接中得出的简短答案?

–0xea
2014年5月1日9:58

我们开始:完成!

– Yaspr
2014年5月2日,11:23