gpt4 book ai didi

c - 如何使用给定的汇编代码查找 C 代码中变量之间的间隙值?

转载 作者:行者123 更新时间:2023-11-30 20:23:18 25 4
gpt4 key购买 nike

已知:A = 5 且 B = 9,两者之间的差距是多少...

  • w 和 x?
  • y 和 p?
  • p 和 z?
  • z 和 q?

在 Chegg 上找到了这个答案,但我不确定它是否正确。

  • gap between w and x = w is a character array of size 30 but x in an integer of 7+1 bits in a 32 bit processor
  • gap between y and p = y is a short array of size 6 but p is an integer
  • gap between p and z = p is an integer but z is a double array of size 6
  • gap between z and q = z is a double array of dimension 6 but q is a short variable

代码

typedef struct {
char w[A][B];
int x;
} str1;

typedef struct {
short y[B];
int p;
double z[B];
short q;
} str2;

void doSub(str1 *t, str2 *u) {
int v1 = u->p;
int v2 = u->q;
t->x = v1-v2;
}

为 doSub 过程生成的汇编代码

# t in %rdi, u in %rsi
doSub:
movswl 96(%rsi), %edx
movl 20(%rsi), %eax
subl %edx, %eax
movl %eax, 48(%rdi)
ret

最佳答案

w and x

w 的大小为 5*9=45,但 x 需要对齐 4 字节,因此间隙为将是 3 字节。还可以在访问 x 的偏移量 48 的程序集中看到。

y and p

y 的大小为 9*2=18p 需要对齐到 4 字节,因此间隙为2。还可以在访问偏移量 20 的汇编代码中看到。

p and z

p 的大小为 4,因此以偏移量 24 结束。 q 位于偏移量 96(在程序集中看到),z 的大小为 9*8=72,因此 z96-72=24 开始。因此间隙为0。 (double 的对齐方式可能会有所不同,因此从汇编代码开始向后工作。)

z and q

由于 q 是一个短字符并且仅与 2 字节对齐,因此 z 之后没有间隙。

关于c - 如何使用给定的汇编代码查找 C 代码中变量之间的间隙值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com