【问题标题】:how do I make a syscall 11 (execve) in arm?如何在 arm 中进行系统调用 11 (execve)?
【发布时间】:2018-03-26 16:48:44
【问题描述】:

这是我的代码:

@execve takes 3 arguments (r0,r1,r2)

mov r7,#11 @syscall number for execve
ldr r0,=addr_of_string
sub r1,r1,r1 @so that r1 can get zero 
sub r2,r2,r2 @same for r2
svc #0

end:
mov r7,#1
svc 0

.data
addr_of_string: .asciz "\bin\ls"

它编译成功并成功链接,但是当我执行它时,我得到:

通过 exec 系统调用传递了一个 NULL argv[0]

【问题讨论】:

  • 什么操作系统?从代码看,似乎是32位的品种。并且判断我们使用的是svc 0,我猜是Linux 变种?我不是这里的专家,但是拥有这些信息应该可以帮助其他人更容易地回答这个问题。另外,我希望将 #0 简单地加载到 r1r2 中,这不是减法的乐趣,而是我猜对每个人都有自己的乐趣。
  • 看看这是否没有帮助:stackoverflow.com/questions/42906569/…
  • 是的,先生..这是 Linux on arm v7..
  • 如果您按照我提供的链接中的信息进行操作,您可以让您的 exec 功能正常工作吗?
  • 在我的情况下.. r0 = "/bin/ls" r1 = 0 r2 = 0 r7 = #11 但是也..它不工作

标签: arm


【解决方案1】:

Why can the execve system call run "/bin/sh" without any argv arguments, but not "/bin/ls"?

上面的线程说,因为 /bin/ls 是 gnu coreutils 包的一部分,他们调用 'set' [program name] 来设置它。

【讨论】:

    【解决方案2】:

    Why can the execve system call run "/bin/sh" without any argv arguments, but not "/bin/ls"?

    上面的线程说,因为 /bin/ls 是 gnu coreutil 包的一部分,它必须在调用之前设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 2021-07-30
      • 2015-03-23
      • 2012-02-12
      • 2020-05-20
      • 1970-01-01
      • 2016-08-30
      • 2013-05-20
      相关资源
      最近更新 更多