小编XAd*_*der的帖子

ldr的奇怪行为[pc,#value]

我正在调试一些c ++代码(ARM平台上的WinCE 6),我发现一些奇怪的行为:

    4277220C    mov         r3, #0x93, 30
    42772210    str         r3, [sp]
    42772214    ldr         r3, [pc, #0x69C]
    42772218    ldr         r2, [pc, #0x694]
    4277221C    mov         r1, #0
    42772220    ldr         r0, [pc, #0x688]
Run Code Online (Sandbox Code Playgroud)

Line 42772214 ldr r3, [pc, #0x69C]用于从.DATA部分得到一些常量,至少我是这么认为的.

奇怪的是,根据代码r2应该填充来自地址pc = 0x42772214 + 0x69C = 0x427728B0的内存,但是根据它从0x427728B8(8字节+)加载的内存内容,它也适用于其他ldr用法.

它是调试器的错误还是我对ldr/pc的理解?我没有得到的另一个问题 - 为什么访问.data部分是相对于执行的代码?我觉得有点奇怪.

还有一个问题:我找不到第一个mov命令的语法(任何一个都可以指向我的Thumb(1C2)的optype规范)

对于laic描述很抱歉,但我只是熟悉程序集.

c++ assembly arm

11
推荐指数
1
解决办法
5602
查看次数

标签 统计

arm ×1

assembly ×1

c++ ×1