我有一个“你好,世界!”用ARM汇编语言编程,我想把它转换成shell代码,在内存区域执行它。在英特尔汇编语言中,我去掉了.data部分,因为在转换到shell代码时,只使用.text部分。(See here)
现在,我正努力用武器装配语言来做同样的事情。其基础是以下代码:
ARM大会Hello
.global _start
_start:
mov r7, #4
mov r0, #1
ldr r1,=string
mov r2, #12
swi 0
mov r7, #1
swi 0
.data
string:
.ascii "Hello, World"修改的ARM程序集Hello以省略.data节
.global _start
.global mymessage
mymessage:
mov r7, #4
mov r0, #1
pop {r1}
mov r2, #12
swi 0
mov r7, #1
swi 0
_start:
bl mymessage
.ascii "Hello, World"但这是行不通的,因为这显然是“非法指令”。有什么想法吗?
发布于 2017-05-10 11:48:55
ARM已经具有PC相对寻址,而且在任何情况下,bl都不会将返回地址推到堆栈上。
这样做是可行的:
.global _start
_start:
mov r7, #4
mov r0, #1
adr r1, string
mov r2, #12
swi 0
mov r7, #1
swi 0
string:
.ascii "Hello, World"https://stackoverflow.com/questions/43890583
复制相似问题