【发布时间】:2020-06-09 02:31:45
【问题描述】:
我最近开始为Xbox 360倒游戏,我真的不明白为什么%r11和%r10的内容存储在地址相同的地址[%r8]和[%r9]中( 0x00010000)。
此代码由 IDA 生成。
.globl _start
_start:
.set var_1F0, -0x1F0
.long_zero: .long 0
.long_zero_1: .long 0
mflr %r12 # Move from link register
bl sub_831A8168 # Branch
addi %r31, %sp, var_1F0 # Add Immediate
stwu %sp, -0x1F0(%sp) # Store Word with Update
nop # No Operation
# -------------------------------------------------------------|
mr %r8, %r8 # Move Register
mr %r8, %r8 # Move Register
lis %r9, ((long_zero+0x10000)@h) # Load Immediate Shifted
lis %r8, ((long_zero_1+0x10000)@h) # Load Immediate Shifted
li %r11, -1 # Load Immediate
li %r10, -1 # Load Immediate
stw %r11, long_zero@l(%r9) # Store Word
stw %r10, long_zero_1@l(%r8) # Store Word
# -------------------------------------------------------------|
【问题讨论】:
-
它们被存储到不同的地址,因为一个使用
long_zero@l作为偏移量,另一个使用long_zero_1@l作为偏移量。 -
您的意思是
long_zero@l(%r9)将改为address of long_zero + 0 + [%r9]?