在ASM中调用函数时出现SegFault

时间:2019-03-20 14:34:58

标签: linux assembly segmentation-fault arm

我开始学习如何在汇编中调用函数。我在互联网上关注了很多教程,并对它进行了一些修改。

但是它并没有真正按预期工作。

$players = playerGame::where('minutes', '<=', 0)
    ->where('update_status', 1)
    ->where('when', '<', Carbon::now())
    ->groupBy('player_id')
    ->get();

输出结果

.data
 hello:  .ascii "hello everyone\n"
 len= . - hello
 .text

.global _start

exit:
       mov %r1,#0
       mov %r2,#0
       mov %r0, #0
       mov %r7, #1
       swi #0

println:
        mov %r7, #4
        swi #0
        mov %pc, %lr
        bx %r7
_start:
        ldr %r1, =hello
        ldr %r2, =len
        b println
        b exit

我不知道我哪里错了。

1 个答案:

答案 0 :(得分:2)

对于函数调用,请使用Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim gen1 As New System.Random if gen1.Next(0, 101) <= 50 then MessageBox.Show("less than or = to 50") else MessageBox.Show("More than or = to 51") End if End Sub (分支和链接)指令。这将设置int notNullCount = 0; Object myNotNullElement; for (Object element : myArray){ if (notNullCount > 1){ //Throw exception or do whaterver you need to do to signal this break; } if (element != null){ myNotNullElement = element; notNullCount++; } } 以包含寄信人地址。您的代码使用bl(分支)而不是lr,因此b未设置,并且从bl返回的地址无法预测,可能会导致程序崩溃。

要解决此问题,请使用lr而非println进行函数调用:

bl