Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无数据段的ARM部件中的Hello World_C_Assembly_Arm_Shellcode - Fatal编程技术网

C 无数据段的ARM部件中的Hello World

C 无数据段的ARM部件中的Hello World,c,assembly,arm,shellcode,C,Assembly,Arm,Shellcode,我有一个ARM汇编语言的“Hello,World!”程序,我想把它转换成shell代码,在内存区域中执行它。在英特尔汇编语言中,我去掉了.data部分,因为转换为shell代码时只使用.text部分。() 现在,我正努力在ARMs汇编语言中做到这一点。其依据是以下代码: 手臂总成Hello World .global _start _start: mov r7, #4 mov r0, #1 ldr r1,=string mov r2, #12 swi 0

我有一个ARM汇编语言的“Hello,World!”程序,我想把它转换成shell代码,在内存区域中执行它。在英特尔汇编语言中,我去掉了.data部分,因为转换为shell代码时只使用.text部分。()

现在,我正努力在ARMs汇编语言中做到这一点。其依据是以下代码:

手臂总成Hello World

.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 Assembly Hello World以省略.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"

但这不起作用,因为这显然是一个“非法指令”。有什么想法吗?

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"

ARM已经具有PC相对寻址,并且在任何情况下,
bl
都不会将返回地址推送到堆栈上。
bl
是等效的,但ARM不会将返回地址推送到堆栈上。但是因为ARM有PC相对寻址,你根本不需要这个技巧。啊,我明白了,谢谢!因为您的字符串在任何情况下都是一个常量只读,所以它可以在中。文本不必在中。数据这里有一个很好的设置来测试这一点:酷,谢谢,这很有效!现在我们只需要弄清楚如何将其转换为外壳代码。有什么想法吗?不知道你想转换什么。。。只需在汇编程序中运行它,就可以得到字节。我们要提取外壳代码,如x04\xe7\x06….,并且“string.ascii”区域的字节与其余字节分开。我只是把它们全部放进一个“组合”外壳代码中执行吗?是的。不知道你说的“分离”是什么意思,它们应该直接跟在代码后面。没关系,我明白了;)谢谢你的帮助,杰斯特!