【发布时间】:2019-09-06 20:53:12
【问题描述】:
我有特定的指令将“/bin/sh”的 8 字节十六进制值存储在 %rax 寄存器中。
所以 8 字节意味着 64 位.. 所以我的第一个方法是使用 movq 命令.. 但我无法确定如何正确格式化命令。
/bin/sh 十六进制为:2f 62 69 6e 2f 73 68 只需要 7 个字节.. 是否有某种空终止符或填充我可以正确写入命令?
# Write the 8-byte hex value for "/bin/sh" to %rax register
movq $0x68732f6e69622f, %rax
最终该命令将被系统调用使用
谢谢!
【问题讨论】:
-
请注意,由于字节顺序,您需要翻转字节顺序。另外,我想知道您为什么要将这些字符放入寄存器中;所有系统调用都期望寄存器包含指向字符串的指针。
-
我以为我在代码中做对了?是否需要空终止符或任何使其变为 8 个字节的东西
-
阅读@fuz 的评论,您可能误解了您的“具体说明”。除非这是您自己实现的实验性系统调用...
-
再次阅读您的帖子,看来是的,您确实做得对!请注意,字符串已经以 NUL 结尾。您可以通过
movq $0x0068732f6e69622f, %rax明确强调这一事实。