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
Assembly 程序计数器在没有任何指令修改的情况下发生异常变化(qemu arm,裸机)_Assembly_Segmentation Fault_Gdb_Arm_Qemu - Fatal编程技术网

Assembly 程序计数器在没有任何指令修改的情况下发生异常变化(qemu arm,裸机)

Assembly 程序计数器在没有任何指令修改的情况下发生异常变化(qemu arm,裸机),assembly,segmentation-fault,gdb,arm,qemu,Assembly,Segmentation Fault,Gdb,Arm,Qemu,我目前正试图让我编写的程序在裸机手臂设备上运行。因为我还没有这个设备,所以我尝试使用qemu在arm仿真上运行代码 我使用以下命令运行代码:qemu系统arm-M realview-pb-a8-M 128M-nographic-s-s-kernel myprog 执行总是停留在同一点,即使我使用其他板设置。这就是它被卡住的地方(一些openSSL代码): 我如何解决这个问题?这可能是编译器错误吗 我尝试了这些编译器标志:-marm-mthumb interwork2字节的更改听起来像是拇指模式,

我目前正试图让我编写的程序在裸机手臂设备上运行。因为我还没有这个设备,所以我尝试使用qemu在arm仿真上运行代码

我使用以下命令运行代码:
qemu系统arm-M realview-pb-a8-M 128M-nographic-s-s-kernel myprog

执行总是停留在同一点,即使我使用其他板设置。这就是它被卡住的地方(一些openSSL代码):

我如何解决这个问题?这可能是编译器错误吗


我尝试了这些编译器标志:
-marm
-mthumb interwork

2字节的更改听起来像是拇指模式,实际上设置了
cpsr
位。要么这确实是thumb代码,在这种情况下你将其反汇编错误,要么这是arm代码,在这种情况下,它在thumb模式下被错误调用。

,r12设置了lsb-这里唯一“行为异常”的显然是你的编译器/链接器,以某种方式为看起来是ARM代码的部分设置一个拇指符号。什么是拇指符号?如中所示,对象文件中a地址的lsb用于指示该函数是拇指代码还是ARM代码。用
-marm
选项编译和链接所有东西会有什么不同吗?我会在周一检查。它不会改变任何东西。
   0x398b4 <EVP_CipherInit_ex+884>         ldr    r3, [r11, #-24]
   0x398b8 <EVP_CipherInit_ex+888>         ldr    r3, [r3]
   0x398bc <EVP_CipherInit_ex+892>         ldr    r12, [r3, #20]
   0x398c0 <EVP_CipherInit_ex+896>         ldr    r0, [r11, #-24]
   0x398c4 <EVP_CipherInit_ex+900>         ldr    r1, [r11, #-36] ; 0x24  
   0x398c8 <EVP_CipherInit_ex+904>         ldr    r2, [r11, #4] 
   0x398cc <EVP_CipherInit_ex+908>         ldr    r3, [r11, #8]
   0x398d0 <EVP_CipherInit_ex+912>         mov    lr, pc
   0x398d4 <EVP_CipherInit_ex+916>         bx     r12
[..]
-> 0x391e4 <aes_init_key>          push   {r11, lr}  <- Strange thing happens at this instruction.
   0x391e8 <aes_init_key+4>        add    r11, sp, #4
   0x391ec <aes_init_key+8>        sub    sp, sp, #40     ; 0x28
   0x391f0 <aes_init_key+12>       str    r0, [r11, #-24]
   0x391f4 <aes_init_key+16>       str    r1, [r11, #-28]
r0   0xe28db004 -494030844    r1   0x7aeb8  503480
r2      0x7aea8     503464    r3       0x1       1
r4      0x7df98     515992    r5   0x7dfa8  516008
r6          0x0          0    r7       0x0       0
r8          0x0          0    r9       0x0      0
r10     0x60000     393216    r11  0x7ae34  503348
r12     0x391e5     233957    sp   0x7ae08  0x7ae08 <__malloc_av_+252>
lr      0x398d8     235736    pc   0x391e6  0x391e6 <aes_init_key+2>
cpsr 0x200001f3  536871411
r0   0xe28db004  -494030844   r1     0x7aeb8    503480
r2      0x7aea8      503464   r3         0x1         1
r4      0x7df98      515992   r5     0x7dfa8    516008
r6          0x0           0   r7         0x0         0
r8          0x0           0   r9         0x0         0 
r10     0x60000      393216   r11    0x7ae34    503348
r12     0x391e5      233957   sp     0x7e000   0x7e000
lr      0x391e8      233960   pc         0x8       0x8
cpsr 0x200001db   536871387