【发布时间】:2020-12-06 11:22:49
【问题描述】:
每次我尝试使用奇怪的命令行参数运行程序时,程序都会遇到总线错误。
./test 4 5
bus error (core dumped)
./test 7 13
bus error (core dumped)
但是当我使用命令行参数运行它时,它工作得很好。
./test 12 12
这是我的代码:
.balign 4
.global main
main:
stp x29, x30, [sp, -48]! //save fp and link register to stack
mov x29, sp //update fp register
mov w28, w0 //move argc to w28
mov x27, x1 //move argv to counter2
//load argv[1]
mov x19, 1
ldr x0, [x27, w19, sxtw 3]
bl atoi
mov x21, x0
//load argv[2]
mov x19, 2
ldr x0, [x27, w19, sxtw 3]
bl atoi
mov x22, x0
//store argc, argv[1], argv[2] in memory
str w28, [x29, 16]
str x21, [x29, 20]
str x22, [x29, 28]
//allocate memory for an array
mul x24, x21, x22
lsl x24, x24, #2
sub x24, xzr, x24
add sp, sp, x24
//call function initializeRandom
ldr x0, [x29, 20]
ldr x1, [x29, 28]
mov x2, sp
bl initializeRandom
//deallocate memory
ldr x21, [x29, 20]
ldr x22, [x29, 28]
mul x24, x21, x22
lsl x24, x24, #2
add sp, sp, x24
mainEnd: //End of main() function
ldp x29, x30, [sp], 48 //restore fp and link registers
ret
////////initializeRandom(int x, int y, int* table) function////////
.balign 4
initializeRandom:
stp x29, x30, [sp, -64]!
mov x29, sp
//end of subroutine
ldp x29, x30, [sp], 64
ret
子程序 initializeRandom 的目的是用随机数填充在主函数中创建的数组。但是当子程序基本上为空时,程序甚至都不会运行。 为什么会发生总线错误以及如何解决?
【问题讨论】: