给定以下结构:
typedef struct {
char a;
int b[10];
} elem;
elem s[100];
知道s、i、j分别位于%ebx、%esi、%edi中,如何确定内存地址
s[i].b[j]
?
谢谢!
最佳答案
这很简单:
s[i]
的地址与地址s[0]
的偏移量通过i * sizeof(elem)
字节。成员(member)地址
b[j]
从成员b[0]
偏移通过j * sizeof(int)
字节。b[0]
的地址在对象内部elem x
与地址x
的偏移量通过offsetof(elem, b)
字节。你需要#include <stddef.h>
对于这个宏。
您可以编写一个 C 程序来发出所有相关常量,然后在您的汇编代码中使用它们。在任何情况下,你都想计算:
s + i * sizeof(elem) + offsetof(elem, b) + j * sizeof(int)
或者:
ebx + esi * sizeof(elem) + offsetof(elem, b) + edi * sizeof(int)
关于c - 结构数据项的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26147744/