【发布时间】:2020-10-02 04:49:22
【问题描述】:
所以我尝试使用给定的汇编代码计算以下代码中 M 和 N 的值。
int array1[M][N];
int array2[N][M];
void copyelement(int i, int j) {
array1[i][j] = array2[j][i];
}
组装:
copyelement:
movslq %esi, %rsi
movslq %edi, %rdi
leaq (%rdi,%rdi,8), %rax
addq %rsi, %rax
leaq (%rsi,%rsi,2), %rdx
leaq (%rsi,%rdx,4), %rdx
addq %rdx, %rdi
leaq array2(%rip), %rdx
movl (%rdx,%rdi,4), %ecx
leaq array1(%rip), %rdx
movl %ecx, (%rdx,%rax,4)
ret
在阅读汇编代码时,我一直读到array2(%rip),然后我不知道如何前进。
此时,根据我的计算,我应该有%rdx = %rdi + (%rsi + %rax) + 4*((%rsi+%rax) + 2*(%rsi + %rax))。
我也不太确定如何从中获取数组大小。
【问题讨论】:
-
不要通过删除 asm 来破坏您的问题。没有它,它作为示例对未来的读者没有用处。
标签: c assembly x86-64 reverse-engineering